day19 función recursiva generador +

Antes de argumento:

Último tiempo pensando: cargue y ejecute el análisis de múltiples decoradores

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, la expresión rendimiento

1 expresión rendimiento uso básico

Mientras las palabras clave de rendimiento aparece en la función, llamar a esta función no se ejecuta, devuelve un generador (iteradores personalizados), donde se puede pasar valores de rendimiento, para aceptar este valor por una variable en la función

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

Dos, tres expresiones

expresiones ternarios con el código es una forma abreviada

El código que se ejecuta cuando el código si la condición condición else correr no está satisfecho cuando se cumplen las condiciones: la sintaxis

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

En tercer lugar, la fórmula

Lista de Fórmula 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 Diccionario de fórmula

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 }

Colección de fórmula 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 expresión generador

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

En cuarto lugar, la función recursiva

1 definición recursiva

Es una forma especial de funciones anidadas

En el proceso de llamar a una función llama a sí mismo directa o indirectamente

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

2 recursiva detallada

Si se ejecuta el código anterior se encontró error PyCharm recursividad después de alrededor de 1000, debido a que la recursividad en sí es un acto muy peligroso, si no hacemos nada con él de forma permanente las llamadas recursivas irán directamente causa de desbordamiento de memoria.

#需求:生成一个含有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)

recursiva de dos etapas

Volver: hacer descender capa por capa

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

Recursiva: para cumplir con ciertas condiciones de la final, el final de la llamada recursiva, y luego regresar a un nivel

Supongo que te gusta

Origin www.cnblogs.com/hz2lxt/p/12566688.html
Recomendado
Clasificación