匿名函式
定義函式使用 def 關鍵字:
def 函式名(引數列表):
函式體return [表示式]
不可變型別:
類似值傳遞,如:整數、字串、元組。如fun(a)
,傳遞的只是a
的值,沒有影響a
物件本身。比如在fun(a)
內部修改a
的值,只是修改另乙個複製的物件,不會影響a
本身。
可變型別:
類似引用傳遞,如:列表、字典。如fun(la)
,則是將la
真正的傳過去,修改後fun
外部的la
也會受影響。
必需引數:
必需引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。
# 列印任何傳入的字串,引數str是必需的
def printme(str):
print(str)
return
# 呼叫printme函式
printme('hi')
關鍵字引數:
函式呼叫使用關鍵字引數來確定傳入的引數值,呼叫時引數的順序允許與宣告時不一致。
# 列印傳入的引數name、age
def printinfo(name, age):
print("名字: ", name)
print("年齡: ", age)
return
# 呼叫printinfo函式
printinfo(age=50, name="runoob")
預設引數:
呼叫函式時,如果沒有傳遞引數,則會使用預設引數,預設引數必須指向不變物件。
# 列印傳入的引數name、age、nationality
def printinfo(name, age, nationality="中國"):
print("名字: ", name)
print("年齡: ", age)
print("國籍: ", nationality)
return
# 呼叫printinfo函式
printinfo(age=50, name="runoob")
printinfo(name="wendy", age=35, nationality="美國")
可變引數:
需要乙個函式能處理比當初宣告時更多的引數。
(1).帶乙個星號 *的引數:
def functionname([formal_args,] *var_args_tuple ):
"函式_文件字串"
function_suite
return [expression]
加了星號 * 的引數會以元組(tuple
)的形式匯入,存放所有未命名的變數引數。
# vartuple以元組形式存放所有未命名的變數引數
def printinfo(arg1, *vartuple):
print("輸出: ")
print(arg1)
for var in vartuple:
print (var)
return
# 呼叫printinfo 函式
在list或tuple前面加乙個*號,把list或tuple的元素變成可變引數傳進去。
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
# 將list前面加*,變成可變引數傳入
nums = [1, 2, 3]
calc(*nums)
(2).帶兩個星號 **的引數:def functionname([formal_args,] **var_args_dict ):
"函式_文件字串"
function_suite
return [expression]
兩個星號 ** 的引數會以字典的形式匯入。
# vardict會以字典的形式匯入
def printinfo(arg1, **vardict):
print("輸出: ")
print(arg1)
print(vardict)
# 呼叫printinfo 函式
在dict
前面加兩個**號,把dict
的元素變成可變引數傳進去。**extra表示把extra這個dict的所有key-value用關鍵字引數傳入到函式的**kw引數,kw獲得的dict是extra的乙份拷貝,對kw的改動不會影響到函式外的extra。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
extra =
person('jack', 24, **extra)
命名關鍵字引數:
宣告函式時,引數中星號*
可以單獨出現,單獨出現星號*
後的引數必須用關鍵字傳入,以下函式定義f
,在呼叫時必須使用f(1,2,c=3)
的方式傳入引數名。
def f(a,b,*,c):
return a+b+c
如果函式定義中已經有了乙個可變引數,後面跟著的命名關鍵字引數就不再需要乙個特殊分隔符*
了。
def person(name, age, *args, city, job):
print(name, age, args, city, job)
引數定義的順序必須是:必需引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。對於任意函式,都可以通過類似func(*args, **kw)
的形式呼叫它,無論它的引數是如何定義的。*args
是可變引數,args
接收的是乙個tuple
;**kw
是關鍵字引數,kw
接收的是乙個dict
。
python的作用域一共有4種,分別是:
l (local) 區域性作用域
e (enclosing) 閉包函式外的函式中
g (global) 全域性作用域
b (built-in) 內建作用域(內建函式所在模組的範圍)
以l –> e –> g –>b的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。當內部作用域想修改全域性變數,就要用到global
關鍵字;當內部作用域想修改巢狀作用域(enclosing
作用域,外層非全域性作用域)中的變數,就要用到nonlocal
關鍵字。
python的函式返回多值其實就是返回乙個tuple
,不帶引數值的return
語句返回none
。
使用lambda
來建立匿名函式,lambda
函式擁有自己的命名空間,且不能訪問自己引數列表之外或全域性命名空間裡的引數:lambda [arg1 [,arg2,.....argn]]:expression
。
sum = lambda arg1, arg2: arg1 + arg2
# 呼叫sum函式
print ("相加後的值為 : ", sum( 10, 20 ))
python學習筆記四 函式
型別轉換函式 python 可以使用int str float bool 等函式將其引數轉換為對應的資料型別 定義函式 在python 中定義乙個函式需要用到def語句,注意寫完函式名之後的冒號不能忘記 def my abs x if x 0 return x else return x如上,定義了...
python學習筆記(四) 函式式程式設計
1 高階函式 高階函式 higher order function 1 變數可以指向函式 函式本身也可以賦值給變數。2 函式名也是變數 指向函式的變數。3 傳入函式 變數能夠指向函式,函式的引數能接收變數,乙個函式就可以接收另乙個函式作為引數。接收兩個引數 函式,iterable map 將傳入的函...
四 Python函式式程式設計 學習筆記
1 map reduce函式 map 函式,iterable 把傳入的函式依次作用在序列的每個元素上,並將結果作為乙個新的iterable返回。例子 使用者輸入的英文名字,首字母大寫,其他小寫 coding utf 8 def normalize name return name 0 upper n...