pitón función 15 de cierre

1. objeto de función

Esencia: la función como una variable para su uso, uso específico puede dividirse en cuatro áreas

  • 1, puede ser asignado, el nombre de la función asignada de A a B, B directamente () la función se puede citar que la
f=func
print(f,func)
f()
  • 2, la función se puede hacer pasar como un argumento de otra función
def foo(x): # x = func的内存地址
    # print(x)
    x()

foo(func) # foo(func的内存地址)
  • 3, el valor de retorno de la función puede ser una función de
def foo(x): # x=func的内存地址
    return x # return func的内存地址

res=foo(func) # foo(func的内存地址)
print(res) # res=func的内存地址
res()
  • 4, los elementos del recipiente pueden ser utilizados como un tipo de
l=[func,]
# print(l)
l[0]()

dic={'k1':func}
print(dic)
dic['k1']()

función de demostración objeto:

def login():
    print('登录功能')


def transfer():
    print('转账功能')


def check_banlance():
    print('查询余额')


def withdraw():
    print('提现')


def register():
    print('注册')


func_dic = {
    '0': ['退出', None],
    '1': ['登录', login],
    '2': ['转账', transfer],
    '3': ['查询余额', check_banlance],
    '4': ['提现', withdraw],
    '5': ['注册', register]
}
# func_dic['1']()


while True:
    for k in func_dic:
        print(k, func_dic[k][0])

    choice = input('请输入命令编号:').strip()
    if not choice.isdigit():
        print('必须输入编号,傻叉')
        continue

    if choice == '0':
        break

    # choice='1'
    if choice in func_dic:
        func_dic[choice][1]()
    else:
        print('输入的指令不存在')

2. Funciones anidadas

  • 1, las llamadas a funciones anidadas: llamar a una función del proceso y llamar a otras funciones
def max2(x,y):
    if x > y:
        return x
    else:
        return y


def max4(a,b,c,d):
    # 第一步:比较a,b得到res1
    res1=max2(a,b)
    # 第二步:比较res1,c得到res2
    res2=max2(res1,c)
    # 第三步:比较res2,d得到res3
    res3=max2(res2,d)
    return res3

res=max4(1,2,3,4)
print(res)
  • 2, la definición de función anidada: para definir otras funciones dentro de una función
def f1():
    def f2():
        pass
  • Buscando un perímetro circular o área buscan
def circle(radius,action=0):
    from math import pi

    def perimiter(radius):
        return 2*pi*radius

    # 求圆形的求面积:pi*(radius**2)
    def area(radius):
        return pi*(radius**2)

    if action == 0:
        return 2*pi*radius

    elif action == 1:
        return area(radius)

circle(33,action=0)

3. La función de cierre

  • 1. La premisa de
    la función de cierre y el alcance namespace = + + función anidada función de objeto
    punto central: el nombre de la relación es encontrar la etapa de definición de función prevalecer
  • 2. ¿Cuál es la función de cierre de
    "cerrar" se refiere a la función es función en línea
    hace referencia a la capa exterior contiene el nombre del ámbito de la función función de "paquete" se refiere a la función (en lugar del ámbito global)
    concepto basado en objeto de función, que puede la función devuelve la llamada a ir a ninguna parte, pero la relación es en el ámbito de la definición de la función completa ha sido determinada, independientemente de la ubicación de la llamada de función.
    Esa es la función son tratados como procesamiento de datos, siempre viene con el alcance prevalecer. Si la función contiene incrustado referencia al alcance externo (no alcance global) las variables, entonces la 'función anidada' es un cierre de función se refiere cierres (cierres)
    función de cierre: espacio de nombres y alcance aplicación de una función anidada +
def f1():
    x = 33333333333333333333
    def f2():
        print(x)
    f2()


x=11111
def bar():
    x=444444
    f1()

def foo():
    x=2222
    bar()

foo()
  • la función de cierre: objetos de función
def f1():
    x = 33333333333333333333
    def f2():
        print('函数f2:',x)
    return f2

f=f1()
# print(f)

# x=4444
# f()
def foo():
    x=5555
    f()

foo()

4. Uso de cierre

  • El Senado aprobó un plan:
def get(url):
     response=requests.get(url)
     print(len(response.text))

 get('https://www.baidu.com')
 get('https://www.cnblogs.com/linhaifeng')
 get('https://zhuanlan.zhihu.com/p/109056932')
  • El traspaso de parámetros Opción dos:
def outter(url):
    # url='https://www.baidu.com'
    def get():
        response=requests.get(url)
        print(len(response.text))
    return get

Supongo que te gusta

Origin www.cnblogs.com/Franciszw/p/12550084.html
Recomendado
Clasificación