函数
匿名函数
lambda通常和其他函数联合使用,不该独立存在。
可以返回多个值:
f=lambda x,y,z:(x+1,y+1,z+1)
print(f(1,2,3))
输出
(2,3,4)
编程的方法(不同流派):
面向过程:基本编程单位是函数(大过程拆分成小的部分)
函数式 :编程语言定义的函数+数学意义的函数(精简但不易读)
面向对象
函数式编程
不可变(不用变量保存状态,不修改变量);函数即变量;尾调用(在函数的最后一步调用另外一个函数,最后一行不一定是函数的最后一步,'return 函数名(参数)+数字'不算尾调用,实际分为两步:res=函数名(参数)然后是res+数字)。函数式编程实现简单,但易读性差。
#!/usr/bin/env python # -*- coding:utf-8 -*- def foo(n): print(n) def bar(name): print('My name is %s'%name) foo(bar('alex'))
输出
My name is alex
None
函数的返回值可以是函数(本身或者任意函数)
return 函数名() 代表的是return这个函数的返回值
高阶函数:满足函数接收的参数是一个函数名或者返回值中包含函数的函数。
尾递归调用优化,省着保存之前的状态。
map函数
普通程序写法
1 # 终极版本 2 def map_test(func, array): 3 ret = [] 4 for i in array: 5 res = func(i) 6 ret.append(res) 7 return ret 8 print(map_test(lambda x: x + 1, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
输出
[2, 3, 4, 5, 6, 7, 8, 9, 10]
使用map函数:(Python2中生成的直接就是列表;map的处理方法不一定非是lambda函数,如果逻辑复杂,使用自定义函数;map的可迭代参数不一定是列表,可迭代的都可以)
num_1=[1, 2, 3, 4, 5, 6, 7, 8, 9]
res=map(lambda x:x+1,num_1) #生成的是迭代器,只能迭代一次。处理方法+可迭代对象。
print(list(res))
filter函数
filter留下满足函数的参数。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 move_people=['x_sb','y','z_sb','w'] 4 ret=filter(lambda n:not n.endswith('sb'),move_people) 5 print(list(ret))
输出
['y', 'w']
reduce函数
from functools import reduce
reduce(lambda x,y:x*y,num_l,1) #函数、对象、初始值
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 from functools import reduce 4 s='abcdefg' 5 print(reduce(lambda x,y:x+'_'+y,s))
输出
a_b_c_d_e_f_g
map/filer/reduce总结
map:处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样。
filter:遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来。
reduce
内置函数
abs()取绝对值
all()括号内只能有一个参数,可以是可迭代对象字符串、列表、元组、字典、集合(如果有值则判断转换为布尔值后是否全为真,如果为空输出也是True)
any()括号内只能有一个参数,参数只要有为真就返回True
bin()10->2进制
hex()10->16进制
oct()10->8进制
bool()
bytes()字符串转换为字节,编码 #转化为二进制 bytes('你好',encoding='utf-8') #字符串在内存上编码是Unicode #用什么编码就用什么解码bytes('你好',encoding='utf-8').decode('utf-8') #如果不写,python3默认utf-8解码
chr() 例如:chr(97) 即'a' ord()是反过来
dir()某个对象下有哪些方法(只有名字) 比如dict
divmod()分页功能 divmod(10,3)总共10条记录,一页显示3条
enumerate()
eval()把字符串中的数据结构提取出来 dic_str='{'name':'alex'}' d=eval(dic_str) print(d['name']) 输出'alex' 另外,可以把字符串中的表达式进行运算
hash()进行哈希运算的,可哈希的数据类型即不可变数据类型,对应的哈希值固定且哈希值不可反推。不管传入参数长度多长,转化为哈希值长度都固定。用于查看看数据有没有被篡改。
help()
isinstance() 例如print(isinstance(1,int)) 输出True
globals()显示全局变量
locals()显示局部变量
max() ; min()