• 动态传参, 名称空间, 嵌套, gloabal, nonlocal


    一, 动态传参

     1. *args

    接收到的是元组

    先用位置参数进行传参, 剩下的位置参数用*args进行传参

    2. **kwargs

    接收到的是一个字典

    先用关键字参数进行传参, 剩下的参数用**kwargs进行传参

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

    形参的**kwargs后面再出现任何 位置参数 或 关键字参数 或 *args参数 都会报错, 显示语法错误

    形参的*args参数 后面如果加上 位置参数 会报错, 因为位置参数接不到传参, 显示位置参数没接到传参的错误

    实参的位置参数必须全部在关键字参数前

      

    def func(a, *args, b='abc, **kwargs):

        print(a, args, b, kwargs)

    形参*args, **kwargs聚合

    实参*lst, **dic打散

    实参的打散: func(*lst, **dic)

     

    def func(**kwargs):

        print(kwargs)

    func(qwe='123', asd='456')

     

    def func(**kwargs):

        print(kwargs)

    func('qwe'='123', 'asd'='456')                      # 字符串可以作为字典的键, 但是这里会报错, 因为如果字符串要传到函数中去, 需要键是一个变量

    函数注释: 

    def func(a, b):
        '''
        计算两数之和
        :param a: 第一个数
        :param b: 第二个数
        :return: 两个数的和
        '''
        return a+b
    print(func.__doc__)

    二. 命名空间

    1. 内置命名空间

    2. 全局命名空间

    3. 局部命名空间

    函数调用, 局部命名空间包括嵌套的函数

    作用域:

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

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

    print(globals())  查看全局命名空间中的内容

    print(locals())    查看当前作用域中的内容

    三. 函数嵌套

    def a():

        print('1')

        def b():

            print('2')

            def c():

                print('3')

            c()

        b()

    a()

    输出:1      2      3

    global: 访问全局命名空间的变量, 并可以改变全局命名空间的变量

    global a

    nonlocal: 访问外层函数中最近一层的那个变量, 并可以改变那个变量

    nonlocal b

    不使用global或者nonlocal只能读取上一层或全局命名空间的变量, 是不会改变上一层函数或全局命名空间的变量的

  • 相关阅读:
    Windows Python+Eclipse环境配置
    infobright系列二:数据迁移
    infobright系列一:源码安装infobright
    autotools归纳
    Atlas系列一:Atlas功能特点FAQ
    C#反射技术概念作用和要点
    .net获取本机公网IP代码
    Java泛型-类型擦除
    现在就使用HTML5的十大原因
    让网页图片变灰色的三种方法
  • 原文地址:https://www.cnblogs.com/NachoLau/p/9449393.html
Copyright © 2020-2023  润新知