定義乙個函式
定義乙個由自己想要功能的函式,以下是簡單的規則:
一般格式如下:
def 函式名(引數列表):
函式體1
2預設情況下,引數值和引數名稱是按函式宣告中定義的順序匹配起來的。
函式呼叫
給了函式乙個名稱,指定了函式裡包含的引數,和**塊結構。
這個函式的基本結構完成以後,你可以通過另乙個函式呼叫執行,也可以直接從 python 命令提示符執行。
上面已經有例子了,就不舉了。
引數傳遞
在 python 中,型別屬於物件,變數是沒有型別的:
a = 'abc'
a = [1, 2, 3]12
以上**中,[1,2,3] 是 list 型別,「runoob」 是 string 型別,而變數 a 是沒有型別,她僅僅是乙個物件的引用(乙個指標),可以是指向 list 型別物件,也可以是指向 string 型別物件。
可更改(mutable)與不可更改(immutable)物件
在 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沒有動,只是其內部的一部分值被修改了。
python 函式的引數傳遞:
不可變型別 :類似 c++ 的值傳遞,如 整數、字串、元組。如fun(a),傳遞的只是a的值,沒有影響a物件本身。比如在 fun(a)內部修改 a 的值,只是修改另乙個複製的物件,不會影響 a 本身。
可變型別 :類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正位址的傳過去,修改後fun外部的 la 也會受影響。
python 中一切都是物件,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變物件和傳可變物件。
傳不可變物件例項
首先是 number:
然後是 string:
最後是 tuple:
傳可變物件例項
首先是 dictionary:
找字典的內容時,學到乙個 dic 的新方法,popitem() 隨機返回並刪除字典中的最後一對鍵和值。為什麼是隨機刪除呢?因為字典是無序的,沒有所謂的「最後一項」或是其它順序。在工作時如果遇到需要逐一刪除項的工作,用popitem()方法效率很高。
然後是 list:
最後是 set:
引數以下是呼叫函式時可使用的正式引數型別:
必需引數
關鍵字引數
預設引數
不定長引數
必需引數
必需引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。
關鍵字引數
關鍵字引數和函式呼叫關係緊密,函式呼叫使用關鍵字引數來確定傳入的引數值。
使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 python 直譯器能夠用引數名匹配引數值。
例如:預設引數
呼叫函式時,如果沒有傳遞引數,則會使用預設引數。
不定長引數
當你不確定傳入引數多少的時候,你可能需要該函式能處理任意數量的引數。這些引數叫做不定長引數,和上述 2 種引數不同,宣告時不會命名。
基本語法如下:
def functionname([formal_args,] *var_args_tuple ):
"函式_文件字串"
function_suite
return [expression]12
34加了星號 * 的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。
先看乙個簡單的例子:
如果在函式呼叫時沒有指定引數,它就是乙個空元組。我們也可以不向函式傳遞未命名的變數。功能是可以收集除了必選引數以外剩餘的位置引數,會根據傳進引數的位置合併成乙個元組。
如下例項:
還有一種就是引數帶兩個星號 ** ,加了兩個星號 ** 的引數會以字典的形式匯入。功能是收集除定義的變數的關鍵字引數之外,其它剩餘關鍵字引數。
基本語法如下:
def functionname([formal_args,] **var_args_dict ):
"函式_文件字串"
function_suite
return [expression]12
34注意:在python中定義函式,可以用必選引數、預設引數、可變引數和關鍵字引數,這4中引數可以一起使用,或者是只用其中的某些。但是注意,引數定義與呼叫的順序必須是:
必選引數【位置引數】、預設引數、可變引數【包裹位置】和關鍵字引數【包裹關鍵字】。(預設引數與包裹位置引數可以根據需求進行位置調換)
匿名函式
python 使用 lambda 來建立匿名函式。
所謂匿名,即不再使用 def 語句這樣標準的形式定義乙個函式。
lambda 只是乙個表示式,函式體比 def 簡單很多。
lambda的主體是乙個表示式,而不是乙個**塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
lambda 函式擁有自己的命名空間,且不能訪問自己引數列表之外或全域性命名空間裡的引數。
雖然lambda函式看起來只能寫一行,卻不等同於c或c++的內聯函式,後者的目的是呼叫小函式時不占用棧記憶體從而增加執行效率。
語法lambda 函式的語法只包含乙個語句,如下:
lambda [arg1 [,arg2,…argn]]:expression
如下例項:
return語句
return [表示式] 語句用於退出函式,選擇性地向呼叫方返回乙個表示式。不帶引數值的return語句返回none。
之前的例子都沒有示範如何返回數值,以下例項演示了 return 語句的用法:
python學習 第六天
在下這廂有禮了 原始碼安裝說明 很多第三方庫都是開源的,幾乎都可以在github或者pypi上找到原始碼,找到的原始碼的格式大都是zip tar.zip tar.bz2格式的壓縮包。解壓這些壓縮包,會看到setup.py的檔案。開啟命令列,進入資料夾。執行 這個命令,就能把這個第三庫安裝到系統中,也...
學習python 第六天
字串的一些方法 1 字串擷取 print s 0 3 print s print s 1 s 開始 終止 步長 2 去空格 s.strip 消除字串s兩邊的空格 print s.strip print s.lstrip 去左空格 print s.rstrip 去右空格3 字串複製 位址相同 s co...
python學習第六天
巢狀 有時候需要將一系列字典儲存在列表中,或將列表作為值儲存在字典中。字典列表 alien 0 alien 1 alien 2 aliens alien 0,alien 1,alien 2 for alien in aliens print alien 在字典中儲存列表 pizza crust th...