• 3.29 day9 动态参数


    动态传参:

    万能参数:*args,接受的就是实参对应的所有位置参数,并放在元组里

    形参对应顺序:位置参数,*args,默认参数


    def
    func(a,b,c,d,*args,e='male'): print(a) print(b) print(c) print(d) print(args) print(e) func(1,2,3,4,5,10,5,6,7,8,e='female')

    **kwargs:接收所有的关键字参数(无意义的)并放在一个字典中

    def func(a,b,c,**kwargs):
        print(kwargs)
    func(1,2,c=3,r=4,b1=5,c1=6,d=7)

    {'c1': 6, 'b1': 5, 'r': 4}

    所有参数的顺序:位置参数,*args,默认参数,**kwargs

    **的魔法作用

    1.*可迭代对象,代表打散(list,tuple,字符串,字典的键)

    2.**字典,代表打散,将所有的键值对防盗一个kwargs字典里

    def func(*args):
        print(args)
    l1=[1,2,30]
    l2=[1,2,33,21,45,66]
    print(func(*l1,*l2))
    在函数定义时,*args,**kwargs代表的是聚合

    def
    func(*args,**kwargs): print(args) print(kwargs) dic1={'name1':'alex','age1':46} dic2={'name2':'wusir','age2':64} func(*[1,2,3,4],*'asdfsad',**dic1,**dic2)

    (1, 2, 3, 4, 'a', 's', 'd', 'f', 's', 'a', 'd')
    {'name2': 'wusir', 'name1': 'alex', 'age1': 46, 'age2': 64}

    我们首先回忆一下Python代码运行的时候遇到函数是怎么做的,从Python解释器开始执行之后,就在内存中开辟里一个空间,每当遇到一个变量的时候,就把变量名和值之间对应的关系记录下来,但是当遇到函数定义的时候,解释器只是象征性的将函数名读如内存,表示知道这个函数存在了,至于函数内部的变量和逻辑,解释器根本不关心。

      等执行到函数调用的时候,Python解释器会再开辟一块内存来储存这个函数里面的内容,这个时候,才关注函数里面有哪些变量,而函数中的变量回储存在新开辟出来的内存中,函数中的变量只能在函数内部使用,并且会随着函数执行完毕,这块内存中的所有内容也会被清空。

    我们给这个‘存放名字与值的关系’的空间起了一个名字-------命名空间

    代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做全局命名空间;

    在函数的运行中开辟的临时的空间叫做局部命名空间

    def f1():
        print('in f1')
        def f2():
            print('in f2')
        f2()
    f1()
    
    
    def f1():
        def f2():
            def f3():
                print('in f3')
            print('in f2')
            f3()
        print('in f1')
        f2()
    f1()
    a=2
    b=3
    def func1():
        c=5
        d=6
        print(globals()) #全局变量放入到一个字典中
        print(locals())
    func1()

    {'__file__': '/Users/lixinwei/PycharmProjects/untitled1/3.29/3.29知识点.py', '__doc__': None, 'a': 2, '__package__': None, '__cached__': None, '__spec__': None, 'func1': <function func1 at 0x1021748c8>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, 'b': 3, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1006a5cc0>}
    {'c': 5, 'd': 6}
     
    a=4
    def func1():
        global a
        a=5
    func1()
    print(a)

    a=5 如果去掉global a=4

    globals:全局名称空间的所有变量。

      作用:1.在局部空间内生命一个全局变量

         2.在局部空间内改变一个全局变量

    nonlocal:

      1.不能改变全局变量,但能修改聚部变量

      2.在局部作用域中,对父级作用域(或更外层作用域非全部作用域)的变量进行修改,并且引的哪层,从哪层及以下此变量全部发生改变

    def add_b():
        b = 42
        def do_global():
            b = 10
            print(b)
            def dd_nonlocal():
                nonlocal b
                b = b + 20
                print(b)
            dd_nonlocal()
            print(b)
        do_global()
        print(b)
    add_b()

    10,30,30,42

    函数在调用的时候执行

    代码从上倒下依次执行,调用函数,函数里面从上倒下依次执行

  • 相关阅读:
    利用Delegator模式保护javascript程序的核心与提高执行性能 (转)
    工作流
    蓝色垂直滑动效果的CSS导航
    JavaScript 多级联动浮动菜单 (第二版) (转)
    虚线效果水平CSS菜单
    红色玻璃效果水平CSS菜单
    CSS绿色水平多级下拉菜单
    ASP.NET中的Path(转)
    黑色与红色形成的水平CSS导航菜单
    紫罗兰水平CSS菜单
  • 原文地址:https://www.cnblogs.com/kateli/p/8671974.html
Copyright © 2020-2023  润新知