python题目——认识*与**,判断函数输出

代码:

def f1(a, b, c=0, *args, **kw):
	print('a=', a, 'b=', b, 'c=', c, 'args=', args, 'kw=', kw)
def f2(a, b, c=0, *, d, **kw):
	print('a=', a, 'b=', b, 'c=', c, 'd=', d, 'kw=', kw)
f1(1,2)
f1(1,2,c=3)
f1(1,2,3,'a','b')
f1(1,2,3,'a','b',x=99)
f2(1,2,d=99,ext=None)
args = (1,2,3,4)
kw = {'d':99, 'X':'#'}
f1(*args, **kw)
args = (1,2,3)
f2(*args, **kw)
答案:

f1(1,2)  # a=1 b=2 c=0 arg=() kw={}
f1(1,2,c=3)   #a=1 b=2 c=3 arg=() kw={}
f1(1,2,3,'a','b')  #a=1 b=2 c=3 arg=('a','b') kw={}
f1(1,2,3,'a','b',x=99)  #a=1 b=2 c=3 arg=('a','b') kw={'x':99}
f2(1,2,d=99,ext=None)  #a=1 b=2 c=0 d=99 kw={'ext':None}
f1(*args, **kw)  #a=1 b=2 c=3 arg=(4,) kw= {'d':99, 'X':'#'}
f2(*args, **kw)  #a=1 b=2 c=3 d=99 kw = {''X':'#'}

考察知识点:python 操作符**与*的用法

(1) 运算符

**两个乘号就是乘方,比如2**4,结果就是2的4次方,结果是16
一个乘号*,如果操作数是两个数字,就是这两个数字相乘,如2*4,结果为8
*如果是字符串、列表、元组与一个整数N相乘,返回一个其所有元素重复N次的同类型对象,比如"str"*3将返回字符串"strstrstr"

(2) 函数形参

如果是函数定义中参数前的*表示的是将调用时的多个参数放入元组中,**则表示将调用函数时的关键字参数放入一个字典中
如定义以下函数
def func(*args):print(args)
当用func(1,2,3)调用函数时,参数args就是元组(1,2,3)
定义以下函数
def func(**args):print(args)
当用func(a=1,b=2)调用函数时,参数args将会是字典{'a':1,'b':2}

(3) 函数调用

如果是在函数调用中,*args表示将可迭代对象扩展为函数的参数列表
args=(1,2,3)
func=(*args)
等价于函数调用func(1,2,3)
函数调用的**表示将字典扩展为关键字参数
args={'a':1,'b':2}
func(**args)
等价于函数调用 func(a=1,b=2)

补充:

函数def f2(a, b, c=0, *, d, **kw) 中隔开符*,在python2.7中报错,在3.4中可识别。

赋值给arg的元组中只有一个元素时,注意多一个逗号,如arg=(4,)


发布了392 篇原创文章 · 获赞 492 · 访问量 241万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览