Python入門 --函數(shù)

0.方法是綁定在對象的赃蛛,而函數(shù)則不是恃锉。

1.什么是函數(shù)?

在程序設(shè)計中焊虏,常常將一些常用的功能模塊編寫成函數(shù)淡喜。函數(shù)是帶有入口和出口的代碼片段,用于完成特定的功能诵闭。所謂的入口,就是函數(shù)所帶的各個參數(shù)澎嚣;所謂出口疏尿,就是函數(shù)的返回值。我們可以把函數(shù)比作一個帶入口和出口的盒子易桃,對于盒子的使用者褥琐,我們不關(guān)系盒子內(nèi)部是如何實現(xiàn)的,我們只關(guān)心這個盒子能做什么晤郑。

  • 函數(shù)代碼塊以def關(guān)鍵字開頭敌呈,后接函數(shù)名和圓括號()
  • 圓括號之間用于定義參數(shù)贸宏;函數(shù)調(diào)用時候也需要將傳入?yún)?shù)放置在圓括號中
  • 函數(shù)的第一行語句可以選擇性的使用文檔字符串(""")用于存放函數(shù)說明
  • 函數(shù)內(nèi)容以(:)起始,并且注意縮進(jìn)磕洪。
  • return [表達(dá)式]結(jié)束函數(shù)吭练,選擇性地返回一個值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回None
  • 函數(shù)的返回值可以是多個析显,中間用逗號隔開鲫咽,但是其實實質(zhì)是返回了一個tuple

注意:
在 python 中,類型屬于對象谷异,變量是沒有類型的:
a = 100
a = "string"

  1. python函數(shù)的參數(shù)傳遞:

可更改對象與不可更改對象
在 python 中分尸,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象歹嘹。

  • 不可變類型:變量賦值a=5后再賦值a=10箩绍,這里實際是新生辰改了一個int值對象10,再讓a指向它,而5被丟棄尺上,不是改變了a的值伶选,而是新生成了一個a。
  • 可變類型:變量賦值 la = [1, 2, 3, 4]后再賦值 la[2] = 5尖昏,則是將list la 的第三個元素值更改仰税,本身la沒有動。只是內(nèi)部的一部分值被修改了抽诉。

python函數(shù)的參數(shù)傳遞:

  • 不可變類型:類似c++的值傳遞陨簇,如:整數(shù),字符串迹淌,元組河绽。如:fun(a),傳遞的只是a的值唉窃,沒有影響a對象本身耙饰。比如在fun(a)內(nèi)部修改a的值,知識修改另外一個復(fù)制的對象纹份,不會影響到a本身苟跪。
  • 可變類型:類似于c++,的引用傳遞蔓涧,如:列表件已,字典。如:func(la)元暴,則是將la真正的傳過去篷扩,修改后fun外部的la也會受影響。

python中一切都是對象茉盏,嚴(yán)格意義我們不能說值傳遞韓式引用傳遞鉴未,我們應(yīng)該說傳不可變對象和傳可變對象枢冤。

傳遞不可變對象 eg:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
def ChangeInt( a ):
    a = 10

b = 2
ChangeInt(b)
print b # 結(jié)果是 2

傳遞可變對象 eg:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可寫函數(shù)說明
def changeme( mylist ):
   "修改傳入的列表"
   mylist.append([1,2,3,4]);
   print "函數(shù)內(nèi)取值: ", mylist
   return
 
# 調(diào)用changeme函數(shù)
mylist = [10,20,30];
changeme( mylist );
print "函數(shù)外取值: ", mylist

函數(shù)參數(shù):

1)必備參數(shù)

#可寫函數(shù)說明
def printme( str ):
   "打印任何傳入的字符串"
   print str;
   return;
 
#調(diào)用printme函數(shù)
printme();  # 會報錯,沒有傳遞參數(shù)

2)關(guān)鍵字參數(shù):

鍵字參數(shù)和函數(shù)調(diào)用關(guān)系緊密铜秆,函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值淹真。
使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時參數(shù)的順序與聲明時不一致,因為 Python 解釋器能夠用參數(shù)名匹配參數(shù)值羽峰。

#可寫函數(shù)說明
def printme( str ):
   "打印任何傳入的字符串"
   print str;
   return;
 
#調(diào)用printme函數(shù)
printme( str = "My string");

3)缺省參數(shù)

#可寫函數(shù)說明
def printinfo( name, age = 35 ):
   "打印任何傳入的字符串"
   print "Name: ", name;
   print "Age ", age;
   return;
 
#調(diào)用printinfo函數(shù)
printinfo( name="miki" );  # 不會報錯

4)不定長參數(shù)

def functionname([formal_args,] *var_args_tuple ):
   "函數(shù)_文檔字符串"
   function_suite
   return [expression]

eg:

# 可寫函數(shù)說明
def printinfo( arg1, *vartuple ):
   "打印任何傳入的參數(shù)"
   print "輸出: "
   print arg1
   for var in vartuple:
      print var
   return;
 
# 調(diào)用printinfo 函數(shù)
printinfo( 10 );
printinfo( 70, 60, 50 );

===

輸出:
10
輸出:
70
60
50

5)匿名函數(shù)

python使用lambda來創(chuàng)建匿名函數(shù)趟咆。

語法:

lambda [arg1 [,arg2,.....argn]]:expression
# 可寫函數(shù)說明
sum = lambda arg1, arg2: arg1 + arg2;
 
# 調(diào)用sum函數(shù)
print "相加后的值為 : ", sum( 10, 20 )
print "相加后的值為 : ", sum( 20, 20 )

eg:

sum = lambda a, b:a+b
print sum(10, 20)

return語句
return語句[表達(dá)式]退出函數(shù),選擇性地向調(diào)用方返回一個表達(dá)式梅屉。不帶參數(shù)值的return語句返回None.

形參和實參

def add_num(x, y):  # 這里的x, y是形參
    return x + y

add_num(2, 3)   # 這里的2,3是實參
  1. 變量作用域

一個程序的所有的變量并不是在哪個位置都可以訪問的值纱。訪問權(quán)限決定于這個變量是在哪兒賦值的。
變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱坯汤。兩種最基本的變量作用域如下:

定義在函數(shù)內(nèi)部的變量擁有一個局部作用域虐唠,定義在函數(shù)外的擁有全局作用域。
局部變量只能在其被聲明的函數(shù)內(nèi)部訪問惰聂,而全局變量可以在整個程序范圍內(nèi)訪問疆偿。調(diào)用函數(shù)時,所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中搓幌。

全局變量

局部變量

total = 0; # 這是一個全局變量
# 可寫函數(shù)說明
def sum( arg1, arg2 ):
   #返回2個參數(shù)的和."
   total = arg1 + arg2; # total在這里是局部變量.
   print "函數(shù)內(nèi)是局部變量 : ", total
   return total;
 
#調(diào)用sum函數(shù)
sum( 10, 20 );
print "函數(shù)外是全局變量 : ", total 

===
輸出結(jié)果:

函數(shù)內(nèi)是局部變量 :  30
函數(shù)外是全局變量 :  0

全局變量想作用于函數(shù)內(nèi)杆故,需加 global:

globvar = 0

def set_globvar_to_one():
    global globvar    # 使用 global 聲明全局變量
    globvar = 1

def print_globvar():
    print(globvar)     # 沒有使用 global

set_globvar_to_one()
print  globvar        # 輸出 1
print_globvar()       # 輸出 1,函數(shù)內(nèi)的 globvar 已經(jīng)是全局變量
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溉愁,一起剝皮案震驚了整個濱河市处铛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拐揭,老刑警劉巖撤蟆,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異堂污,居然都是意外死亡家肯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門盟猖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讨衣,“玉大人,你說我怎么就攤上這事扒披≈狄溃” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵碟案,是天一觀的道長。 經(jīng)常有香客問我颇蜡,道長价说,這世上最難降的妖魔是什么辆亏? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮鳖目,結(jié)果婚禮上扮叨,老公的妹妹穿的比我還像新娘。我一直安慰自己领迈,他們只是感情好彻磁,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狸捅,像睡著了一般衷蜓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尘喝,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天磁浇,我揣著相機(jī)與錄音,去河邊找鬼朽褪。 笑死置吓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缔赠。 我是一名探鬼主播衍锚,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗤堰!你這毒婦竟也來了戴质?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤梁棠,失蹤者是張志新(化名)和其女友劉穎置森,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體符糊,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡凫海,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了男娄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片行贪。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖模闲,靈堂內(nèi)的尸體忽然破棺而出建瘫,到底是詐尸還是另有隱情,我是刑警寧澤尸折,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布啰脚,位于F島的核電站,受9級特大地震影響实夹,放射性物質(zhì)發(fā)生泄漏橄浓。R本人自食惡果不足惜粒梦,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荸实。 院中可真熱鬧匀们,春花似錦、人聲如沸准给。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽露氮。三九已至祖灰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沦辙,已是汗流浹背夫植。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留油讯,地道東北人详民。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像陌兑,于是被迫代替她去往敵國和親沈跨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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