Python學海無涯路 第08回 函式

2021-09-16 21:31:55 字數 4552 閱讀 4807

3、返回值

def

test

(x):

y=2*x

return y

呼叫函式時可使用的正式引數型別:

引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣,不然會出現語法錯誤。

使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 python 直譯器能夠用引數名匹配引數值。

如果引數中還有其他引數,所有的位置引數必須在關鍵字引數左邊

def

test

(name, age)

:print

("姓名:"

, name)

print

("年齡:"

, age)

test(name=

"鋤禾"

, age=

18)

輸出:

姓名: 鋤禾

年齡: 18

呼叫函式時,如果沒有傳遞引數,則會使用預設引數。

def

test

(name, age=18)

:print

("姓名:"

, name)

print

("年齡:"

, age)

test(

"鋤禾"

)

輸出:

姓名: 鋤禾

年齡: 18

def

foo(

*args,

**kwargs)

:print

('args = '

, args)

print

('kwargs = '

, kwargs)

print

('---------------------------------------'

)if __name__ ==

'__main__'

:#__name__應該是內建變數,可以列印出來看一下

foo(1,

2,3,

4)foo(a=

1, b=

2, c=3)

foo(1,

2,3,

4, a=

1, b=

2, c=3)

foo(

'a',1,

none

, a=

1, b=

'2', c=

3)

輸出結果:

args =  (1, 2, 3, 4)

kwargs = {}

---------------------------------------

args = ()

kwargs =

---------------------------------------

args = (1, 2, 3, 4)

kwargs =

---------------------------------------

args = ('a', 1, none)

kwargs =

---------------------------------------

args 表示任何多個無名引數,它是乙個tuple(元組);

**kwargs 表示關鍵字引數,它是乙個dict(字典)。

並且同時使用args和**kwargs時,必須*args引數列要在**kwargs前,像foo(a=1, b=『2』, c=3, a』, 1, none, )這樣呼叫的話,會提示語法錯誤「syntaxerror: non-keyword arg after keyword arg」。

**kwargs有個經典的用法,就是建立字典

def

kw_dict

(**kwargs)

:return kwargs

print

(kw_dict(a=

1, b=

2, c=3)

)

輸出

*args與位置引數和預設引數混用:*args要放到位置引數後面,預設引數要放最後。

# *args與位置引數和預設引數混用:*args要放到位置引數後面,預設引數要放最後。

deffoo

(x,*args, y=1)

:print

(x)print

(y)print

(args)

foo(1,

2,3,

4,5,

6,7,

8,9,

10, y=

10000

)# 呼叫函式

輸出:

1

10000

(2, 3, 4, 5, 6, 7, 8, 9, 10)

def

foo(x,a =4,

**kwargs)

:print

(x)print

(a)print

(kwargs)

print

("***************"

)foo(

1,y=

2,z=3)

#使用預設引數

foo(1,

5,y=

2,z=3)

#不使用預設引數,預設引數按位置引數傳值

foo(

1,a=

5,y=

2,z=3)

#不使用預設引數,預設引數按順序

foo(

1,y=

2,z=

3,a=5)

#不使用預設引數,預設引數放最後

輸出:

1

4***************15

***************15

***************15

***************

def

foo(x,

*args, a=4,

**kwargs)

:# 使用預設引數時,注意預設引數的位置要在args之後kwargs之前

print

(x)print

(a)print

(args)

print

(kwargs)

print

("********************"

)foo(1,

5,6,

7,8, y=

2, z=3)

# 使用預設引數

foo(1,

5,6,

7,8, a=

9,y=

2, z=3)

#預設引數可以在args引數後,任意位置

foo(1,

5,6,

7,8, y=

2, a=

9,z=3)

#預設引數可以在args引數後,任意位置

foo(1,

5,6,

7,8, y=

2, z=

3,a=9,

)#預設引數可以在args引數後,任意位置

輸出:

1

4(5, 6, 7, 8)

********************19

(5, 6, 7, 8)

********************19

(5, 6, 7, 8)

********************19

(5, 6, 7, 8)

********************

這種情況,好像無法使用預設值

#注意:當需要修改預設引數時,要調整預設引數的位置,要放在args之前即可,但不可放在開頭。

deffoo

(x,a=4,

*args,

**kwargs)

:print

(x)print

(a)print

(args)

print

(kwargs)

foo(1,

9,5,

6,7,

8,y=

2,z=

3)

輸出:

1

9(5, 6, 7, 8)

def

foo():

return1,

2,"abc"

print

(foo(

))

輸出:(1, 2, 『abc』)

def

foo():

return

print

(foo(

))

輸出:none

Python學海無涯路 第12回 map函式

將列表中的每個元素加1,可以使用以下方法 usr bin env python coding utf 8 array num 1 2,3 4 定義乙個函式,數字加1 deffunc add x return x 1def map test func,array ret 定義乙個空列表 for i i...

Python學海無涯路 第17回 迭代器

可迭代物件 實現了迭代器協議的物件 迭代器有兩個基本的方法 iter 和 next for迴圈的本質 將物件用 iter 轉換成可迭代物件,呼叫其next 方法。字串 列表 元組 字典 集合 檔案物件,這些都不是可迭代物件,只不過在for迴圈時,呼叫了他們內部的 iter 方法,把它們變成了可迭代物...

Python學海無涯路 第23回 time模組

4 時間戳 5 元組 struct time 5.2 將格式化字串轉換為struct time 6 格式化的時間 6.2 將struct time轉化為格式化的時間 6.格式化時間的符號 6.格式化時間的符號 7 其它函式 8 格式相互轉換關係圖 格林尼治和格林威治都是greenwich的音譯叫法。...