• python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal


    一、函数形参的动态参数

    原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args   **kwargs

    # def sum1(*args): # 在函数定义时,在*位置参数,聚合。
    #  *args将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args

    1.1*args的聚合

    例如:利用函数写个计算器

    def sum1(*args):
        count = 0
        for i in args:
            count =count + i
        return count
    print(sum1(1,2,3))

    需要求和的数据不固定,可以使用*args来代替形参

    1.2*args的打散与聚合

    l1 = [1,2,3]
    l2 = [111,22,33,'alex']
    l3 = 'alex'
    def func(*args):
        print(args)      #(1, 2, 3, 111, 22, 33, 'alex', 'a', 'l', 'e', 'x')  元组
       print(*args)    # 1 2 3 111 22 33 alex a l e x  字符串

    func(*l1,*l2,*l3)

    可以将实参内的数据打散。

    2.**kwargs

    def trans_para(*args,**kwargs):
    print(args,type(args))
    print(kwargs,type(kwargs))
    trans_para("jinxin",12,[1,2,3,4],(1,4,7),{"a":"123","c":456},country="china",name='alex')
    结果为:

    ('jinxin', 12, [1, 2, 3, 4], (1, 4, 7), {'a': '123', 'c': 456}) <class 'tuple'>
    {'country': 'china', 'name': 'alex'} <class 'dict'>

    可以接受类似字典的键值对的数据

    3.形参的顺序 :   位置参数,*args,默认参数 ,**kwargs

    def func(a,b,*args,sex ='',**kwargs,):
        print(a,b)
        print(sex)
        print(args)
        print(kwargs)
    func(1,2,11,22,34,5,6,sex = 'nv',name = 'alex',age=1000)
    结果:

     1 2
     nv
    (11, 22, 34, 5, 6)
    {'name': 'alex', 'age': 1000}

    二、命名空间

    命名空间分为:1.全局命名空间

                             2.局部命名空间(临时命名空间)

                             3.内置命名空间

    全局命名空间:在函数以外的变量
    局部命名空间:在函数内的变量
    内置命名空间:内置的函数,python解释器的内置方法
    作用域:
    全局作用域 :全局名称空间 内置名称空间
    局部作用域:局部命名空间(临时)
    取值顺序:就近取值
    局部名称空间————》全局名称空间————————》内置名称空降 单向从小到大
    加载顺序:
           内置名称空降——————》全局名称空间————————————》局部名称空间

    三、global 与 nonlocal

    def func1():
        # count = 3
        count = count + 1  #local variable 'count' referenced before assignment
        print(count)
    func1()

    如果你在局部名称空间,对一个变量进行修改,那么解释器会认为你的这个变量在局部中已经定义

    但是对于上面的例题,局部中没有定义,也报错。

    global的作用

    1、在局部名称空降声明一个全局变量

    def fun1():
        global name
        name = 'alex'
    fun1()
    print(name)   

    2、在局部名称空间可以对全局变量进行修改

    count = 1
    def func1():
        global count
        count = count +1
        print(count)
    func1()
    print(count)

    3、nonlacal的作用

    子函数对父函数的变量(此变量不能是全局变量)进行修改,并且从那层及以下此变量全部发生改。

    def func1():
    count = 666
    def func2():
    nonlocal count # count为非全局变量
    count +=1
    print(count) # 667
    return count
    func2()
    print(count) # 667
    func1()
  • 相关阅读:
    sublime使用技巧
    周末时间学习Linux
    中小企业网络安全提升
    NoSQL是什么?
    IBM的淘汰之路
    Linux 中断处理浅析
    深入理解 C 语言的函数调用过程
    LAMP简易安装
    安装Fedora 24后必要的设置
    wget命令详解
  • 原文地址:https://www.cnblogs.com/youhongliang/p/9489520.html
Copyright © 2020-2023  润新知