函数参数
1.位置参数
定义形式:
deffunc(p1, p2, ...):pass
实例:
#位置参数,调用时传入的实参必须与形参一一对应(包括个数与位置)
defintroduce(name, age):print("I am {0}, and I am {1} years old.".format(name, age))
introduce("zhangsan", 18)
运行结果:
I am zhangsan, and I am 18 years old.
2.关键字参数
定义形式与位置参数相同
实例:
#正确的调用方式
introduce(name="lisi", age=20)
introduce(age=20, name="lisi")
introduce("lisi", age=20)
运行结果:
I am lisi, and I am 20 years old.
I am lisi, and I am 20 years old.
I am lisi, and I am 20 years old.
ps. 函数定义形式都是一样的,只是在调用的时候传入实参的时候形式不同:
1)若实参的个数与位置和形参都一样,则可以不必声明对应的形参名称。
2)若传参时顺序不同或想给后面的默认参数传参,则必须声明实参传给了哪个形参。
3.默认参数
定义形式:
默认参数必须位于普通参数的后面
def func(p1, p2=v2, p3=v3, ...):
func body
实例:
def introduce2(name, age, sex="boy", address="shanghai"):print("I am {0}, a {2}, and I am {1} years old, living in {3}".format(name, age, sex, address))
introduce2("zhangsan", 18)
introduce2("zhangsan", 18, "girl")
introduce2("zhangsan", 18, address="beijing")
introduce2(sex="girl", name="zhangsan", age=18)
运行结果:
I am zhangsan, a boy, and I am 18 years old, living in shanghai
I am zhangsan, a girl, and I am 18 years old, living in shanghai
I am zhangsan, a boy, and I am 18 years old, living in beijing
I am zhangsan, a girl, and I am 18 years old, living in shanghai
4.收集参数
当你不知道会有多少个参数传入进来的时候,可以使用收集参数将他们全部传入进来,也可以不传参。
1)普通收集参数
定义形式:
def func(*args):
func body
实例:
def introduce3(*args):print(type(args))print('Hello everyone, I am going to tell you something about myself')for i inargs:print(i)print('位置收集参数'.center(50,"#"))
introduce3()print('*'*30)
introduce3("zhangsan", 18)print('*'*30)
introduce3("zhangsan", 18, "boy")
运行结果:
######################位置收集参数######################
Hello everyone, I am going to tell you something about myself
******************************
Hello everyone, I am going to tell you something about myself
zhangsan
18
******************************
Hello everyone, I am going to tell you something about myself
zhangsan
18
boy
2)关键字收集参数
定义形式:
def func(**kwargs):
func body
实例:
print('关键字收集参数'.center(50,"#"))def introduce4(**kwargs):print(type(kwargs))for k,v inkwargs.items():print(k,'-----',v)
introduce4()print('*'*30)
introduce4(name="lisi", age=18, sex="man", hobby="music")
运行结果:
#####################关键字收集参数######################
******************************
name ----- lisi
age ----- 18
sex ----- man
hobby ----- music
5.解包参数
当你的普通参数位于一个列表中,或者关键字参数位于一个字典中,直接传入列表或字典只能代表一个参数,可以使用解包参数将它们的每一个元素传给不同的参数。
1)列表解包参数
定义形式:
调用函数时:func(*list)
实例:
print('列表解包参数'.center(50,"#"))
zhangsan= ["zhangsan", 18, "boy"]
introduce2(*zhangsan)print('*'*50)
introduce3(*zhangsan)
运行结果:
######################列表解包参数######################
I am zhangsan, a boy, and I am 18 years old, living in shanghai
**************************************************
Hello everyone, I am going to tell you something about myself
zhangsan
18
boy
2)字典解包参数
定义形式:
调用函数时:func(**dict)
实例:
print('字典解包参数'.center(50,"#"))
lisi={'name':'zhangsan','age':18,'sex':'man','hobby':'reading'}
introduce4(**lisi)
运行结果:
######################字典解包参数######################
name ----- zhangsan
age ----- 18
sex ----- man
hobby ----- reading
6.参数的混合使用
定义与调用顺序:普通位置参数,普通收集参数,默认参数,关键字收集参数
实例:
def stu(name, age, *args, sex="boy", **kwargs):print('Hi guys, I am happy to tell you about myself, my name is {0}, a {2}, {1} years old'.format(name, sex, age))for i inargs:print(i)for k,v inkwargs.items():print(k,'----',v)
stu("zhangsan",18)print('*'*30)
stu("lisi", 20, "girl")print('*'*30)
stu("lilei", 18, 'shanghai', 'freshman', hobby="dancing", state="single")
运行结果:
Hi guys, I am happy to tell you about myself, my name is zhangsan, a 18, boy years old
******************************
Hi guys, I am happy to tell you about myself, my name is lisi, a 20, boy years old
girl
******************************
Hi guys, I am happy to tell you about myself, my name is lilei, a 18, boy years old
shanghai
freshman
hobby ---- dancing
state ---- single
函数文档
定义形式:
deffunc(p1, p2, ...):'''func document
parameters statament
return statament'''func body
实例:
def stu(name, age, *args, sex="boy", **kwargs):'''this is the func document, where you can get help message
:param name: your name
:param age: your age
:param args: other info
:param sex: your sex
:param kwargs: other info
:return: print the the screen return none'''
pass
print(stu.__doc__)print('*'*30)
help(stu)
运行结果:
this is the func document, where you can get help message
:param name: your name
:param age: your age
:param args: other info
:param sex: your sex
:param kwargs: other info
:return: print the the screen return none
******************************
Help on function stu in module __main__:
stu(name, age, *args, sex='boy', **kwargs)
this is the func document, where you can get help message
:param name: your name
:param age: your age
:param args: other info
:param sex: your sex
:param kwargs: other info
:return: print the the screen return none