zoukankan      html  css  js  c++  java
  • 《Python》 函数进阶和名称空间作用域

    函数进阶:

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

      *args是元祖形式,接收除去键值对以外的所有参数  # args可以换成任意变量名,约定俗成用args

      **kwargs接收的只是键值对的参数,并保存在字典中。  # kwargs可以换成任意变量名,约定俗成用kwargs

      *的魔性用法:

        l1 = [1,2,3]

        l2 = ['alex','taibai']

        def func1(*args):

          print(args)  # 结果:('1','2','3','alex','taibai')

        func1(*l1,*l2)

      在函数的定义时,*位置参数聚合,**关键字参数聚合。

      在函数的调用(执行)时,*位置参数打散(把列表打散成一个个元素),**关键字参数打散(把字典打散成一个个键值对)。

    二、名称空间和作用域

      1、名称空间分为三种:存放名字与值的关系的空间

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

        局部名称空间:在函数的运行中开辟的临时的空间

        内置名称空间:python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法

      2、三种命名空间的加载和取值顺序:

        加载顺序:内置命名空间(程序运行前加载)---->全局命名空间(程序运行中,从上到下加载)---->局部命名空间(程序运行中,调用时加载)

        取值顺序:    就近原则

          在局部调用:局部命名空间--->全局命名空间--->内置命名空间

          在全局调用:全局命名空间--->内置命名空间

      3、作用域:

        全局作用域:包含内置名称空间,全局名称空间,整个文件的任意位置都能被引用,全局有效

        局部作用域:局部名称空间,只能在局部范围内有效

      4、关键字  global和nonlocal

        global:

          1、声明一个全局变量

          2、在局部作用域想要对全局作用域的全局变量进行修改时,需要用到global(限于字符串,数字)

    def func():
        global a
        a = 3
    func()
    print(a)
    
    
    count = 1
    def search():
        global count
        count = 2
    search()
    print(count)
    
    global关键字举例

          ps:对可变数据类型(list,dict,set)可以直接引用不用通过global。

    li = [1,2,3]
    dic = {'a':'b'}
    
    def change():
        li.append('a')
        dic['q'] = 'g'
        print(dic)
        print(li)
    change()
    print(li)
    print(dic)
    
    对于可变数据类型的应用举例

        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()
    
    nonlocal关键字举例
    View Code
  • 相关阅读:
    a 超链接标签
    select(下拉标签和textarea(文本框)
    input标签
    input 标签
    div 标签
    body 标签
    STL__网上资料
    STL_iterator返回值
    STL_算法_中使用的函数对象
    STL_std::iterator
  • 原文地址:https://www.cnblogs.com/yzh2857/p/9493782.html
Copyright © 2011-2022 走看看