Python學習筆記四 函式

2021-09-11 20:28:55 字數 4742 閱讀 6842

匿名函式

定義函式使用 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...