Python基礎(chǔ)016--函數(shù)的操作衡楞、全局變量和局部變量的聲明和作用域、可變參數(shù)的使用

函數(shù)的定義敦姻、創(chuàng)建以及參數(shù)的定義,全局變量和局部變量的聲明和作用域, *args, **kwargs的使用

  • 函數(shù)的定義瘾境、 創(chuàng)建以及參數(shù)的定義

    • 函數(shù)的定義:函數(shù)是組織好的,可重復(fù)使用的,實(shí)現(xiàn)單一的,或者相關(guān)聯(lián)功能的代碼塊
    • 函數(shù)的創(chuàng)建
      • 用戶自定義的函數(shù)是用def語(yǔ)句來(lái)創(chuàng)建的
      • 標(biāo)題行由def關(guān)鍵字歧杏、函數(shù)的名字(大駝峰、小駝峰等)寄雀、以及參數(shù)的集合(如果有的話)三部分組成
      • 剩余部分包括一個(gè)可選的字符串和一個(gè)必須的函數(shù)體
    • 參數(shù)的定義:從調(diào)用的角度分為形式參數(shù)和實(shí)際參數(shù)
      • 形式參數(shù)是函數(shù)創(chuàng)建和定義的過(guò)程中小括號(hào)里面的參數(shù)
      • 實(shí)際參數(shù)是函數(shù)在被調(diào)用過(guò)程中傳進(jìn)來(lái)的參數(shù)
  • 函數(shù)中參數(shù)的定義

    # 函數(shù)中參數(shù)定義的四種方式
    
    # 常見(jiàn)的參數(shù)定義方式,可以定義多個(gè)參數(shù);參數(shù)之間用逗號(hào)隔開(kāi);
    def func(arg1,agr2):
        pass
        
    # 傳入的參數(shù),給參數(shù)一個(gè)默認(rèn)值
    def func(arg1,arg2=value2):
        pass
        
    # 在不知道用多少參數(shù)的情況下傳入多個(gè)參數(shù)
    def func(*args):         # *arg表示傳入的參數(shù)可以為0或者n個(gè),都存在以形參名為標(biāo)識(shí)符的元組中
        pass
        
    # 參數(shù)在函數(shù)內(nèi)部被存放在以形參名為標(biāo)識(shí)符的字典中,調(diào)用函數(shù)采用arg1=value1,arg2=value2的形式即可
    def func(**kwargs):
        pass
        
    In [42]: def func(*arg):
    ...:     print arg
    ...:     
    In [43]: func(1,2,3)
    (1, 2, 3)
    In [44]: def func(**kwargs):
        ...:     print kwargs
        ...:     
    In [45]: func(x=1,y=2,z=3)
    {'y': 2, 'x': 1, 'z': 3}
    
    
  • 全局變量和局部變量的聲明和作用域

    • 全局變量是在整個(gè)py文件中聲明,全局范圍內(nèi)都可以訪問(wèn)得滤;
    • 局部變量是在某個(gè)函數(shù)中聲明的,只能在該函數(shù)中調(diào)用它;
    • 變量的作用域由代碼賦值的位置決定
    • 變量可以在三個(gè)不同地方,對(duì)應(yīng)三種不同作用域
      • 一個(gè)變量在函數(shù)內(nèi)部賦值,它的作用域被定義在函數(shù)之內(nèi)
      • 當(dāng)變量是在一個(gè)嵌套的函數(shù)中賦值時(shí),對(duì)于這個(gè)嵌套的函數(shù)來(lái)說(shuō),這個(gè)變量是非本地的
      • 變量在函數(shù)外賦值,它的作用域就是當(dāng)前整個(gè)文件的全局變量
    • global語(yǔ)句的作用是重定義全局變量的值或者把局部變量的值聲明為全局變量被其他函數(shù)調(diào)用
    In [46]: total = 0                              total = 1       
    In [47]: def sum(arg1,arg2):                    def func():
        ...:     total = arg1+arg2                      global total    #  重定義全局變量
        ...:     print "局部變量:", total              total = 2   
        ...:     return total                       func()
        ...:                                        print total         # 此時(shí)total的結(jié)果為2
    In [48]: sum(1,2)                                   
    局部變量: 3
    Out[48]: 3
    
    In [49]: print "函數(shù)的全局變量:", total
    函數(shù)的全局變量: 0
    
    
  • *args盒犹、**kwargs的使用

    • 當(dāng)函數(shù)中參數(shù)的變量是可變參數(shù)時(shí),使用*args和*kwargs,其中*args對(duì)應(yīng)的可變參數(shù)不含key,而*kwargs對(duì)應(yīng)的可變參數(shù)含有key
    # *args的用法
    In [57]: def fun(*args):
    ...:     for item in args:
    ...:         print item
    ...:         
    
    In [58]: fun(1,'aa',2)
    1
    aa
    2
    
    # **kwargs的用法
    In [61]: def func(**kwargs):
        ...:     for item in kwargs:
        ...:         print '%s:%s' %(item, kwargs[item])
        ...:         
    In [62]: func(a=1,b=2,c=3)
    a:1
    c:3
    b:2
    
    
  • 可變長(zhǎng)參數(shù)的用法

    • args表示這個(gè)參數(shù)是一個(gè)元組參數(shù)懂更,默認(rèn)值為();*kwargs表示這個(gè)參數(shù)是字典參數(shù),默認(rèn)值為[];
    • 可以把args急膀、*kwargs看成是兩個(gè)默認(rèn)參數(shù)沮协;多余的非關(guān)鍵字參數(shù),函數(shù)調(diào)用時(shí)被放在元組參數(shù)args中卓嫂;多余的關(guān)鍵字參數(shù)慷暂,函數(shù)調(diào)用時(shí)被放在字典參數(shù)kwargs中;
