函式是可重⽤的**塊,使⽤函式可以幫助我們組織**的結構。我們建立函式的⽬的,是能在程式運⾏中多次使⽤⼀系列**,⽽不⽤重複書寫**。
def function_name(arg1, arg2, arg3, .... argn):
#statement inside function
縮排我們看⼀個函式的例⼦,下⾯的函式將計算指定範圍的整數之和:空⽩區在 python 中⼗分重要。實際上,空⽩區在各⾏的開頭⾮常重要。這被稱作縮排(indentation)。在邏輯
⾏的開頭留下空⽩區(使⽤空格或製表符)⽤以確定各邏輯⾏的縮排級別,⽽後者又可⽤於確定語句的分組。這意味著放置在⼀起的語句必須擁有相同的縮排。每⼀組這樣的語句被稱為塊(block)。有⼀件事你需要記住:錯誤的縮排可能會導致錯誤。所有在函式內部的宣告,都必須使⽤相等的縮排。函式可以沒有引數,也可以有多個引數。多個引數之間⽤逗號隔開。還可以使⽤ pass 關鍵字忽略掉函式主題的宣告。
def sum(start, end):
result = 0
for i in range(start, end + 1):
result += i
print(result)
sum(1, 10)
在上⾯的**中,我們定義了⼀個叫作 sum() 的函式,該函式有兩個引數(start和 end),該函式將從 start 開始,累加到 end,最後列印出累積之和。**運⾏的結果為 55。
上⽂定義的函式只是簡單地在控制台列印出結果,如果我們想要將計算結果賦值給變數,以便做更深⼊的處理時應該怎麼辦?當我們遇到這種情況時,可使⽤ return語句,將返回函式計算結果並且退出函式。例如:
def sumreturn(start, end):
result = 0
for i in range(start, end + 1):
result += i
return result
a = sumreturn(1, 5)
print(a)
在上⾯這段**中,我們定義了有返回值的函式 sumreturn(),並將其結果賦值給變數 a。上⾯**的運⾏結果為 15。
當然, return 語句也可以不返回值,⽽是⽤來退出函式(實際上會返回 none,為nonetype 物件)。每⼀個函式都在其末尾隱含了⼀句 return none,除⾮你寫了你⾃⼰的 return 語句。
在 python 中,如果你不指定 return 的返回值,則會返回 none 值。
全域性變數指的是不屬於任何函式,但又可以在函式內外訪問的變數。⽽局域變數指的是在函式內部宣告的變數,局域變數只能在函式內部使⽤,⽆法在函式外訪問(函式執⾏完後,會銷毀內部定義的區域性變數)。
下⾯我們通過例⼦來演⽰這兩者的區別:
global_var = 12 # 定 義 全 局 變 量
def func():
local_var = 100 # 定 義 局 部 變 量
print(global_var) # 可 以 在 函 數 內 部 訪 問 全 局 變 量
func() # 調 用 函 數 func()
print(local_var) # 無 法 訪 問 變 量 local_var
上述**將會出現錯誤:
nameerror: name 'local_var' is not defined
我們再看⼀個例⼦:
xy = 100 # 定 義 全 局 變 量xy
def func():
xy = 200 # 定 義 局 部 變 量xy
print(xy) # 此 時 訪 問 的 是 局 部 變 量xy
func() # 調 用 函 數 func()
該**顯⽰的結果是 200,不是 100。
使⽤ global 關鍵字,可以將區域性變數同全域性變數繫結在⼀起。例如:
t = 1
def increment():
global t # 現 在 的 變 量t在 函 數 內 外 都 是 一 致 的
t = t + 1
print(t) # 輸 出 2
increment()
print(t) # 輸 出 2
使⽤ global 關鍵字宣告全域性變數時,⽆法直接賦值,⽐如「global t = 1」的寫法存在語法錯誤。為引數指定預設值,只需在定義函式時使⽤賦值語句即可。例如:
def func(i, j = 100):
print(i, j)
上述定義的函式 func() 有兩個引數 i 和 j。 j 的預設值為 100,這意味著我們在調⽤這個函式的時候可以忽略掉 j 的值,⽐如 func(2),運⾏結果為 2 100。
為函式傳遞引數值的⽅法有兩種:位置引數和關鍵字引數。我們之前調⽤函式的時候都使⽤的是位置引數。下⾯我們看如何使⽤關鍵字引數:
def named_args(name, greeting):
print(greeting + " " + name)
named_args(name='jim', greeting='hello')
named_args(greeting='hello', name='jim')
named_args('jim', greeting='hello')
上述**運⾏結果都是「hello jim」。
關鍵字引數使⽤「name=value」的名稱、值對傳遞資料,正如上⾯**演⽰的那樣,使⽤關鍵字引數的時候,引數的順序是可以調換的,⽽且位置引數和關鍵字引數可以混合使⽤(只能先使⽤位置引數,後使⽤關鍵字引數)。
我們可以通過在 return 語句中使⽤逗號,將多個值返回,這種返回值的型別是元組。例如:
def bigger(a, b):
if a > b:
return a, b
else:
return b, a
s = bigger(12, 100)
print(s)
print(type(s))
運⾏結果為:
(100, 12)
詳解 Python 中的元組型別
目錄 7.1 建立元組 7.2 元組相關方法 在 python 中,元組 tuple 和列表 常相似,與列表不同的是,元組 旦創 就不可改變,也就是說,元組是不可變的。與列表一樣,元組也是序列,唯一的差別在於元組是不能修改的 你可能注意到了,字串也不能修改 元組語法很簡單,只要將一些值用逗號分隔,就...
python中函式詳解
1 什麼是函式?函式是一種工具,封裝乙個可重複呼叫的 塊 2 為什麼要用函式?如果不使用函式,將變得冗餘。可讀性差 3 怎麼用函式?定義函式 呼叫函式 有參函式 defadd x,y return x y 無參函式 defwelecome print welecome to my home 空函式 ...
python中的zip 函式詳解
一 zip iterables 函式詳解 1 zip 函式的定義 2 zip 函式的用法 python 3 zip 函式單個引數 in 1 list1 1,2,3,4 in 2 tuple1 zip list1 in 3 type tuple1 out 3 zip in 4 list tuple1 ...