Python - lambda & 内置函数 & 文件操作

一、lambda表达式

lambda表达式只能用来写简单的函数, 就像用三元运算写简单if else语句一样
#无参数
def f1():
    return 123
f1()

f2 = lambda : 123
f2()

#有参数
def f3(a1,a2):
    return a1+a2
f3(3,4)

f4 = lambda a1,a2 : a1+a2
f4(3,4)

二、内置函数

👉👉 详细方法
  • abs(x) #返回一个数的绝对值,参数可以是整数也可以是浮点数
  • >>> abs(-2)
    2
    >>> abs(-3.4)
    3.4
    
  • all(iterable) #如果传入的可迭代对象中的每个元素都为真则返回True,如果是空返回Flase (0,None,“”,{},[],()这些都是假)
  • >>> all([1,'alex'])
    True
    >>> all([1,'alex',''])
    False
    
  • any(iterable) #如果传入的可迭代对象中的任意一个元素为真则返回True,如果是空返回Flase (0,None,“”,{},[],()这些都是假)
  • >>> any([1,'alex',''])
    True
    
  • ascii(object) #调用对象对应的类里面的__repr__方法
  • >>> ascii(list())
    '[]'
    
  • bin(x) #二进制
  • oct(x) #八进制
  • int(x) #十进制
  • hex(x) #十六进制
  • #十进制 >> 二进制
    >>> bin(10)
    '0b1010'
    >>> bin(-10)
    '-0b1010'
    
    #十进制 >> 八进制
    >>> oct(10)
    '0o12'
    
    #十进制 >> 十六进制
    >>> hex(10)
    '0xa'
    
    #二进制 >> 十进制
    >>> int('0b0100',base=2)   #后面使用base标记需要转换的是多少进制
    4
    
    #八进制 >> 十进制
    >>> int('0o0100',base=8)
    64
    
    #十六进制 >> 十进制
    >>> int('0x0100',base=16)
    256
    
    #### 如果x不是python的整数对象,需要定一个 __index__()方法用来返回一个整数 ####
    >>> format(14, '#b'), format(14, 'b')
    ('0b1110', '1110')
    >>> format(14, '#o'), format(14, 'o')
    ('0o16', '16')
    >>> format(14, '#x'), format(14, 'x')
    ('0xe', 'e')
    
    >>> f'{14:#b}', f'{14:b}'
    ('0b1110', '1110')
    >>> f'{14:#o}', f'{14:o}'
    ('0o16', '16')
    >>> f'{14:#x}', f'{14:x}'
    ('0xe', 'e')
    
  • chr(i) #数字转换为字符
  • ord(c) #字符转换为数字
  • >>> chr(97)
    'a'
    >>> chr(8364)
    '€'
    
    >>> ord('a')
    97
    >>> ord('€')
    8364
    
    利用chr()写一个随机的四位数的验证码:
    import random
    
    temp = ''
    for i in range(4):   #利用range循环四次,组成一个四位数
        num = random.randrange(0,4)  #随机生成0-4(不包含4)
        if num == 1:   
            r1 = random.randrange(0,10) 
            temp = temp + str(r1)    
    
        else:
            r2 = random.randrange(65,91)   #随机生成65-90之间的数字,利用chr()转为对应字母,65-90对应的ascii码值是大写字母A-Z
            c = chr(r2)
            temp = temp + c
    print(temp)
    
  • callable(object) #判断一个对象后加()是否可以执行
  • >>> def f():
    ...     print('x')
    ... 
    >>> callable(f)
    True
    
  • divmod(a, b) #传入两个数值,将他们的商和余数以元组的形式返回。#做网站分页的时候会用到
  • >>> divmod(19,3)
    (6, 1)
    
  • eval(expression, globals=None, locals=None) #有返回值,可以执行一个字符串形式的表达式
  • >>> x = 1
    >>> eval('x+1')
    2
    
    >>> eval('a + 60',{'a':99}) #后面可以通过字典来赋值
    159
    
  • exec(object[, globals[, locals]]) #complie用来编译代码,exec用来执行py代码,但是没有返回值
  • >>> exec('for i in range(3):print(i)')
    0
    1
    2
    
  • filter(function, iterable) #循环可以迭代的对象,获取每一个参数,每个元素作为函数的参数
  • def f1(x):
        if x > 22:               #当x大于22的时候才被返回
            return True
        else:
            return False
    
    
    ret = filter(f1, [11, 22, 33, 44])    #将列表每个元素传入f1函数中调用    
    
    for i in ret:
        print(i)
    
    
    #用lambda表达式写
    ret = filter(lambda x : x >22, [11,22,33,44])
    
    for i in ret:
        print(i)
    
  • map(function, iterable, ...) #循环可以迭代的对象,获取每一个参数,每个元素作为函数的参数,返回新值
  • def f1(x):
        return x + 100
    
    ret = map(f1,[1,2,3,4])
    for i in ret:
        print(i)
    
    #lambda写法,加上判断
    ret = map(lambda x : x + 100 if x % 2 ==0 else x, [1,2,3,4])  #偶数的是返回x+100,奇数直接返回x
    for i in ret:
        print(i)
    
  • hash(object) #给传入对象返回hash值
  • >>> hash('dasfdhjhfjdsafd')
    -5415384163010481625
    
  • iter(object[, sentinel]) #返回一个迭代器对象
  • >>> li = iter([11,22,33,44])
    >>> next(li)
    11
    >>> next(li)     #使用next逐个返回迭代对象内容
    22
    
  • max(iterable, *[, key, default]) #返回最大值
  • max(arg1, arg2, *args[, key])
  • >>> max([12,3,4534,543,324])
    4534
    
  • min(iterable, *[, key, default]) #返回最小值
  • min(arg1, arg2, *args[, key])
  • >>> min([12,3,4534,543,324])
    3
    
  • pow(x, y[, z]) #返回x的y次幂,相当于x**y,如果z存在,pow(x, y) % z,返回x的y次幂除以z后的余数
  • >>> pow(2,3)
    8
    >>> pow(2,3,4)
    0
    
  • round(number[, ndigits]) #返回数字四舍五入到ndigits精度
  • >>> round(4.33333,3)
    4.333
    
  • sum(iterable[, start]) #计算迭代对象中所有元素的和
  • >>> sum([1,2,3,4,5])
    15
    
  • sorted(iterable, *, key=None, reverse=False) #排序
  • >> 当可迭代对象元素是字符串的时,排序按照ascii码值排序,👉👉 ascii表
    char = [11,2,43,54,676]
    r = sorted(char)
    print(r)  # >> [2, 11, 43, 54, 676]  如果可迭代对象全是数组,那么排序就是按照从小到大排
    
    char = ['11','嗨','2','43','尽','54','676','alex','_','咯','durand','A','C','凯','v','g','e','文']
    r = sorted(char)
    print(r)  # >> ['11', '2', '43', '54', '676', 'A', 'C', '_', 'alex', 'durand', 'e', 'g', 'v', '凯', '咯', '嗨', '尽', '文']
    

    三、open函数文件操作

    操作文件时,一般需要经历如下步骤:
    • 打开文件
    • 操作文件
    • 关闭文件
    1.打开文件
    文件句柄 = open('文件路径', '模式','编码')
    
    打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。
    打开文件的模式有:
    基本打开方式
    • r, 只读模式【默认】 #r 方式打开的时候,默认就是utf-8,不加encoding='utf-8'也可以
    • w, 只写模式【不可读;不存在则创建;存在则清空内容;】
    • x, 只写模式【不可读;不存在则创建,存在则报错】
    • a, 追加模式【不可读;不存在则创建;存在则只追加内容;】
    "+" 表示可以同时读写某个文件,但是他们的顺序有些区别
    • r+, 读写【可读,可写】
    • f = open('example.txt','r+',encoding='utf-8')
      print(f.tell())  #从头开始读
      data = f.read()
      f.write('埃菲尔铁塔')  #追加写
      f.close()
      print(data)
      print(f.tell())  #当数据写入后,指针跳到最后
      
    • w+,写读【可读,可写】
    • f = open('example.txt','w+',encoding='utf-8')
      f.write('埃菲尔铁塔')     #写入之前先清空
      print(f.tell())         #写入后,指针跳到最后
      f.seek(0)               #把调整指针位置,进行读取
      data = f.read()
      f.close()
      print(data)
      
    • x+, 写读【可读,可写】
    • f = open('example.txt','x+',encoding='utf-8')  #和w+的区别就是,当文件存在的时候会报错
      
    • a+, 写读【可读,可写】
    • f = open('example.txt','a+',encoding='utf-8')
      print(f.tell())     #开始指针就跳到最后
      data = f.read()     #无法读取
      f.write('在哪里?')
      print(f.tell())     #写入数据后,指针也跳到最后
      f.seek(0)           #把指针调到开头,进行读取
      data = f.read()
      f.close()
      print(data)
      
    "b"表示以字节的方式操作(二进制方式),以字节的方式打开无需加编码
    • rb 或 r+b
    • f = open('example.txt','rb')   #使用二进制方式读取
      data = f.read()
      f.close()
      
      str_data = str(data,encoding='utf-8')  #读取的时候将字节转换为字符串
      
      print(str_data)
      
    • wb 或 w+b
    • f = open('example.txt','wb')   #使用二进制方式写入
      str_data = '法国巴黎'
      b_data = bytes(str_data,encoding='utf-8')    #当使用二进制方式写入的时候,需要转换为bytes方式,并加入encoding
      f.write(b_data)
      
      f.close()
      
    • xb 或 w+b
    • ab 或 a+b
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型
    2.操作
    flush(self, *args, **kwargs) # 刷新文件内部缓冲区, 如果进程没停止,写入的数据不会被刷如硬盘,当使用flush,即使程序没停止,写入的数据也会被刷入硬盘
    
    readline(self, *args, **kwargs) # 仅读取一行数据
    
    def tell(self, *args, **kwargs) # 获取指针位置
           
    def seek(self, *args, **kwargs) # 指定文件中指针位置
    
    truncate(self, *args, **kwargs) # 截断数据,仅保留指定之前数据,在执行前,指针在哪,执行后指针后数据截断
    

    3.with方法
    每次打开文件后,需要关闭文件,但是总是忘记。 当with代码块执行完毕时,内部会自动关闭并释放文件资源。
    with open('log','r') as f:
            
        ...
    
    在Python 2.7 及以后,with又支持同时对多个文件的上下文进行管理,即:
    with open('log1','r') as obj1, open('log2','r') as obj2:
        pass
    
    #使用此方法逐行将f1里面的文件写入到f2中
    with open('example.txt','r') as f1, open('example2.txt','w') as f2:
        for line in f1:
            f2.write(line)
    

    评论

    此博客中的热门博文

    Skype 常用命令

    三星xpress M2070W 如何连接 WiFi

    Python - shutil 模块