• 函数二


    一、动态参数:*args **kwargs

      形态角度:

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

    # def func(*args):
    #     print(args)
    # func(1,2,3,4,5,7,8,9,1,2,3,4,5,6,7,8)
    #*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 func1(*args,**kwargs):
    #     pass
    # func1()
    
    # * 魔法运用
    # def func(*args):
    #     print(args) #(1,2,30,1,2,33.。。。。。)
    # l1 = [1,2,30]
    # l2 = [1,2,33,21,45,66]
    # tu = (1,2,3)
    # func(1,2,30,1,2,33,21,45,66)
    # func(*'qweqrfdsaf')
    # func(*{'name':'alex',"age":12})
    # func(*l1,*l2)
    # def func(*args):
    #     print(args)
    # func(1,2,3,10,20,80)
    
    # def func(**kwargs):
    #     print(kwargs)
    #
    # dic1 = {'name1':'alex','age1':46}
    # dic2 = {'name':'老男孩','age':56}
    # func(**dic1,**dic2)
    
    # 在函数的调用执行时,
    #   *可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args。
    #  **字典,代表打散,将所有键值对放到一个kwargs字典里。
    
    # 在函数定义时, *args,**kwargs代表的是聚合。
    # def func(*args,**kwargs):
    #     print(args)
    #     print(kwargs)
    #
    # dic1 = {'name1':'alex','age1':46}
    # dic2 = {'name':'老男孩','age':56}
    # func(*[1,2,3,4],*'asdfsad',**dic1,**dic2)
    
    # def func(*args,**kwargs):
        #args = (1,2,3,4)
        #kwargs = {'age': 56, 'name': '老男孩'}
        # print(*args)
        # print(**kwargs) #(age = 56 ,name = 老男孩)
    # dic1 = {'name1':'alex','age1':46}
    # dic2 = {'name':'老男孩','age':56}
    # # func(*[1,2,3,4],*'asdfsad',**dic1,**dic2)
    # func(**dic2)

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

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

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

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

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

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

      加载顺序:

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

      取值顺序:

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

    # a = 4
    # b = 3
    # c = [1,2,3,4]
    # c1 = {'name':'alex'}
    #
    # def func1():
    #     name = '老男孩'
    #     print(name)
    # func1()
    #当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系,
    # 随着函数的执行完毕,临时空间自动关闭。
    #input(),print(),len 内置函数
    
    # name = '老男孩'
    # def func1():
    #     name = 'taibai'
    #     print(name)
    # func1()
    # def my_len(argv):
    #     return 666
    # print(len([12,3,]))
    a = 2
    print(a)
    def func1():
        age = 11
        print(age)
    func1()

    三、全局作用域,局部作用域。

      全局作用域:全局名称空间,内置名称空间。

      局部作用域:局部名称空间

    四、加载顺序与取值顺序,函数的嵌套

    # 函数什么时候执行? 函数调用的时候执行。
    # 代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。
    # print(111)
    # def func1():
    #     print(333)
    #
    # def func2():
    #     print(444)
    #
    # def func3():
    #     print(555)
    #     func2()
    #
    # func1()
    # print(222)
    # 111 333 222
    
    # print(111)
    # def func1():
    #     print(333)
    #     func2()
    #     print(666)
    #
    # def func2():
    #     print(444)
    #
    # def func3():
    #     print(555)
    #
    # func1()
    # print(222)
    # 111 333 444 666 222
    
    
    # print(111)
    # 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
    
    # a = 2
    # b = 3
    # def func1():
    #     c = 5
    #     d = 6
    #     print(globals())  # 全局变量放在一个字典中
    #     return locals()  # {'c': 5, 'd': 6}
    # print(func1())
    
    # print(globals())  # 全局名称空间:所有变量
    # print(locals())  # 局部名称空间:所有变量

    五、locals(),golbals(),nolocal,golbal

    #global
    # 1,在局部空间内,声明一个全局变量
    # def func1():
    #     global name
    #     name = '老男孩'
    #     print(name)
    # func1()
    # print(name)
    # 2,在局部空间内改变一个全局变量
    # a = 4
    # def func1():
    #     global a
    #     a = 5
    #     # print(name)
    # func1()
    # print(a)
    
    #nonlocal
    # 1,不能修改全局变量。
    
    # a = 4
    # def func1():
    #     nonlocal a
    #     a = 5
    #     # print(name)
    # func1()
    # print(a)
    #在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
    # 并且引用的哪层,从那层及以下此变量全部发生改变。
    # a = 4
    # def func1():
    #     b = 6
    #     def func2():
    #         b = 666
    #         print(b) #666
    #     func2()
    #     print(b) # 6
    #
    # func1()
    
    # b = 4
    # def func1():
    #     global b
    #     b = 6
    #     def func2():
    #         nonlocal b
    #         b = 666
    #         print(b) #
    #     func2()
    #     print(b) #
    # print(b)
    # func1()

    六、练习题

    # 2、写函数,接收n个数字,求这些参数数字的和。(动态传参)
    '''
    def func(*args):
        sum = 0
        for i in args:
            sum += i
        return sum
    print(func(2,2,3))
    '''
    # 3、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
    # a=10
    # b=20
    # def test5(a,b):
    #         print(a,b)
    # c = test5(b,a)
    # print(c)
    '''
    a = 20
    b = 10
    c = None
    '''
    # 4、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
        # a=10
        # b=20
        # def test5(a,b):
        #     a=3
        #     b=5
        #     print(a,b)
        # c = test5(b,a)
        # print(c)
    '''
    a = 3
    b = 5
    c = None
    '''
    
    # 1,有函数定义如下:
    # def calc(a,b,c,d=1,e=2):
    #     return (a+b)*(c-d)+e
    # 请分别写出下列标号代码的输出结果,如果出错请写出Error。
    # print(calc(1,2,3,4,5))
    # print(calc(1,2))
    # print(calc(e=4,c=5,a=2,b=3))
    # print(calc(1,2,3))
    # print(calc(1,2,3,e=4))
    # print(calc(1,2,3,d=5,4))
    '''
    2   Error   24
    8   10  Error
    '''
    # 2,下面代码打印的结果分别是_________,________,________.
    def extendList(val,list=[]):
        print(val)
        list.append(val)
        return list
    list1 = extendList(10)
    list2 = extendList(123,[])
    list3 = extendList('a')
    
    print('list1=%s'%list1)
    print('list2=%s'%list2)
    print('list3=%s'%list3)
    '''
    [10,'a']
    [123]
    [10,'a']
    '''
  • 相关阅读:
    如何实现基于消息安全验证机制下的username身份验证过程
    Stooge 排序
    严版数据结构题集2.13 & 2.14
    Gnome排序
    严版数据结构题集2.11
    梳排序
    鸡尾酒排序
    C语言如何产生随机数
    Bogo排序
    快排序
  • 原文地址:https://www.cnblogs.com/qiujie/p/8672014.html
Copyright © 2020-2023  润新知