1. 程式人生 > >python==format, *args, **kwargs

python==format, *args, **kwargs

1 *args, **kwargs

  • *args和**kwargs是python中的可變引數;
  • *args表示任何多個無名引數,是tuple型別;
  • **表示關鍵字引數,是dict型別;
  • 同時使用*args和kwargs時,*args必須放在kwargs前面;
# 原始碼
def foo(*args, **kwargs):
	print("args={}".format(args))
	print("kwargs={}".format(kwargs))
	for i in range(10):
		print("**",end='')
if __name__ == "__main__":
	# tuple型別資料
	foo(1, 2, 3, 4)
	# dict型別資料
	foo(a=1, b=2, c=3)
	# tuple+dict型別資料
	foo(1, 2, 3, 4, a=1, b=2, c=3)
# 結果
# *args為tuple型別
# **kwargs為dict型別
args=(1, 2, 3)
kwargs={}
********************
args=()
kwargs={'a': 1, 'b': 2, 'c': 3}
********************
args=(1, 2, 3)
kwargs={'a': 1, 'b': 2, 'c': 3}
********************

注意

# *args, **kwargs先後順序錯誤
def foo(**kwargs, *args):
# 結果
 File "<ipython-input-54-434a959009b6>", line 1
    def foo(**kwargs, *args):
                      ^
SyntaxError: invalid syntax

2 format

  • format是Python2.6開始新增的格式化字串函式,形式str.format();
  • 使用形式"{}{}".format("a","b");
  • 傳統%引用變數輸出,即print("%d" %a);
  • format引數個數不受限制.

2.1 預設輸出

# 原始碼
a = "{} {}".format("xin", "daqi")
b = "{},{}".format("OK","See you later!")
print(type(a))
print(a)
print(type(b))
print(b)
# 結果
# format輸出格式為字串,預設按照引數先後位置輸出
<class 'str'>
xin daqi
<class 'str'>
OK,See you later!

2.2 指定引數順序輸出

# 原始碼
a = 'OK'
b = "Let's go!"
o1 = "{}{}".format(b,a)
o2 = "{1},{0}".format(b,a)
print(o1)
print(o2)
# 結果
# 按照指定順序輸出,在{}中指定變數
# format引數從0開始標註
Let's go!OK
OK,Let's go!

2.3 指定輸出變數

# 原始碼
userInfo = {"name":"xin daqi", "sex":"male"}
print("姓名:{name}, 性別:{sex}".format(**userInfo))
# 結果
# 指定輸出變數
# format引數使用dict型別
# **kwargs引數
姓名:xin daqi,性別:male

2.4 傳入物件引數

# 原始碼
class Test(object):
	def __init__(self, value):
		self.value = value
useTest = Test(2)
print("{0.value}".format(useTest))
# 結果
# 傳入物件
# 輸出變數
2

[參考文獻]
[1]https://www.cnblogs.com/goodhacker/p/3360721.html
[2]http://www.runoob.com/python/att-string-format.html