• python全栈学习--day11(函数高级应用)


    一,函数名是什么?

      函数名是函数的名字,本质:变量,特殊的变量。

      函数名()执行此函数

    '''
    在函数的执行(调用)时:打散。
        *可迭代对象(str,tuple,list,dict(key))每一个元素添加到args元组中。
        **dict 将字典的键值对添加到kwargs字典中。
    
    在函数的定义时: 聚合。
        *args将所有的位置参数聚合到一个元组中。
        **kwargs 将所有的关键字参数聚合到一个字典中。
    '''
    

      #python 2 没有nonlocal

    1.单独打印函数名 

    def func1():
        print(666)
    print(func1)
    

      执行输出:#(单独打印函数名为函数的内存地址)

    2. 函数名的赋值:

    def func2():
        print(666)
    
    f = func2
    print(f())
    

          #说明:这里主要告诉你的是函数名是可以赋值的。这里其实是没有返回值的,所以为None,而666 只是函数体内的print

    3. 函数名可以作为容器类数据的元素

    案例一:

    def f1():
        print(1211)
    
    def f2():
        print(1222)
    
    def f3():
        print(1233)
    
    def f4():
        print(1233)
    
    f1()
    f2()
    f3()
    f4()
    

      执行后输出:

    说明:这里是不是很麻烦呢?这里每一次使用都要写一个函数?这样岂不是还是有重复性的代码呢?

    案例二:(这里实现一个最简单的应用)

    def f1():
        print(1211)
    
    def f2():
        print(1222)
    
    def f3():
        print(1233)
    
    def f4():
        print(1233)
    
    l1 = [f1,f2,f3,f4]
    for i in l1:
        i()
    

      

    4 函数名可以作为参数。

    def f1():
        print(666)
    
    def f2(x):
        x()
    
    f2(f1)
    

      

    解析:

    a = 1
    def f1(x):  #2. 这里这个时候f1(1)
        print(x)   # 3.打印f1的形参
    f1(a)  #1,将变量a =1 的值 1传入f1中
    

      执行后输出:1

    5.函数名可以作为函数的返回值

    def f11(x):  #2.第二步形参得到实参传入的值为:5
    return x #3. 第三步返回给函数调用者 f11(5)

    ret = f11(5) # 1.第一步将5传入函数 f11中
    print(ret)

    #闭包

    #闭包:就是内层函数对外层函数(非全局)变量引用

    #实例一:将内层函数的666在外层打印出来
    def wraaper():
    def inner():
    print(666)
    inner()
    wraaper()

    #打印后输出:666
    #方法二:
    def wraaper():
    def inner():
    print(666)
    return inner
    wraaper()()

     #如何检测闭包

    def wraaperl():
        name = '老男孩'
        def inner():
            print(name)
        inner()
        print(inner.__closure__) #cell  如何这里i为none 就是不是闭包
    # wraaperl()
    

      #如何判断 内层函数名.__closure__ cell 就是闭包

      闭包:当函数开始执行时,如果遇到了闭包,他有一个机制,他会永远开辟一个内存空间,将闭包变量等值放入其中,不会随着函数的执行完毕而消失

     

     装饰器的初始:

     

    def add_b():
        b = 42
        def do_global():
            b = 10
            print(b) # 1.10
            def dd_nonlocal():
                nonlocal b
                b = b + 20
                print(b)  # 2.30
            dd_nonlocal()
            print(b)  # 3.30
        do_global()
        print(b) # 4.42
    add_b()
    

     

     

  • 相关阅读:
    java听课笔记(十五)之 网络编程
    java听课笔记(十五)
    java听课笔记(十四)
    java课堂作业(十三)
    java课堂作业(十二)
    java听课笔记(十三)
    java听课笔记(十二)
    java课堂作业(十一)
    java听课笔记(十一)
    java听课笔记(十)
  • 原文地址:https://www.cnblogs.com/haowen980/p/8678805.html
Copyright © 2020-2023  润新知