Python当如输入的参数个数不能确定时,会定义不定形参的函数,即多变形参函数。这样定义的函数可以在调用函数时决定函数参数的个数,更加灵活好用。
1.不定参数:不确定调用函数时输入几个参数,所以使用不定参数函数,格式如下:
def functionname([formal_args,] *args, **kwargs):
"函数描述文件"
function_suite
return [expression]
2.参数时多变形参和一般参数共存的情况,这个时候一般参数要写多变形参的前面
def fc_sum(arg1, *args): #不定参数写法是“*参数名”,其实不定参数是个元组
"将所有参数求和"
sum = agr1
for i in args: #因为不定参数底层是个元组,所以可以遍历参数
sum += i
print("这是所有参数的求和:%f"%sum)
# 调用fc_sum函数
fc_sum(1,2,3,4,5,6,7,8,9,10,11.1,12.2) #传入的参数类型自定义输入
fs_sum(1) #有可变形参可以不传入参数,可变形参参数至少0个即可。
=================================================================================
注意:这里如没有arg1时,默认传入的所有参数都是可变参数,否则要将第一位的1分配给arg1
这是所有参数的求和:78.300000
这是所有参数的求和:1.000000
==================================================================================
3.参数只有多变形参的情形
def fc_sum( *args): #注意不定参数和固定参数可以混合用 ,也可以单独用,传参时按顺序分配
"不定参数求和"
sum = 0
for i in args: #因为不定参数底层是个列表,所以可以遍历参数
sum += i
print("这是所有参数的求和:%f"%sum)
# 调用fc_sum函数
fc_sum(1,2,3,4,5,6,7,8,9,10,11.1,12.2)
==================================================================================
这是所有参数的求和:78.300000
==================================================================================
4.多变形参还有使用两个**的情况:两个星号 ** 的参数会以字典的形式传入
def functionname([formal_args,] **var_args_dict ):
"函数_文档字符串"
function_suite
return [expression]
===============================================================================
def p2(arg1, **vardict):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
print (vardict)
# 调用printinfo 函数
p2(1, a=2, b=3)
==========执行结果如下:==========================================================
{'a': 2, 'b': 3}
5.多变形参拆包的问题
def dpack(arg1,*args,**argdic): # *表示参数用元组存储,**表示参数用字典存储
print(arg1)
print(args)
print(argdic)
tuple1 =("hello",123,"world")
dic1={"name":"tom","age":23,"address":"china"}
#调用函数dpack,分别将*的参数用元组导入,**的参数用字典导入
'''
因为这个时候参数不是一一导入,所以如果导入元组当参数给*args,要用*tuple1来拆包
不然单独将元组tuple1做为参数,函数识别不了。同理**dic1也是将字典拆包后每个元素
做为参数传给函数。用拆包的形式,可以将参数封装好,用起来更加方便
'''
dpack(a=1,*tuple1,**dic1)
====================================================
hello
(123, 'world')
{'a': 1, 'age': 23, 'name': 'tom', 'address': 'china'}
统一声明:关于原创博客内容,可能会有部分内容参考自互联网,如有原创链接会声明引用;如找不到原创链接,在此声明如有侵权请联系删除哈。关于转载博客,如有原创链接会声明;如找不到原创链接,在此声明如有侵权请联系删除哈。