"""函数的递归"""# 从0累加到idefthe_sum(i):if i ==0:return0return i + the_sum(i -1)print(the_sum(10))# 汉诺塔defhano(n, A, B, C):"""注释:
整体法 + 树状图反推法 ---> 汉诺塔算法
A:start_position
B:wait_position
C:end_position
"""if n ==1:print(f"{A} ---> {C}")else:
hano(n -1, A, C, B)print(f"{A} ---> {C}")
hano(n -1, B, A, C)
num =int(input("请输入盘子个数>>>"))
hano(num,"A","B","C")
匿名函数
"""匿名函数"""# 有名函数(需要重复调用)deffunc(x, y):return x + y
# 匿名函数(临时调用一次)
res =(lambda x, y: x + y)(2,5)print(res)"""匿名函数的应用"""""" 应用1:找出薪资最高的那个人的名字 """
info ={'jack':5000,'tony':2500,'andy':8000,'amy':6000,'lucy':11000}# max()函数实现以上功能:
res =max(info, key=(lambda k: info[k]))print(res)# 对max()函数的补充:# max()函数用于获得给定的可迭代对象中的最大值。# key是max()函数的一个参数,它辅助max函数找到最大元素。# 当max() 函数中有 key 参数时,求的是 value 的最大值,# 当没有 key 参数时,求的是 key 的最大值# 反之
res =min(info, key=lambda k: info[k])print(res)""" 应用2:给列表内的所有元素添上一个后缀 ---> _老坛酸菜 """# 普通方法:
list_info =['康师傅','景观狼','大今野','白象叶',]
list_new =[name +"_老坛酸菜"for name in list_info]print(list_new)# 匿名函数:
res =map(lambda name: name +'_老坛酸菜', list_info)# map 为映射print(next(res))# 这个map函数的结果为一个生成器!# 所以,print(res) 只能找到它的地址!
import time
# 装饰器部分:
def outer_1(func):
def wrapper_1():
while True:
name = input('\r请输入账号:').strip()
password = input('请输入密码:').strip()
if name == '叶寻' and password == '123':
res = func()
return res
else:
print('账号或密码错误!')
return wrapper_1
def outer_2(func):
def wrapper_2(*args, **kwargs):
print('''\r正在打开登录系统,请稍等...''', end='')
for i in range(5 + 1):
time.sleep(1)
print(f'\r倒计时 ————)))- {5 - i}秒', end='')
res = func(*args, **kwargs)
return res
return wrapper_2
def outer_3(func):
def wrapper(*args, **kwargs):
p = '正在前往登录系统'
k = p.center(2, '*')
print(k, end='')
time.sleep(2)
res = func(*args, **kwargs)
return res
return wrapper
# 原始功能被‘三层装饰器’装饰
@outer_3
@outer_2
@outer_1
def login():
print('登录成功!')
return 520
# 执行功能
login()
记忆函数
"""带有记忆功能的函数"""defouter():
x =0
y =0definner(x1, y1):nonlocal x, y # 记忆功能核心!
x = x + x1
y = y + y1
print("当前坐标位置为(%s,%s)"%(x, y))return inner
move = outer()# 将inner内存地址传给了move变量whileTrue:
s =input("Q退出").strip()if(s =="Q"or s =="q"):break
x =int(input("沿着X方向走>>>").strip())
y =int(input("沿着y方向走>>>").strip())
move(x, y)# 等价于inner内存地址+()# 若看不懂,请认真复习‘装饰器’中‘地址传递’的原理