今日所学:

一、匿名函数

语法: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}

以上。