zoukankan      html  css  js  c++  java
  • day 0314函数的进阶

    1.空间:内置空间,全局空间,局部空间。

    内置空间:空间存放python解释器,为我们提供了方便的名字:input,print,str,list,tuple

    三个空间的加载顺序:

    内置空间》》全局空间》》局部空间

    三个空间的取值顺序:

    局部调用:局部空间》》全局空间》》内置空间

    全局调用:全局空间》》内置空间

    作用域:

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

    局部作用域:局部空间内有效。

    2.函数参数--动态参数

    2.1动态接收位置参数:

    参数位置用*表示接受任意参数

    *表示一种聚合。

    def fun(*args):                            
         print('张学友的歌曲:',args)                       #收到的结果是一个元祖。( ,) 
    fun('李兰香','饿狼传说','心如刀割','我等到花儿也谢了')        
    结果;
    张学友的歌曲: ('李兰香', '饿狼传说', '心如刀割', '我等到花儿也谢了')
    

    2.1.1.注意:动态接收参数时--动态参数必须在位置参数的后面。

    def fun(*args,a,b):          #动态参数在位置参数前面,聚合后位置参数世界收不到数据 
        print(args,a,b)                                      
    fun(1,2,3,4,55) 
    
                                             
    TypeError: fun() missing 2 required keyword-only arguments: 'a' and 'b'
    

    正确的输入是  动态参数在位置参数的后面:

    def fun(a,b,*args):    #动态参数在位置参数后面。  
        print(args,a,b)                   
    fun(1,2,3,4,55)                       
    结果:
    (3, 4, 55) 1 2         #args以元组的形式输出,a=1,b=2
    

    2.1.2 带有默认值的参数的位置问题:

       默认值写在动态参数前面,默认值不生效

    # 默认值写在动态参数前面,结果不生效
    def fun(a,b,c='All falls down',*args):        
        print(a,b,c,args)                         
    fun(1,2,3,4,5,6,'ada lace')                   
                                                  
    结果:
    1 2 3 (4, 5, 6, 'ada lace')      #实际上默认值All falls down没有打印出来
    

      

       默认值写在动态参数后面,默认值生效

    # 默认值在位置参数后面,结果生效
    def fun(a,b,*args,c='All falls down'):  
        print(a,b,c,args)                   
    fun(1,2,3,4,5,6,'ada lace')             
    结果:
    1 2 All falls down (3, 4, 5, 6, 'ada lace')
    

      注意:形参的顺序:位置参数》》动态参数》》默认参数

         *args  **kwargs 程序员约定习惯

    3.动态接收关键字参数

    *无法接收关键字参数。

    #动态关键字接收参数最后会生成一个字典形式
    def fun(**kwargs):                  
        print(kwargs)                   
    fun(a=11,b=[1,True],c='ad',d={1,2})
    结果:
    {'a': 11, 'b': [1, True], 'c': 'ad', 'd': {1, 2}}
    

    顺序:位置参数》》*args(动态位置参数)》》默认值参数》》**kwargs

    def fun(*args,**kwargs):                                            
        print(args,kwargs)                                              
    fun(1,['ada lace',123],'lace',{"k1":1},a='TROUBLE',b=123,c=[11,22,3])
    结果:
    (1, ['ada lace', 123], 'lace', {'k1': 1}) {'a': 'TROUBLE', 'b': 123, 'c': [11, 22, 3]}
    

    例如:

    def fun(a,b,*args,c='JOKER',**kwargs):                                 
        print(args,kwargs)                                                 
    fun(1,2,['ada lace',123],'lace',{"k1":1},d='TROUBLE',e=123,f=[11,22,3])
    结果:
    (['ada lace', 123], 'lace', {'k1': 1}) {'d': 'TROUBLE', 'e': 123, 'f': [11, 22, 3]}
    

    4.函数的注释:

    函数注释用"""    """

    在外部查看函数的注释 函数名.    _doc_

    5.global,  nonlocal

    global 表示不再使用局部作用域的内容,而改用全局作用域

    global只限定于字符串和数字。

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

    a=100       
    def fun():  
        global a
        print(a)
    fun()       
    print(a)    
    

    可变的数据类型:

    li=[11,22,33]       
    def fun():          
        li.append('Tro')
        print(li)       
    fun()               
    结果:
    [11, 22, 33, 'Tro']
    

    nonlocal:

    1,不能修改全局变量。

    2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

    a=10               
    def fun():         
        a=20           
        def fun1():    
            nonlocal a 
            a=83       
            print(a)   
        fun1()         
        print(a)       
    fun()              
    结果:
    83
    83
    a=10            
    def fun():      
        a=20        
        def fun1(): 
                    
            a=83    
            print(a)
        fun1()      
        print(a)    
    fun()           
    结果:
    83
    20
    

      

  • 相关阅读:
    mysql 优化总结
    mac、linux 查看端口占用程序
    mysql 优化之查询缓存(mysql8已经废弃这个功能)
    laravel 中的 toSql 获取带参数的 sql 语句
    mysql 统计 group by 之后的 group 的个数
    shell 循环语句
    shell 中的流程控制关键字
    为什么要用babel-polyfill
    gulp --watch直接退出,并没有监听
    nodejs安装使用express
  • 原文地址:https://www.cnblogs.com/Zhao159461/p/10532955.html
Copyright © 2011-2022 走看看