1.编写一个闭包函数
counter()
,每次调用返回递增的整数(初始为1);;
2.解释nonlocal
和global
关键字的区别,并举例说明
3.编写递归函数计算斐波那契数列的第 n 项(n≥1)
4.编写代码,使用sorted()
函数对字典{'a':3, 'b':1, 'c':2}
按值升序排序,返回键的列表
1.编写一个闭包函数counter()
,每次调用返回递增的整数(初始为1)
def counter():
count = 0
def inner():
nonlocal count
count += 1
return count
return inner
run_fn = counter()
# 设置调用5次的结果
for i in range(5):
print(f"第{i}次调用: {run_fn()}")
2.解释nonlocal
和global
关键字的区别,并举例说明
global
是Python
中的语句,用于在函数内部声明一个全局变量,使得函数可以访问和修改全局的变量;
nonlocal
用于在闭包中声明一个外层函数中的局部变量,使得内层函数可以访问并修改该变量,但此变量并不是全局变量;
二者的主要区别在于,global
是用来操作全局作用域中的变量,而nonlocal
是用来操作封闭作用域中的变量;
print("--- global示例 ---")
g_v = 100
def fn_global():
global g_v
print(f"修改前的全局变量: {g_v}")
g_v += 100
print(f"修改后的全局变量: {g_v}")
fn_global()
print(f"运行完函数后的全局变量: {g_v}")
print("--- nonlocal示例 ---")
def outer():
outer_var = "outer_local"
def inner():
nonlocal outer_var
print(f"inner函数-修改前的变量: {outer_var}")
outer_var = "inner_local"
print(f"inner函数-修改后的变量: {outer_var}")
print(f"运行inner函数前的变量: {outer_var}")
inner()
print(f"运行inner函数后的变量: {outer_var}")
outer()
3.编写递归函数计算斐波那契数列的第 n 项(n≥1)
# 方法一:
def fibonacci(n):
if n <= 0:
print("请输入大于等于1的整数")
return
elif n == 1 or n == 2:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
print("1. 斐波那契数列的第3项:", fibonacci(3))
# 方法二:
def fibonacci_dict(n, data={}):
if n in data:
return data[n]
elif n <= 0:
print("请输入大于等于1的整数")
return
elif n == 1 or n == 2:
return 1
else:
data[n] = fibonacci_dict(n-1, data) + fibonacci_dict(n-2, data)
return data[n]
print("2. 斐波那契数列的第3项:", fibonacci_dict(3, data={}))
# 方法三:
def fibonacci_counts(n, a=1, b=1):
if n < 3:
return b
a, b = b, a+b
return fibonacci_counts(n-1, a, b)
print("3. 斐波那契数列的第3项:", fibonacci_counts(3))
4.编写代码,使用sorted()
函数对字典 {'a': 3, 'b':1, 'c':2}
按值升序排序,返回键的列表
ori_dict = {'a': 3, 'b': 1, 'c': 2}
print('排序结果:', sorted(ori_dict, key=lambda k: ori_dict[k]))