def wrapper_out(pt):
?
def wrapper(func):
def inner(*args,**kwargs):
?
useinput = input(‘请输入用户名:>>‘).strip()
password = input(‘请输入密码:>>‘).strip()
with open(pt,encoding=‘utf-8‘) as f:
for line in f:
us,pwd=line.strip().split(‘|‘)
if useinput==us and password ==pwd:
print(f‘登录{pt}成功‘)
ret=func()
return ret
return False
return inner
?
return wrapper
?
def wrapper1(func1):
def inner1():
print(‘w1 ,before‘)
func1()
print(‘w1 after‘)
return inner1
?
def wrapper2(func2):
def inner2():
print(‘w2 ,before‘)
func2()
print(‘w2 after‘)
return inner2
?
# -*- coding: utf-8 -*-
# Author : Ds
?
# 递归函数 : 函数或者其他的代码都可以解决 递归解决的问题 .递归在某些时候有特效
# 官网规定: 默认递归的最大深度1000次
# 如果你递归超过100次还没有解决这个问题,那么执行使用递归,执行效率低
?
#递归含义:
# 具有明确的终止条件
# 自己调用自己
?
#递归案例一:
def func(n):
print(n)
n+=1
func(n)
func(1)
?
#递归案例二:
def age(n):
if n ==1:
return 18
else:
return age(n-1)+2
?
print(age(4))
?
?
#递归案例三:
li= [1, 3, 5, [‘太白‘,‘元宝‘, 34, [33, [11,33],55, ]], [77, 88],66]
?
def func(lis):
for el in lis:
if type(el)==list:
func(el)
else:
print(el)
?
func(li)
?
?
?
# return案例
li= [1, 3, 5, [‘太白‘,‘元宝‘, 34, [33, [11,33],55, ]], [77, 88],66]
def func(lis):
for el in lis:
if type(el)==list:
return func(el) # 只执行到最深的一层列表就返回.
else:
print(el)
func(li)
?
?
?
###个人总结:
# 递归函数 中 , 一般不存在return , 因为 递归函数中首先已经明确 结束条件. 如果加了return 就会造成数据的缺失,
?
###存在return
#上述例子中, 如果在 条件判断后,return 返回func()函数,
#(个人理解: 简单的例子,for循环嵌套, 外层需要执行9次 ,但是执行到4,内层需要执行9次,内层执行完9次之后.存在return ,执行完内层的9次就直接终止)
# 那么当列表中的数据遇到最深的一层列表,输出完结果就会直接终止函数. 后面的数据就不在被执行
# 也就是说 return就只执行到最深的一层列表.
?
?
###不存在return
# 相反,没有return , (个人理解: 简单的例子,for循环嵌套, 外层需要执行9次 ,但是执行到4,内层需要执行9次,内层执行完9次之后.外层继续执行)
# 每次调用递归, 当内层列表都被打印出来之后,外层列表继续下一次
?
###斐波那契数列的几种推导方式
?
#递归:
?
def fbnq_dg(n):
if n<=1: # 4 逐层递减, 递减拼接相加 ,结束条件就是 之不能小于0
return n
return fbnq_dg(n-1)+fbnq_dg(n-2) # [3 2] , [2 1 1 0], [(1 0) 1 1 0 ]
for i in range(1,4):
print(fbnq_dg(i))
?
?
?
# 递推
def fib_loop(n):
a,b=0,1
for i in range(n+1):
a,b=b,a+b
return a
?
print(fib_loop(4)) # 1 1 2 3 5
?
?
?
#生成器
def fib_lop_while(n):
a,b=0,1
while n>0:
a,b=b,a+b
yield a
n -= 1
obj=fib_lop_while(10) # <generator object fib_lop_while at 0x000002898FDFFF68>
print(obj.__next__()) # 1
print(obj.__next__()) # 1
print(obj.__next__()) # 1
?
原文:https://www.cnblogs.com/xiangwang1/p/12180022.html