完整的复习完了,直接贴代码
"""
学习内容
1.局部变量和全局变量(global)
2.闭包
"""
name = "yft" # 声明在函数外部的变量是全局变量
def func1():
s = "abcd" # 函数内部声明的变量,叫做局部变量,仅限在函数内部使用
print(s)
func1() # abcd
# print(s) 这里会报错
def func2():
name = "yueyue" # 外部函数和内部函数同名,优先打印内部的
print(name)
"""
def func3():
print(name)
# 不能在函数内部中修改全局变量
name+="会弹吉他" (会报错)
"""
# 修改后
def func4():
global name # 不修改可以不用声明,要修改则需要声明全局变量
print(name) # yft
"""不能在函数内部中修改全局变量"""
name += "会弹吉他"
func4()
print(name) # yft会弹吉他
# list是可变类型,不用global也能修改
# 内部函数:
def func():
# 声明变量
n = 100 # 局部变量
list1 = [1, 5, 2, 6] # 局部变量
def inner_func():
nonlocal n
# 对list1内的数字进行+5的操作
for index, value in enumerate(list1):
list1[index] += 5 # 列表为可变类型
print(list1) # [6, 10, 7, 11]
n += 50
"""
由于n为不可变变量,因此要使用nonlocal/
nonlocal只能在封装函数中使用
"""
print(n) # 150
inner_func()
func()
a = 100 # 全局变量
print(globals()) # 查看全局变量有哪些
def func5():
# 声明局部变量
b = 100
def inner():
global a # 内部函数修改全局变量(不可变)要用global
nonlocal b # 内部函数修改外部函数不可变变量时,首先要在外部已经声明条件下使用nonlocal
# 尝试修改c
c = 100
c += 100 # 内部的变量可以直接修改
# 尝试修改b
b += 100
# 尝试修改a
a += 100
print(a, b, c) # 200 200 200
print(locals()) # 查看当前函数中声明的变量(如b,c)
inner()
print(locals()) # 查看当前函数中声明的变量
# 调用
func5()
# 闭包
"""
闭包特点:
1.保存返回闭包时的状态(外层函数变量)
"""
# 闭包例子1
def add(a, b): #a=5, b=10
c = 10 #c=0
def inner_fun():
s = a + b + c
print("相加的结果是:{}".format(s))
return inner_fun
# result接收了inner_fun函数返回的值
result = add(5, 10)
result()
# 闭包例子2
def mi(cifang):
def jishu(base):
return base**cifang
return jishu
square = mi(3)
print(square(5))
分析闭包例1: