zoukankan      html  css  js  c++  java
  • 函数的动态参数 函数的注释 名称空间 函数的嵌套

    1.函数的动态参数

    动态参数

    *args,**kwargs (能够接受动态的位置参数和动态的关键字参数)

    定义阶段(*args,**kwargs) 聚合

    *args - tuple

    **kwargs -- dict

    使用阶段*args,*kwargs 打散

    *args - 源数据类型

    *kwargs - 打散是字典的键

    *args

    def func(a,b,*args):           
    print(a,b,args)                
    func(1,2,3,4,5,6,7,8,9)        # 1 2 (3, 4, 5, 6, 7, 8, 9)
    
    def func(a,b,*args):  # *args 是万能(接受任意多个)的位置参数 
                          # *在函数定义的时候叫做聚合
        print(a,b,*args)  # * 打散     1 2 3 4 5 6 7 8 9
    

    **kwargs

    def func(a,b,**kwargs):
        print(a,b,kwargs)  # 字典(接受的关键字的参数)
    func(1,2,c=1,d=2)      # 1 2 {'c': 1, 'd': 2}
    
    def func(a,b,*args,c=1,d=2,**kwargs):
        print(a,b,*args,c,d,kwargs)
    func(1,2,3,4,c=8,d=10,e="alex",f="wusir") 
     #1 2 3 4 8 10 {'e': 'alex', 'f': 'wusir'}
    

    万能传参

    def func(*agrs,**kwargs):
        print(agrs,kwargs)
    func(1,2,3,4,5,6,7,8,a=1,b=2,c=3)
    # (1, 2, 3, 4, 5, 6, 7, 8) {'a': 1, 'b': 2, 'c': 3}
    

    重点总结:

    1.参数的优先级:位置参数 > 动态位置参数 > 默认参数(关键字参数) > 动态关键字参数
    2.万能传参:动态位置参数,动态关键字参数(常用)
    3.动态位置参数,关键字参数,动态关键字参数
    

    2.函数的注释

    def func(a,b):
        """
        注释:敲六个' " ',回车
        :param a: 
        :param b: 
        :return: 
        """
        print(a,b)
        
    def func1(user,password):
        """
        密码加密
        :param user: 用户名 str
        :param password: 密码 str
        :return: 加密的密码 MD5
        """
        print(user,password)
        
    print(func.__doc__)         # 查看函数注释
    print(func.__name__)        # 查看函数命名
    

    3.名称空间

    def fun():   
        a = 10   
        print(a)
    fun()
    print(a)    # a不存在了已经..
    

    命名空间分类:

    内置空间 : print input len
    全局空间 : 当前py文件需要开辟的空间存放在全局空间
    局部空间 : 函数中开辟的空间就是局部空间

    加载顺序:

    内置空间 > 全局空间 > 局部空间

    取值顺序:

    局部空间 > 全局空间 > 内置空间(找不到就报错了!)

    作用域:

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

    局部作用域: 局部空间

    4.函数的嵌套

    def func():    
        print(1)    
        def f1():        
            print(2)    
        return f1()
    func()                        # 1 2
    
    不管在什么位置,只要是函数名+() 就是在调用此函数
    函数调用执行后,函数体中开辟的空间就自动销毁了
    

    示例

    def func():
        a = 1
        def foo():
            b = 2
            print(b)  
            print(a)
            def f1():
                print(b)
            return f1()
        return foo()
    print(func())                  # 2 1 2 None
    

    函数互相引用

    1.
    def func():
        a = 1
        foo()
        print(a)
    
    def foo():
        b = 2
        print(b)
    func()                      # 2 1
    2.
    def a():
        a = 1
        c()
        print(c)
    def b():
        b1 = 2
        print(b1)
    def c():
        c = 3
        print(a)
    def run():
        a()
    run()                      #<function a at 0x000001DCFC439B70>
                               #<function c at 0x000001DCFC439C80>
    
        
    def func():
        a = 1
        def b():
            print(a)
    def foo():
        b = 1
        def z():
            print(func)     #内存地址
            print(b)        # 1
        ret = z()
        func()
        return ret
    def run():
        foo()
    print(run())
    # 内存地址 1 None
    
    函数中套函数
    函数嵌套调用
    函数嵌套参数的传递
    函数嵌套返回值的传递
    

    5.globle 与 nonlocal

    a = 10
    def func():
        global a       # 声明修改全局变量的值
        a += 1
        print(a)
    func()
    print(a)         # 11 11
    
    
    a = 10
    def f1():
        a = 10
        def f2():
            a = 15
            def f3():
                global a
                a += 1
                print(a)
            print(a)
            f3()
        print(a)
        f2()
    f1()                      # 10 15 11
    
    a = 10
    def func():
        def f1():
            global a
            a += 1
            def foo():
                nonlocal a       
                a += 1
                print(a)   
            foo()
            print(a) 
        f1()
    func()
    print(a)   
    # 报错
    局部空间内没有a的值
    
    global : 修改全局空间的变量对应的值
    nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,
    只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数
    
  • 相关阅读:
    YARN架构设计详解
    HDFS文件上传
    HDFS Namenode启动过程
    (转)计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理
    (转)python之from_bytes、to_bytes
    (转)Python3入门之线程threading常用方法
    (转)Python3.5 queue模块详解
    (转) argparse — 解析命令参数和选项
    (转)Python3之pickle模块
    (转)linux用户态和内核态理解
  • 原文地址:https://www.cnblogs.com/beichen123/p/11234356.html
Copyright © 2011-2022 走看看