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(-2) 2 >>> abs(-3.4) 3.4
>>> all([1,'alex']) True >>> all([1,'alex','']) False
>>> any([1,'alex','']) True
>>> ascii(list()) '[]'
#十进制 >> 二进制 >>> 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(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)
>>> def f(): ... print('x') ... >>> callable(f) True
>>> divmod(19,3) (6, 1)
>>> x = 1 >>> eval('x+1') 2 >>> eval('a + 60',{'a':99}) #后面可以通过字典来赋值 159
>>> exec('for i in range(3):print(i)') 0 1 2
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)

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('dasfdhjhfjdsafd') -5415384163010481625
>>> li = iter([11,22,33,44]) >>> next(li) 11 >>> next(li) #使用next逐个返回迭代对象内容 22
>>> max([12,3,4534,543,324]) 4534
>>> min([12,3,4534,543,324]) 3
>>> pow(2,3) 8 >>> pow(2,3,4) 0
>>> round(4.33333,3) 4.333
>>> sum([1,2,3,4,5]) 15
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函数文件操作
操作文件时,一般需要经历如下步骤:- 打开文件
- 操作文件
- 关闭文件
文件句柄 = 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()) #当数据写入后,指针跳到最后
f = open('example.txt','w+',encoding='utf-8') f.write('埃菲尔铁塔') #写入之前先清空 print(f.tell()) #写入后,指针跳到最后 f.seek(0) #把调整指针位置,进行读取 data = f.read() f.close() print(data)
f = open('example.txt','x+',encoding='utf-8') #和w+的区别就是,当文件存在的时候会报错
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)
f = open('example.txt','wb') #使用二进制方式写入 str_data = '法国巴黎' b_data = bytes(str_data,encoding='utf-8') #当使用二进制方式写入的时候,需要转换为bytes方式,并加入encoding f.write(b_data) f.close()
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)
评论
发表评论