python 函式引數

2021-09-10 05:33:12 字數 3362 閱讀 9259

你以為你以為的就是你以為的嗎?

看教程的時候小紅一路膨脹,很簡單嘛~直到實戰的時候看到了

param.kind != inspect.parameter.var_positional and \

param.kind != inspect.parameter.keyword_only and \

param.kind != inspect.parameter.var_keyword

小紅:對不起,媽媽!我以後會好好看教程的。

以前遇到的函式引數都是瞥一眼,分為兩類:必填和選填。必填項是用來唯一標識函式的,選填項就是擁有預設引數的富二代還有神出鬼沒(mei)的可變引數。其實看到python裡動不動就從**kw取鍵值對的時候,我的內心是有一絲動搖的,現在的富二代都這麼誇張,都不需要明文宣告一下(像預設引數那樣搞個等號,或者可變引數那樣搞幾個點點。喂!這不是c++!)?真的不需要,有錢(python對於函式引數的約定,約定那可就是基因增強了)真的就可以為所欲為啊。

必填引數,至於為啥要叫positional variate,可能是因為這部分引數是用來告訴呼叫者需要在哪個位置傳入什麼引數的。

python中沒有過載,也不需要過載,所以跟之前認識的必填項的作用還是不太一樣的。

示例:x就是位置引數。

def power(x):

return x * x

可以通過給函式的一些引數給定預設值,有兩個用處:

示例:

def power(x, n=2):

s = 1

while n > 0:

n = n - 1

s = s * x

return s

# 輸出

>>> power(5)

25>>> power(5, 2)

25

這個可變引數和其他語言的可變引數的用處沒有什麼不一樣,就是表示方式變化了一下。

def calc(*numbers):

sum = 0

for n in numbers:

sum = sum + n * n

return sum

# 呼叫和輸出

>>> calc(1, 2)

5>>> calc()

0

在引數前面加上*號就可以將引數看作可變的,函式內部把引數當成乙個tuple來使用即可。

此外,在list或tuple前面加上*可以將其變成可變引數,從而方便傳給函式。

>>> nums = [1, 2, 3]

>>> calc(*nums)

14

快看,這個就是那個帶土豪基因的傢伙!

這個大概就是python不需要函式過載的重要**吧,超厲害哦~

def person(name, age, **kw):

print('name:', name, 'age:', age, 'other:', kw)

# 呼叫和輸出

>>> person('michael', 30)

name: michael age: 30 other: {}

>>> person('bob', 35, city='beijing')

name: bob age: 35 other:

>>> person('adam', 45, gender='m', job='engineer')

name: adam age: 45 other:

土豪就是上面那個樣子的。可以超級嗨皮地傳鍵值對進去,python只負責把引數組裝成dict,呼叫者可以用這個引數來說悄悄話啦。

上面的關鍵字引數的key可以是任意值,呼叫者隨便傳啥都可以。如果要對傳入的key進行限制,可以使用如下寫法:

def person(name, age, *, city, job):

print(name, age, city, job)

# 呼叫和輸出

>>> person('jack', 24, city='beijing', job='engineer')

jack 24 beijing engineer

這個用法的專業名稱叫做「命名關鍵字引數」,使用*分隔分隔,*後面的引數被視為「命名關鍵字引數」。定義成命名關鍵字引數的引數

>>> person('jack', 24, 'beijing', 'engineer')

traceback (most recent call last):

file "", line 1, in typeerror: person() takes 2 positional arguments but 4 were given

def person(name, age, *, city='beijing', job):

print(name, age, city, job)

# 呼叫和輸出

>>> person('jack', 24, job='engineer')

jack 24 beijing engineer

引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字、關鍵字引數

示例:

def f2(a, b, c=0, *, d, **kw):

print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

# 呼叫和輸出

>>> f2(1, 2, d=99, ext=none)

a = 1 b = 2 c = 0 d = 99 kw =

雖然是自家人,命名關鍵字和關鍵字引數的順序也不是隨便來的,好多爸媽會比較寵小的那個。

def f3(a, b, c=0, **kw, *, d):

print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

# 呼叫和輸出

>>> f3(1, 2, ext=none, d=99)

def f3(a, b, c=0, **kw, *, d):

^syntaxerror: invalid syntax

python引數函式 Python函式引數總結

coding utf 8 整理一下python函式的各種引數型別 位置引數 呼叫函式時,傳入的兩個值按照位置順序依次賦給引數 def power x,n s 1 while n 0 n n 1 s s x return s print power 5,2 預設引數 簡化函式的呼叫 def power...

python 引數 Python函式 引數

python中將函式作為引數,區分將引數直接寫成函式名和函式名 的區別。def fun1 fun print print print fun 執行fun1 fun4 時,fun為函式fun3的返回值x print type fun type fun type fun fun 執行fun1 fun4 ...

函式傳引數 python 函式引數

1.位置引數 最熟悉的一種引數形式,優點 簡單。缺點 傳遞引數不夠靈活 2.預設引數 優點 提高了 的復用性 缺點 容易產生二義性 注意事項 一是必選引數在前,預設引數在後。二是如何設定預設引數。當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引數。def p...