今日所学:
一、匿名函数
语法:lambda 变量:return的函数值
匿名函数
语法:lambda形参:return的函数体
name="pig"fun=lambda x:x+"_sb"
print(fun(name))
把函数当做一个参数变量赋值给另外一个函数deffoo(a):print(a)defname(b):print("my name is %s"%b)
foo(name("happy"))
注意:lambda的形参可以有多个,且return后的结果最好精简,不能太复杂。
二、函数式编程
编程方法论:函数式编程、面向过程、面向对象
1、函数式编程:编程语言定义的函数+数学意义上的函数
什么是函数式编程(满足以下任意一个条件):
(1)把函数作为参数传给另一个函数;
(2)return时为其他任意函数。
2、尾递归尾调用优化:
在函数的最后一步去调用另一个函数。(注:最后一行不代表函数的最后一步)
deffoo(n):if n>1:print(n)elif n==1:print("无")else:pass
return foo()
三、map、filter、reduce的用法
1、map用法:处理序列中的每个元素,得到的结果是一个“列表”(迭代器,需使用list转成列表形式),该“列表”元素个数及位置与原来一致。
li=[11,2,2,34,6,7,5]print(list(map(lambda x:x+1,li)))
li=[11,2,2,34,6,7,5]
>>>执行自增1运算(逐个逐个,元素个数及位置皆不变)defre(x):return x+1
print(list(map(lambda x:x**2,li)))--->直接用匿名函数,精简时print(list(map(re,li)))--->记住:调用func时只要函数名就行
>>>执行乘方的运算
补充:pop是把值删除,且获取删除的值,原列表也有做更新
num_list=[2,5,100]
res=num_list.pop(0)print(num_list)
>>>
[5,10]
2、filter用法:遍历序列中的每个元素(for循环),判断每个元素得到一个布尔值,如果为“True”则留下,为“False”则舍弃
people=["apple","abanana","acat","dag"]print(list(filter(lambda n:not n.startswith("a"),people)))
>>>['dag']
3、reduce的用法:把序列中的所有元素做合并操作(压缩成一个值)
num_list=[2,5,100]defreduce_text(func,array):
res=array.pop()for num inarray:
res=func(res,num)returnresprint(reduce_text(lambda x,y:x*y,num_list))
>>>1000
四、内置函数
1、ads()
用法:取绝对值
2、all()
用法:判断,若全为真,则输出“True”;只要一个为假,则输出“Flase”。
3、any()
用法:判断,若有一个为真,则输出“True”;全为假,则输出“Flase”。
4、bin()、hex()、oct()
用法:十进制分别转化为二进制、十六进制、八进制
print(bin(8))print(hex(10))print(oct(10))>>>0b10000xa0o12
5、bool()
用法:进行布尔运算
None、空、0则都为假,其余为真
6、bytes()
用法:将字符串转化为字节
encoding :编码
decode :解码
ps:用什么编码就用什么解码;asicc码不能编中文
print(bytes("name",encoding="ascii"))
>>>
b'name'
str1="韩开心"
print(str1.encode("gbk"))
>>>b'\xba\xab\xbf\xaa\xd0\xc4'(gbk中汉字编码用2个字节)
str1="韩开心"
print(bytes(str1,encoding="utf-8"))
>>>b'\xe9\x9f\xa9\xe5\xbc\x80\xe5\xbf\x83'(utf8中汉字编码用3个字节)
7、chr()
用法:按照asicc表打印出来
8、dir()
用法:目录,打印出某一个对象下有什么用法,只能查看方法名称,没有具体解释
help()
用法:帮助,查看方法解释
9、divmod()
用法:取商取余,可做分页
print(divmod(10,3))>>>(3,1)
10、eval()
用法:把字符串中的字符结构提取出来;把字符串中的有效的数学运算结果一并输出
>>> eval('pow(2,2)')4
>>> eval('2 + 2')4
11、hash()
用法:可hash的数据类型为不可变数据类型;不可hash的值为可变数据类型
特点:不管输入多长的值,输出的hash的长度均一致。
12、id()
用法:查看ID地址
13、isinstance()
用法:查看数据类型是否正确
print(isinstance(1,int))print(isinstance("happy",int))print(isinstance([1,2,3,5],list))print(isinstance((4,5,6),tuple))print(isinstance({2,4},set))
>>>
True
False
True
True
True
14、globals():返回全局变量的字典
locals():返回字典类型中的局部变量
defrunoob(arg):
z= 1
print(locals())
runoob(4)
>>>{'arg': 4, 'z': 1}
以上。