zoukankan      html  css  js  c++  java
  • 【0809 | Day 12】可变长参数/函数的对象/函数的嵌套/名称空间与作用域

    可变长参数

    一、形参

    位置形参

    默认形参

    二、实参

    位置实参

    关键字实参

    三、可变长参数之*

    def func(name,pwd,*args):
        print('name:',name,'pwd:',pwd)
        print(args)
        return 1
    ​
    res = func('nick',12345,18,180,18000)
    print(res)
    ​
    #name: nick pwd: 12345
    #(18, 180, 18000)
    #1

    四、可变长参数之**

    def func(name,pwd,**kwargs):
        print('name:',name,'pwd:',pwd)
        print(kwargs)
        return 1
    ​
    res = func('nick',12345,age = 18,height = 180,wage = 18000)
    print(res)
    ​
    name: nick pwd: 12345
    {'age': 18, 'height': 180, 'wage': 18000}
    1

    五、*tuple的应用

    def func(name,pwd,x,y,z):
        print('name:',name,'pwd:',pwd)
        print(x,y,z)
        return 1
    ​
    tuple = (1,2,3)
    res = func('nick',12345,*tuple)  #将tuple打散成位置实参传给位置形参
    print(res)
    ​
    name: nick pwd: 12345
    1 2 3
    1

    六、**dict的应用

    def func(name,pwd,x,y,z):
        print('name:',name,'pwd:',pwd)
        print(x,y,z)  #x, y, z必须和字典的key一一对应,若dict = {'a': 4,'b': 5,'c': 6},则print(a,b,c)
        return 1
    ​
    dict = {'x':4,'y':5,'z':6}
    res = func('nick',12345,**dict)  #将dict打散成关键字实参传给位置形参
    print(res)
    ​
    name: nick pwd: 12345
    4 5 6
    1

    七、关于参数的应用

    #例一
    def func(x, y, f = 0, *args, **kwargs):
        print(f'f=',f)
        print(args)
        print(kwargs)
        return x + y
    res = func(1, 2, 3, a = 4, b = 5, c=6)  #一一对应,此时默认形参f = 0接受位置实参3,args可以不接收值
    print(res)
    ​
    f= 3
    ()
    {'a': 4, 'b': 5, 'c': 6}
    3#例二
    def func(x, y, f = 0, *args, **kwargs):
        print(f'f=',f)
        print(args)
        print(kwargs)
        return x + y
    res = func(1, 2, a = 4, b = 5, c=6)   #一一对应,此时默认形参f = 0没有对应接收值,默认为0,args可以不接收值
    print(res)
    ​
    f= 0
    ()
    {'a': 4, 'b': 5, 'c': 6}
    3#例三
    def func(x, y, f = 0, *args, **kwargs):
        print(f'f=',f)
        print(args)
        print(kwargs)
        return x + y
    res = func(1, y = 2, a = 4, b = 5, c=6)    #关键字实参y = 2会自己找关键字y,1是位置实参一一对应
    # res = func(y = 2, 1, a = 4, b = 5, c=6)  #一一对应,关键字实参一定要放在位置实参的后面,否则y=2赋给y,1对应的也是y,则会报错
    print(res)
    ​
    f= 0
    ()
    {'a': 4, 'b': 5, 'c': 6}
    3

     

    函数的对象

    1. 引用

    2. 作为函数的参数

    3. 作为函数的返回值

    4. 作为容器元素

    函数的嵌套

    def f1():
        def f2():
            pass
    f1()

     

    名称空间与作用域

    名称空间

    内置名称空间

    Python解释器启动的时候生成,如len/int/dict

    全局名称空间

    文件执行的时候生成

    局部名称空间

    函数调用的时候生成

    执行顺序

    内置 ---> 全局 --->局部

    查找顺序

    当前位置 --->局部 --->全局 --->内置

    # 查找顺序:当前位置-->局部-->全局-->内置
    x = 1
    def f1():
        x = 2
        print(x)  #当前位置 结果: 2
    f1()
    ​
    x = 1
    print(x)  #全局 结果: 1
    def f1():
        x = 2
    f1()
    ​
    x = 1
    def f1():
        x = 2
    f1()
    print(x) #全局 结果:1
    ​
    x = 1
    def f1():
        print(x) #局部没有x的值,去全局查找 结果:1
    f1()

    作用域

    产生作用的范围

    全局作用域

    全局+内置名称空间中的变量

    x = 1
    def f1():
        x = 3
    f1()
    print(x)  
    ​
    # 1    
    x = 1 和 x = 3 两个x之间毫无关系   
     

    局部作用域

    局部名称空间的变量,不同的函数具有不同的作用域

    def f1():
        x = 1
        def f2():
            x = 3
        print(x)
    f1()
    ​
    # 1
    x = 1 和 x = 3的两个x毫无关系

    注意:全局作用域和局部作用域互不干涉。

    global

    x = 1
    def f1():
        global x  #声明x为全局x
        x = 3
    f1()   
    print(x)

    nonlocal

    针对嵌套局部函数

    def f1():
        x = 1
        def f2():
            nonlocal x  #取代x = 1 
            x = 3
        print()
    f1()
    ​
    #3

    可变类型

    lt = [1,2,3]
    ​
    def f1():
        lt.append(4)
        
    f1()
    print(lt)
    ​
    #[1,2,3,4]

    作用域关系:对于可变类型不适用,仅适用不可变类型。

  • 相关阅读:
    js showModalDialog参数传递
    1:N 关系
    1:N 关系 视图查找
    设置IE主页和添加收藏夹的功能
    GridView和DataFormatString网站技术
    JS 的table属性操作,
    GridView帮定数据显示数据的技巧
    后台取相同name值的问题
    赶集网CEO杨浩涌:倒闭没那么容易
    用户数据泄露案告破:嫌疑人已抓 CSDN受到警告
  • 原文地址:https://www.cnblogs.com/fxyadela/p/11329113.html
Copyright © 2011-2022 走看看