day19再帰関数ジェネレータ+

前引:

前回の思考:ロードして実行する複数のデコレータ分析

def deco1(func1): #func1=warpper2
    def wrapper1(*args,**kwargs):
        print('正在运行===>deco1.wrapper1')
        res1=func1(*args,**kwargs)
        return res1
    return wrapper1

def deco2(func2):#func2=warpper3
    def wrapper2(*args,**kwargs):
        print('正在运行===>deco2.wrapper2')
        res2=func2(*args,**kwargs)
        return res2
    return wrapper2

def deco3(x):
    def outter3(func3): #func3=index
        def wrapper3(*args,**kwargs):
            print('正在运行===>deco3.outter3.wrapper3')
            res3=func3(*args,**kwargs)
            return res3
        return wrapper3
    return outter3
@deco1      
#@deco1 ==>warpper2=deco1(warpper2) ==>warpper2=warpper1
@deco2
#@deco2 ==>warpper3=deco2(warpper3) ==>warpper3=warpper2
@deco3(111)
#deco3(111)=outter3 @outter3==>index = outter3(index)==>index = warpper3
#装饰器的加载顺序,从下到上
#运行顺序,从上到下
def index(x,y):
    print('from index %s:%s' %(x,y))

A、収量表現

1降伏式の基本的な使い方

長いこの関数を呼び出す機能の歩留まりキーワードが表示されますが、実行されないよう、それはあなたが関数内で変数によって、この値を受け入れるために、歩留まりに値を渡すことができますジェネレータ(カスタムイテレータを)返したよう

def func(name):
    while True:
        print(f"我是{name}")
        x = yield
        print(f"我爱吃{x}")
g = func("hz")
#给函数传参hz调用函数,此时发现函数内有yield关键字,挂起函数,函数调用的返回值是生成器
g.__next__()#执行迭代器功能查找下一个值,运行函数至yield处
g.send("水果")#给yield传值
#注意:这不是yield的返回值,返回值在函数定义的时候就写好了
g.send("巧克力")#给yield传值
>>>我是hz
>>>我爱吃水果
>>>我是hz
>>>我爱吃巧克力
>>>我是hz

二つの、3つの式

コード付き三項式は、速記の方法です

コードの実行そのときの条件が満たされたときの状態他の走行条件が満たされていない場合、コード:構文

x= 1
y =2
if x > y :
    print(x)
else:
    print(y)
>>>2
print(x if x>y else y)
>>>2
print(x) if x>y else print(y)
>>>2

第三に、式

式のリスト1

l = ["a","b","c2","adsa","z"]
#需求:把列表内长度大于1的值添加到新列表new_l中
#基础做法:
for i in l :
    if len(i)>1:
        new_l.append(i)

#列表生成式做法:
new_l = [i for i in l if len(i)>1]

式の2辞書

d = {"a":1,"b":2,"c":3}
#生成一个新的字典,key是d中的所有key,value为none
#基础做法:
new_d = {}
for i in d:
    new_d[i] = None

#字典生成式做法:
new_d = {key:None for key in d }

式のコレクション3

#生成一个含有数字1-9的集合
#基础做法:
set1 = set()
print(type(set1))
for i in range(1,10):
    set1.add(i)
   
#集合生成式做法:
s ={i for i in range(1,10)}

4ジェネレータ式

#生成一个生成器
g = (i for i in range(10) if i >3)
#此刻g内部一个值都没

第四に、再帰関数

1つの再帰的定義

これは、ネストされた関数の特殊な形式です

関数を呼び出したプロセスでは、直接または間接的に自分自身を呼び出します

#直接调用本身
def foo():
    foo()
foo()
#间接调用本身
def f1():
    f2()
def f2():
    f1()
f1()

2詳細な再帰

我々は彼と何もしないならば、我々は再帰自体が非常に危険な行為であるため、上記のコードは、約1000の後pycharm再帰エラーがあります実行した場合は永久に再帰呼び出しは、メモリ・オーバーフロー原因に直接移動します。

#需求:生成一个含有1-10的列表
#for循环方式
l=[]
for i in range(1,11):
    l.append(i)
#函数递归方式
def appen(n):
    if n == 11:
        return
    else:
        l.append(n)
        n+=1
    appen(n)
appen(1)

二段再帰

戻る:層ごとダウンコール

#运行递归函数的过程
def func ():
    func()
func()

再帰的:終わり、再帰呼び出しの最後の一定の条件を満たすようにして、1つのレベルを返します

おすすめ

転載: www.cnblogs.com/hz2lxt/p/12566688.html