python函數(shù)

可更改(mutable)與不可更改(immutable)對象

  • 在 python 中愧薛,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象展父。
  • 不可變類型:變量賦值 a=5 后再賦值 a=10,這里實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄令漂,不是改變a的值,相當(dāng)于新生成了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++ 的引用傳遞摊阀,如 列表耻蛇,字典。如 fun(la)胞此,則是將 la 真正的傳過去臣咖,修改后fun外部的la也會受影響
    python 中一切都是對象,嚴(yán)格意義我們不能說值傳遞還是引用傳遞漱牵,我們應(yīng)該說傳不可變對象和傳可變對象夺蛇。

實例

  • 代碼:
def changeInt(var):
    var=var+1;
    print(var);
    return;

def changeList(lit):
    if len(lit)>0:
        lit[0]='change';
    print(lit);
    return;

a=10;
changeInt(a);
print(a);

lit=['a','b'];
changeList(lit);
print(lit);
  • 輸出:
11
10
['change', 'b']
['change', 'b']

參數(shù)

  • 必備參數(shù)
  • 關(guān)鍵字參數(shù)
  • 默認(rèn)參數(shù)
  • 不定長參數(shù)

必備參數(shù)

  • 必備參數(shù)須以正確的順序傳入函數(shù)。調(diào)用時的數(shù)量必須和聲明時的一樣酣胀。
    如:
def printme(str):
    "print str"
    print(str);
    return;

printme("i love u");

#printme();

printme('a',10);

輸出1:

======================= RESTART: D:/pythonTest/def.py =======================
i love u
Traceback (most recent call last):
  File "D:/pythonTest/def.py", line 8, in <module>
    printme();
TypeError: printme() missing 1 required positional argument: 'str'
>>> 

輸出2:

======================= RESTART: D:/pythonTest/def.py =======================
i love u
Traceback (most recent call last):
  File "D:/pythonTest/def.py", line 9, in <module>
    printme('a',10);
TypeError: printme() takes 1 positional argument but 2 were given
>>> 

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

  • 關(guān)鍵字參數(shù)和函數(shù)調(diào)用關(guān)系緊密刁赦,函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值娶聘。
  • 使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時參數(shù)的順序與聲明時不一致,因為 Python 解釋器能夠用參數(shù)名匹配參數(shù)值甚脉。
def tstFun(you,me):
    print(you + " loves " + me );
    return;

tstFun(me="Tom",you="Jack");

輸出:

======================= RESTART: D:/pythonTest/def.py =======================
Jack loves Tom

缺省參數(shù)

  • 調(diào)用函數(shù)時丸升,缺省參數(shù)的值如果沒有傳入,則被認(rèn)為是默認(rèn)值牺氨。
def tstFun(you,me="eleven"):
    print(you + " loves " + me );
    return;

tstFun(you="Jack");

輸出:

======================= RESTART: D:/pythonTest/def.py =======================
Jack loves eleven

不定長參數(shù)

  • 你可能需要一個函數(shù)能處理比當(dāng)初聲明時更多的參數(shù)幻妓。這些參數(shù)叫做不定長參數(shù)棉浸,和上述2種參數(shù)不同,聲明時不會命名。
def findDog(you,*dogs,yourDog):
    print(you + " starts find dog: " + yourDog);
    for dog in dogs:
        print("current dog is " + dog);
        if (dog==yourDog) :
            print("find it! stop searching!");
            return;
    print("sorry can\'t find it. my bad.")
    return;

findDog("Jack",'jj','haha','tt',yourDog='jj');

注意:*dogs參數(shù)接受輸入的所有不定長參數(shù)玄窝,比如,如果沒有顯示指定yourDog="jj"绰更,那么''jj''將會當(dāng)成其中一個參數(shù)议蟆,再比如,直接傳入List歹篓,實際只算是一個List參數(shù)瘫证。

匿名函數(shù)

  • python 使用 lambda 來創(chuàng)建匿名函數(shù)。
    1. lambda只是一個表達(dá)式庄撮,函數(shù)體比def簡單很多背捌。
    2. lambda的主體是一個表達(dá)式,而不是一個代碼塊洞斯。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去毡庆。
    3. lambda函數(shù)擁有自己的命名空間,且不能訪問自有參數(shù)列表之外或全局命名空間里的參數(shù)烙如。
    4. 雖然lambda函數(shù)看起來只能寫一行么抗,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時不占用棧內(nèi)存從而增加運行效率亚铁。
sum=lambda arg1,arg2,arg3=100:arg1+arg2+arg3;

print(sum(1,2));

輸出:

======================= RESTART: D:/pythonTest/def.py =======================
103
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝇刀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子徘溢,更是在濱河造成了極大的恐慌吞琐,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件然爆,死亡現(xiàn)場離奇詭異站粟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)曾雕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門奴烙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事缸沃∏∑穑” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵趾牧,是天一觀的道長检盼。 經(jīng)常有香客問我,道長翘单,這世上最難降的妖魔是什么吨枉? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮哄芜,結(jié)果婚禮上貌亭,老公的妹妹穿的比我還像新娘。我一直安慰自己认臊,他們只是感情好圃庭,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著失晴,像睡著了一般剧腻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涂屁,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天书在,我揣著相機(jī)與錄音,去河邊找鬼拆又。 笑死儒旬,一個胖子當(dāng)著我的面吹牛帖族,可吹牛的內(nèi)容都是我干的栈源。 我是一名探鬼主播凉翻,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼前计!你這毒婦竟也來了男杈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤旺垒,失蹤者是張志新(化名)和其女友劉穎先蒋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眯搭,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鳞仙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年笔时,在試婚紗的時候發(fā)現(xiàn)自己被綠了允耿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡提澎,死狀恐怖念链,靈堂內(nèi)的尸體忽然破棺而出掂墓,到底是詐尸還是另有隱情,我是刑警寧澤跨嘉,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布祠乃,位于F島的核電站兑燥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嘱支。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锹安。 院中可真熱鬧贞岭,春花似錦、人聲如沸话速。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至研乒,卻和暖如春淋硝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竿报。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工继谚, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留花履,地道東北人芽世。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓济瓢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宠漩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

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