這一篇筆記,學習python
的函式函式基礎
函式相關的語句和表示式 語句
例子calls
myfunc(「spam」,」eggs」,meat=ham)
def,
def adder(a,b=1,*c):
return
return a+b+c[0]
global
def changer():
global x;x=』new』
nonlocal
def changer():
nonlocal x;x=』new』
yield
def squares(x):
for i in range(x):yield i**2
lambda
funcs=[lambda x: x**2,lambda x:x*3]
編寫函式 1,
def是可執行**。
python的函式是由乙個新的語句編寫的,即
def。不像
c這樣的編譯語言,
def是以供可執行的語句
——函式並不存在,直到
python
執行了def
後才存在。事實上,在
if語句、
while
迴圈甚至是其他的
def中巢狀是合法的(甚至在某些場合還是很有效)。在典型的操作中,
def語句在模組檔案中編寫,並自然而然地在模組檔案第一次被匯入的時候生成定義的函式。 2,
def建立了以供物件並且將其賦值給某乙個變數名。
當python
執行到def
語句時,它將會生成乙個新的函式物件並將其賦值給這個函式名。就像所有的賦值一樣函式名變成了某乙個函式引用。函式名稱並沒有什麼神奇
——就像你將看到的那樣,函式物件可以賦值給其他的變數名,儲存在列表之中。函式也可以通過
lambda
表示式來建立。 3,
lambda
建立乙個物件但將其作為結果返回。
也可以用lambda
表示式建立函式,這一功能允許我們把函式定義內聯到語法上一條
def語句不能工作的地方。 4,
return
將結果對像傳送給呼叫者。
當函式被呼叫時,其呼叫者停止執行直到這個函式完成了它的工作,之後函式才將控制權返回給呼叫者。函式是通過return
語句將計算得到的值傳遞給呼叫者的,返回值為函式呼叫結果。 5,
yield
向呼叫者發回乙個結果物件,但是記住它離開的地方。
像生成器這樣的函式可以通過yield
語句來返回值,並掛起他們的狀態以便稍後能夠恢復狀態。 6,
global
宣告了乙個模組級的變數並被賦值。
在預設情況下,所有在乙個函式中被賦值的物件,是這個函式的本地變數,並且僅在這個函式執行的過程中存在。為了分配乙個可以在整個模組中都可以使用的變數,函式需要在global
語句中將它列舉出來。通常情況下,變數名往往需要關注它的作用域(也就是變數儲存的地方),並且是通過實賦值語句將變數名繫結作用域的。 7,
nonlocal
宣告了將要賦值的乙個封閉的函式變數。
類似的,python3.0
中新增的
nonlocal
語句允許封閉的函式作為保留狀態的乙個地方
——當乙個函式呼叫的時候,資訊被記住了
——而不必使用共享的全域性名稱。
8,函式是通過賦值(物件引用)傳遞的。在
python
中,引數通過賦值傳遞給了函式(也就是說,就像我們所學過的,使用物件引用)。
python
的模式中呼叫者以及函式通過引用共享物件,但是改變傳遞的可變物件可以改變呼叫者共享的那個物件。
9,引數、返回值以及變數並不是宣告。
就像在python
中所有的一樣,在函式中並沒有型別約束。實際上,從一開始函式並不需要宣告:可以傳遞任意型別的引數給函式,函式也可以返回任意型別的物件。其結果就是,函式常常可以用在很多態別的物件身上,任意支援相容介面(方法和表示式)的物件都能使用,無聊它們是什麼型別。
詳細範例
def語句
def語句將建立乙個函式物件並將其賦值給乙個變數名。
def語句一般格式如下:
def (arg1,arg2,... argn):
就像所有的多行python
語句一樣,
def包含了首行並有乙個**塊跟隨在後邊,這個**塊通常都會縮排(或者就是冒號後邊簡單的一句)。而這個**塊就成為了函式的主體
——也就是每當呼叫函式的
python
所執行的語句。
def的首行定義了函式,賦值給了函式物件,並在括號中包含了
0個或以上的引數(有些時候成為是形參)。在函式呼叫的時候,在首行的引數名賦值給了括號中的傳遞的物件。
函式主體往往包含了一條return
語句。
def (arg1,arg2,... argn):
...return
python的
return
語句可以在函式主體的任何地方出現。它表示函式呼叫的結束,並將結果返回至函式呼叫處。函式也可以不反回結果。如果沒有
return,
函式一直執行到函式結束,從技術角度來講,乙個沒有返回值的函式自動返回乙個
none
物件,但是這個值往往是被忽略的。
函式也許會有yield
語句,這在每次都會產生一系列值是被用到。
第乙個例子:定義和呼叫
前面def
開始為定義,後面的
x=times(3.14,4)
為呼叫。
第二個例子:尋找序列的交集
定義了乙個intersect
函式,裡面乙個
for
迴圈語句塊,乙個
if判斷語句。注意縮排對齊。
本地變數
前面例子中,函式題裡面的res,x,
引數seq1,seq2,
都是本地變數,所謂的本地變數就是在函式體裡面有用,出了函式體就沒用了,無法使用。有其他語句學習經驗的應該能發現這個就是其他語言的區域性變數。在某個**塊有用,出了**塊就沒用了。
python基礎6 python函式
python函式 一 函式的引數 1 函式的引數從呼叫的角度來講可以分為形式引數和實際引數,也可叫形參和實參。形參 變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數 實參 可以是常量 變數 表...
python小測驗6 Python小記6
8.4 迴圈計算 程式中,利用迴圈流程,進行重複計算。例項演示 利用迴圈以及賦值運算等,計算1 100的和。按照數學等差數列公式,可以輕鬆得出 和 s 1 100 100 2,但是現在我們需要使用程式迴圈,進行原始的方法計算,s 1 2 3 4 100 0 100求和 定義計數器,初始化 i 1 定...
6 Python基礎 函式練習
1.設計乙個函式,統計乙個字串中出現頻率最高的字元 單個符號 及其出現次數 定義函式 def str max count2 my str if len my str 1 print 輸入錯誤!return my dic for item in my str my dic.update max cou...