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的音譯叫法。...