In [107]: def foo(arg1,arg2='OK',*tupleArg,**dictArg):
     ...:     print 'arg1=',arg1
     ...:     print 'arg2=',arg2
     ...:     for i,element in enumerate(tupleArg):
     ...:         print 'tupleArg %d-->%s' %(i,str(element))
     ...:     for key in dictArg:
     ...:         print 'dictArg %s-->%s' %(key, dictArg[key])
     ...:         
In [109]: myList=['my1','my2']
In [110]: myDict={'name':'Tom','age':22}
In [111]: foo('formal_args',arg2='argSecond',a=1)
arg1= formal_args
arg2= argSecond
dictArg a-->1
In [113]: foo(123,myList,myDict)
arg1= 123
arg2= ['my1', 'my2']
tupleArg 0-->{'age': 22, 'name': 'Tom'}
In [114]: foo(123,rt=123,*myList,**myDict)
arg1= 123
arg2= my1
tupleArg 0-->my2
dictArg rt-->123
dictArg age-->22
dictArg name-->Tom

  • 總結(jié)1:上述代碼In113中可以看出
    • 元組對(duì)象前面如果不帶"*"晨雳、字典對(duì)象如果前面不帶"**",則作為普通的對(duì)象傳遞參數(shù)
    • 多余的 普通參數(shù)行瑞,在foo(123,myList,myDict)中,123賦給參數(shù)arg1,myList賦給參數(shù)arg2,多余的參數(shù)myDict默認(rèn)為元組賦給myList
  • 總結(jié)2:上述代碼In114中可以看出
    • 參數(shù)中如果使用"*"元組參數(shù)或者"**"字典參數(shù)餐禁,這兩種參數(shù)應(yīng)該放在參數(shù)列表的最后血久;并且"*"元組參數(shù)位于"**"字典參數(shù)之前
    • 關(guān)鍵字參數(shù)rt=123,因?yàn)楹瘮?shù)foo(arg1,arg2="OK",*tupleArg,**dictArg)中沒(méi)有rt參數(shù),所以最后也歸到字典參數(shù)中
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帮非,一起剝皮案震驚了整個(gè)濱河市氧吐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌末盔,老刑警劉巖筑舅,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異陨舱,居然都是意外死亡翠拣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門隅忿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)心剥,“玉大人,你說(shuō)我怎么就攤上這事背桐。” “怎么了蝉揍?”我有些...
    開(kāi)封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵链峭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我又沾,道長(zhǎng)弊仪,這世上最難降的妖魔是什么熙卡? 我笑而不...
    開(kāi)封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮励饵,結(jié)果婚禮上驳癌,老公的妹妹穿的比我還像新娘。我一直安慰自己役听,他們只是感情好颓鲜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著典予,像睡著了一般甜滨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘤袖,一...
    開(kāi)封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天衣摩,我揣著相機(jī)與錄音,去河邊找鬼捂敌。 笑死艾扮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的占婉。 我是一名探鬼主播泡嘴,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼锐涯!你這毒婦竟也來(lái)了磕诊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纹腌,失蹤者是張志新(化名)和其女友劉穎霎终,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體升薯,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栗涂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年票罐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碗脊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出术荤,到底是詐尸還是另有隱情萝玷,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布蹦浦,位于F島的核電站扭吁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侥袜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一蝌诡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枫吧,春花似錦浦旱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至尼酿,卻和暖如春爷狈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裳擎。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工涎永, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹿响。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓羡微,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親惶我。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妈倔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容