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
    

      

  • 相关阅读:
    Elasticsearch Query DSL 整理总结(三)—— Match Phrase Query 和 Match Phrase Prefix Query
    Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
    Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
    Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
    Elasticsearch date 类型详解
    python 历险记(五)— python 中的模块
    python 历险记(四)— python 中常用的 json 操作
    python 历险记(三)— python 的常用文件操作
    Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
    Elasticsearch Java Rest Client API 整理总结 (一)——Document API
  • 原文地址:https://www.cnblogs.com/Zhao159461/p/10532955.html
Copyright © 2011-2022 走看看