语法
def functionname( parameters ): "函数_文档字符串" function_suite return [expression]
参数问题
-
必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
必须传入参数
#!/usr/bin/python # -*- coding: UTF-8 -*- #可写函数说明 def printme( str ): "打印任何传入的字符串" print str; return; #调用printme函数 printme();
结果如下:
Traceback (most recent call last): File "test.py", line 11, in <module> printme(); TypeError: printme() takes exactly 1 argument (0 given)
-
关键字参数
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
针对以上这句话,有几种情况:
def show(str1,str2,str3): """打印参数""" print(str(str1)+'-'+str(str2)+'-'+str(str3))
1.所有参数均为关键字参数
#此处的参数均为关键字参数,它们的位置可以不按形参的顺序
show(str2=2,str3=3,str1=1)
2.参数中既有位置参数(其实就是没有指定的普通形参)也有关键字参数
#此处运行报错
show(str3=3,1,2)
#运行成功,正常输出
show(1,2,str3=3)
小结:如果参数中有位置参数也有关键字参数时,关键字参数必须放在所有位置参数之后,包括定义形参时也要按照这个原则
-
默认参数(缺省参数)
在定义形参时已经赋值,赋值可以为空。
#可写函数说明 def printinfo( name, age = 35 ): "打印任何传入的字符串" print "Name: ", name; print "Age ", age; return; #调用printinfo函数 printinfo( age=50, name="miki" ); printinfo( name="miki" );
-
不定长参数
1.以一个*开始的参数,代表一个任意长的元组(侧重于不知道参数数量):
def param(*str): print(str)
param(1, 2, 3, 4, 5, 6, 7, 'hello', 'panfei')
2.一个以**开始的参数,代表一个字典(侧重于有键值对):
def multiple(arg,*args,**dictargs): print('输出arg:') print(arg) #打印args print('输出*args:') for value in args: print(value) #打印dict类型的不定长参数 args print('输出**args:') for key in dictargs: print(key) print(dictargs[key]) multiple(1,'a',True,name='Amy',age=12,)
结果:
如以上结果我们可以得出结论:
*args:按照顺序存放所有没有命名的实参
**args:存放所有已经命名的实参