zoukankan      html  css  js  c++  java
  • Day10

    1、动态参数

    *args 动态参数,万能参数

    args接受的就是实参对应的所有位置参数,并将其放在元祖中

    形参对应顺序

    位置参数,*args,默认参数

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

    #**kwargs:动态传参,将所有的关键字参数(无意义的)放到一个字典中

    def func(a,b,c,**kwargs):
        print(kwargs)
    func(1,2,r=4,b1=5,c1=6,c=7)
    def func(a,b,c,d,*args,e='',**kwargs):
        print(a)
        print(b)
        print(c)
        print(d)
        print(args)
        print(e)
        print(kwargs)
    func(1,2,3,4,5,6,7,v=3,m=7,h=9,e='')

    最终顺序:位置参数,*args,默认参数,**kwargs

    *魔法运用

    def func(*args):
        print(args)
    l1=[1,2,30]
    l2=[1,2,33,21,45,66]
    func(*l1,*l2)
    def func(**kwargs):
        print(kwargs)
    dic1={'name1':'alex','age1':33}
    dic2={'name':'老男孩','age':56}
    func(**dic1,**dic2)

    在函数的调用执行时,

      *可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args

      **字典,代表打散,将所有键值对放到一个kwargs字典中

    在函数定义时,*args,**kwargs代表的是聚合

    2、名称空间,临时名称空间

    名称空间(命名空间),临时名称空间,内置名称空间

    全局名称空间,名称空间,命名空间,全局命名空间

    局部命名空间,临时名称空间,临时命名空间,局部名称空间

    内置名称空间,所有的内置函数等存储的空间

    input(),print(),len内置函数

    加载顺序:

      内置名称空间--->全局名称空间--->(函数执行时)局部名称空间

    取值顺序:

      函数执行时:局部名称空间--->全局名称空间--->内置名称空间

    当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系

    随着函数的执行完毕,临时空间自动关闭

    3、函数的嵌套

    函数被调用的时候执行,代码从上至下依次执行,调用函数:函数里面从上至下依次执行

    def func1():
         print(333)
         func2()
         print(666)
    
    def func2():
         print(444)
         func3()
    
    def func3():
         print(555)
    
    func1()
    print(222)  #111 333 444 555 666 222

    globals(),locals()

    a = 2
    b = 3
    def func1():
        c = 5
        d = 6
        print(globals())  # 全局变量放在一个字典中
        return locals()  # {'c': 5, 'd': 6}
    print(func1())
    # print(globals())  # 全局名称空间:所有变量
    # print(locals())  # 局部名称空间:所有变量

    4、关键字global,nonlocal

    global

    1、在局部空间内,声明一个全局变量

    def func1():
        global name
        name='老男孩'
        print(name)
    func1()
    print(name)

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

    a=4
    def func1():
        global a
        a=5
    func1()
    print(a)

    nonlocal

    1、不能修改全局变量

    a=4
    def func1():
        nonlocal a
        a=5
    func1()
    print(a)   #SyntaxError: no binding for nonlocal 'a' found

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

    a=4
    def func1():
        b=6
        def func2():
            b=666
            print(b)   #666
        func2()
        print(b) #6
    func1()








  • 相关阅读:
    0x00000090 该内存不能read written
    AutoCAD系统变量:EDGEMODE
    AutoCAD.net: DoubleClick
    Access 类型转换函数
    无法更改文件夹的隐藏属性 解决方法!
    Windows防火墙无法启动解决办法
    AutoCAD.net: DrawOrderChange display order of the entities in the drawing
    C#调用C++编写的COM DLL
    编辑AutoCAD 2010中新出现的CUIx文件[转]
    hook钩子
  • 原文地址:https://www.cnblogs.com/a352735549/p/8671229.html
Copyright © 2011-2022 走看看