python学习第三日
2019-07-09 17:52 FriendG 阅读(272) 评论(0) 收藏 举报学习了嵌套和闭包函数,还有装饰器:
定义函数,无关于该函数是否先进行的定义
比如
def x():
def x():
print('aa')
xx()
def xx():
print('xx')
f()
该结果为
此时是无关乎函数定义的先后的
作用域的nonlocal和gobal中
nonlocal是代表着局部变量
gobal代表着全局变量
def sum(): global x x = 100 print(x) def s(): x = 2 print(x) s() print(x) sum()

可以发现全局变量不受嵌套函数中变量改变的影响
但是使用局部变量的话
def sum(): x = 100 print(x) def s(): nonlocal x x = 2 print(x) s() print(x) sum()

可以发现嵌套函数中的x变量的值将函数内外的值都改变了
但是使用gobal和nonlocal这两个中不能进行直接赋值
需要先改变变量在进行复制否者会提示错误,该变量在python3.6之后才可以使用
修饰器的使用可以在不改变源代码的基础上再给代码附加上一些额外的功能
比如计时这一类的
import time def timer(func): def wrapper(*arg,**kwargs): start_time = time.time() res=func(*arg,**kwargs) stop_time = time.time() print(stop_time-start_time) return res return wrapper @timer def xx(): time.sleep(3) print('xx') xx()

此外还有含参的修饰器
def auth(driver='file'): def auth2(func): def wrapper(*arg,**kwargs): name = input("user:") pwd=input("pwd:") if driver == 'file': if name == 'egon' and pwd == '123': print('login successful') res = func(*arg,**kwargs) return res elif driver == 'ldap': print('ldap') return wrapper return auth2 @auth(driver='file') def foo(name): print(name) foo('egon')

浙公网安备 33010602011771号