zoukankan      html  css  js  c++  java
  • 2018.8.9 python中的动态传参与命名空间

    主要内容:

            1、函数参数 ----动态传参

             2、名称空间与作用域

             3、函数的嵌套

             4、global,nonlocal关键字

    一、函数参数 ------动态传参

             形参的第三种:动态传参

             动态传参分为两种:

             1、动态接受位置参数,在参数位置编写*表示接受任意内容,多个参数传递进去,接收到的是列表。

              动态传参的时候要注意,动态参数必须在位置参数的后面。

             这个程序运行会报错,因为前面传递进去的所有位置参数都被*food接收了,a和b永远接收不到参数。

            关于默认值参数:

          我们发现,默认值参数写在动态参数前面,默认值参数只有一种可能生效。

          这个时候我们发现所有的默认值都生效了,如果不给出关键字传参,那么默认值是永远生效的。

          2、动态接收关键字参数

          在python中使用**来接受动态关键字参数。

    这时候接收的是一个字典。

     最终顺序:

                位置参数 > *args  > 默认值参数  >**kwargs

                这四种参数可以任意的进行使用

      动态参数的另一种传参方式:

         在实参位置上给一个序列,列表,可迭代对象前面加个*表示把这个序列打散。如果是字典也可以打散,不过需要两个*。

         函数的注释:

    def func(a,b):
        '''
        这个函数是用来计算a和b的和
        :param a: 第一个数据
        :param b: 第二个数据
        :return: 返回的是两个数的和
        '''
        return a + b
    print(func(5,6))
    print(func.__doc__)  #document文档

    二、命名空间与作用域

         我们给存放名字和值得关系的空间起一个名字:命名空间。我们的变量在存储的时候就是存储在这片空间中的。

         命名空间分类:

             1、全局命名空间------>函数外声明的变量

             2、局部命名空间------->函数中声明的变量

             3、内置命名空间-------->python解释器为我们提供的名字,list,tuple,str,int

        作用域:

              1、全局作用域:全局命名空间+内置命名空间

              2、局部作用域:局部命名空间

        我们可以通过globals()函数查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量和函数信息。

    三、函数的嵌套

    a = 1
    def fun_1():
        a = 2
        def fun_2():
            nonlocal a
            a = 3
            def fun_3():
                a = 4
                print(a)
            print(a)
            fun_3()
            print(a)
        print(a)
        fun_2()
        print(a)
    print(a)
    fun_1()
    print(a)
    
    结果  1  2   3   4    3   3    1

    四、关键字global和nonlocal

    global a    1、可以把全局中的内容引入到函数内部 

                     2、在全局创建一个a变量

    nonlocal     表示在局部作用域中,寻找外层函数中离他最近的那个变量

  • 相关阅读:
    Java二叉树非递归实现
    iOS程序生命周期 AppDelegate
    pch 文件
    获取app崩溃信息的途径 iOS
    iOS Storyboard适配问题
    时间戳
    lable 以及cell的高度自适应
    时间戳 获得当前时间 -iOS
    GCD 多线程 ---的记录 iOS
    OC 常用方法记录
  • 原文地址:https://www.cnblogs.com/fengchong/p/9451656.html
Copyright © 2011-2022 走看看