百度网站v认证,竞价排名名词解释,企业宣传画册设计,公司网站建设小知识from 《流畅的python》
def f1(a):print(a)print(b)
f1(3)# NameError: name b is not defineddef f1(a):print(a)print(b)b 5 # 全局变量
f1(3)
# 输出正常python编译时#xff0c;判断 b 是局部变量#xff0c;因为在函数中给他赋值了 当打印 b 时#xff0c;发现 b 没…from 《流畅的python》
def f1(a):print(a)print(b)
f1(3)# NameError: name b is not defineddef f1(a):print(a)print(b)b 5 # 全局变量
f1(3)
# 输出正常python编译时判断 b 是局部变量因为在函数中给他赋值了 当打印 b 时发现 b 没有绑定值所以报错
b 5
def f2(a):print(a)print(b)b 6 # 局部变量f2(3) # UnboundLocalError: local variable b referenced before assignment使用 global 指定 使用 全局变量
b 5
def f2(a):global bprint(a)print(b)b 6print(b)f2(3)
print(b)输出 3, 5, 6, 6 闭包
def make_avg():nums [] # 自由变量def averager(val): # 闭包延伸到函数的作用域之外包含 nums 自由变量的绑定nums.append(val) # list 是可变对象我们没有赋值只是调用 appendtotal sum(nums)return total/len(nums)return averager
avg make_avg()
print(avg(10)) # 10.0
print(avg(20)) # 15.0
print(avg(30)) # 20.0# 报错 UnboundLocalError: local variable count referenced before assignment
def make_avg():count 0 # 自由变量total 0def averager(val):count 1 # intstr元组等不可变元素重新赋值隐式创建局部变量# 而不再是外部的自由变量 不会保存在闭包中total valreturn total/countreturn averager
avg make_avg()nolocal 把变量标记为 自由变量使用外层变量
def make_avg():count 0total 0def averager(val):nonlocal count, totalcount 1total valreturn total/countreturn averager
avg make_avg()
print(avg(10)) # 10.0
print(avg(20)) # 15.0
print(avg(30)) # 20.0