Python 函式的引數

2021-09-25 22:54:27 字數 4576 閱讀 5294

目錄

一、函式的引數

1、位置引數

2、預設引數

3、可變引數

4、關鍵字引數

5、 命名關鍵字引數

6、小結

def power(x, n):

s = 1

while n > 0:

n = n - 1

s = s * x

return s

power(5, 2)

#power(x, n)函式有兩個引數:x和n,這兩個引數都是位置引數,

#呼叫函式時,傳入的兩個值按照位置順序依次賦給引數x和n。

def enroll(name, gender, age=6, city='beijing'):

print('name:', name)

print('gender:', gender)

print('age:', age)

print('city:', city)

#按順序提供預設引數

enroll('bob', 'm', 7)

#不按順序提供部分預設引數時,需要把引數名寫上

enroll('adam', 'm', city='tianjin')

(1)、必選引數在前,預設引數在後,否則python的直譯器會報錯;

(2)、當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引數。

(3)、使用預設引數能降低呼叫函式的難度。

注意:預設引數必須指向不變物件!

#預設引數有個最大的坑,演示如下:

def add_end(l=):

return l

'''>>> add_end([1, 2, 3])

[1, 2, 3, 'end']

>>> add_end(['x', 'y', 'z'])

['x', 'y', 'z', 'end']

'''

def calc(*numbers):

sum = 0

for n in numbers:

sum = sum + n * n

return sum

'''>>> calc(1, 2)

5>>> calc()

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

>>> calc(nums[0], nums[1], nums[2])

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

>>> calc(*nums)

14'''

可變引數,允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple。 

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

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

'''>>> person('michael', 30)

name: michael

age: 30

other: {}

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

name: adam

age: 45

other:

>>> extra =

>>> person('jack', 24, city=extra['city'], job=extra['job'])

name: jack

age: 24

other:

>>> extra =

>>> person('jack', 24, **extra)

name: jack

age: 24

other:

**extra表示把extra這個dict的所有key-value用關鍵字引數傳入到函式的**kw引數,

kw將獲得乙個dict,

注意,kw獲得的dict是extra的乙份拷貝,對kw的改動不會影響到函式外的extra

'''

關鍵字引數,允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict。

關鍵字引數,函式的呼叫者可以傳入任意不受限制的關鍵字引數

# 1

# * 後面的引數被視為命名關鍵字引數

# 只接收city和job作為關鍵字引數

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

print(name, age, city, job)

def person2(name, age, city, job):

# 缺少 *,city和job被視為位置引數

pass

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

jack 24 beijing engineer

'''# 2

# 若已有乙個可變引數,後面跟著的命名關鍵字引數就不再需要 *

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

print(name, age, args, city, job)

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

traceback (most recent call last):

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

'''# 命名關鍵字引數必須傳入引數名,這和位置引數不同。

# 如果沒有傳入引數名,呼叫將報錯:

# 3# 命名關鍵字引數可以有預設值,從而簡化呼叫

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

print(name, age, city, job)

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

jack 24 beijing engineer

'''

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

(2) 預設引數一定要用不可變物件,如果是可變物件,程式執行時會有邏輯錯誤!

(3) 要注意定義可變引數和關鍵字引數的語法:

*args是可變引數,args接收的是乙個tuple;

**kw是關鍵字引數,kw接收的是乙個dict。

(4) 呼叫函式時如何傳入可變引數和關鍵字引數的語法:

可變引數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過*args傳入:func(*(1, 2, 3))

關鍵字引數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過**kw傳入:func(**)

(5)  使用*args**kw是python的習慣寫法,當然也可以用其他引數名,但最好使用習慣用法。

(6) 命名關鍵字引數是為了限制呼叫者可以傳入的引數名,同時可以提供預設值。

(7) 定義命名關鍵字引數在沒有可變引數的情況下不要忘了寫分隔符*,否則定義的將是位置引數。

7、程式

設計函式,允許計算兩個數的乘積,請稍加改造,變成可接收乙個或多個數並計算乘積

'''

def product(x, y):

return x * y

'''def product(x, *y):

for i in y:

x=i*x

return x

# 測試

print('product(5) =', product(5))

print('product(5, 6) =', product(5, 6))

print('product(5, 6, 7) =', product(5, 6, 7))

print('product(5, 6, 7, 9) =', product(5, 6, 7, 9))

if product(5) != 5:

print('測試失敗!')

elif product(5, 6) != 30:

print('測試失敗!')

elif product(5, 6, 7) != 210:

print('測試失敗!')

elif product(5, 6, 7, 9) != 1890:

print('測試失敗!')

else:

try:

product()

print('測試失敗!')

except typeerror:

print('測試成功!')

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 函式的引數

位置引數 def power x,n s 1 while n 0 n n 1 s s xreturn s 以上的函式旨在於實現計算x的n次方 預設引數 def power x,n 2 s 1 while n 0 n n 1 s s x return s以上函式中,預設n 2,這樣情況下,不需要每次輸...