1、变量作用域
print(globals())#查看当前空间下所有可以使用的全局变量
print(locals())#查看当前命名空间下所有可以使用的局部变量
def test1():
a=100
print(locals())
test1()#返回的是一个字典
2、偏函数
def int2():
return int(n,base=2)
b=int(‘1000’)
print(b) #二进制转十进制
偏函数:本质是固定函数参数的默认值,简化函数调用时的参数构造
import functools
int16=functools.partial(int,base=16)
c=int16(‘145’)
print©
3、匿名函数
def test2():
print(‘helllo’)
print(test2.name) #函数的名字
a=test2 #匿名函数可以像普通变量一样赋值
print(a.name)
test2()
a()
def demo(func):
func()
demo(test) #函数可以作为其他函数 的参数
格式:lambda 参数列表:表达式
参数列表:书写形式和函数的参数列表相同
表达式:就是匿名函数 的返回值,不需要使用return关键字
def calc(a,b,yunsuan):
return yunsuan(a,b)
print(calc(1,5,lambda a,b:a+a))
print(calc(2,7,lambda a,b:a*b))
列表排序使用匿名函数的例子
lt = [
{‘name’: ‘dahua’, ‘age’: 18, ‘height’: 175},
{‘name’: ‘erhua’, ‘age’: 17, ‘height’: 165},
{‘name’: ‘dagou’, ‘age’: 22, ‘height’: 185},
{‘name’: ‘ergou’, ‘age’: 21, ‘height’: 180}
]
def key(dt):
return dt[‘age’]
#lt.sort(key=key)#第一个key是sort里面的key=None,第二个key是key()函数
lt.sort(key=lambda dt:dt['height])
for i in lt:
print(i)
4、闭包使用
闭包:在外部函数中定义一个内部函数;在内部函数中使用外部函数定义的局部变量;在外部函数将内部函数作为返回值返回,返回的函数称为闭包
闭包可以认为是具有执行环境的函数
def wai(n):
def nei():
return n*n
return nei
s1=wai(3) #s1和s2都是闭包
s2=wai(5)
print(s1())
print(s2())
5、装饰器
需要修改函数功能时,可以通过装饰器进行解决,该函数有一个参数是函数类型,返回值是一个闭包。在闭包中调用传递进来的函数,在调用函数的前后都可以添加内容
def zhuangshiqi(func):
def neibu():
print('’)
func()
print(’#############’)
return neibu
@zhuangshiqi #相当于test3=zhuangshiqi(test3)
def test3():
print(‘hello’)
#test3=zhuangshiqi(test3)
test3()
标准装饰器
import functools
def zhuangshiqi(func):
@functools.wraps(func) #专门用来修正被修饰的函数的名字
def neibu(args,kwargs):
print('’)
result=func(args,**kwargs)
print('****’)
return result
return neibu
@zhuangshiqi
def show(a,b):
return ab
print(show(1,6))
print(show.name)