函数介绍
函数是带有名字的代码块,可以执行特定的任务。当我们需要执行这一特定任务时,调用该函数。当然如果需要多次执行该任务,只需多次调用该函数即可。定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。
形参与实参
函数定义的时候使用的参数叫形参,函数调用的时候使用的参数叫实参。
def f(n): # 在函数定义过程中使用的参数是形参:n
print('The argument is:',n) #该函数仅仅打印一句话
return None # 函数反馈空值None
# 以下为函数的调用,支持多种数据类型:
>>> f(100) # 实参为Number型
The argument is: 100
>>> f('It is funny') # 实参为str型
The argument is: It is funny
>>> f((1,2,3)) # 实参为tuple型
The argument is: (1, 2, 3)
>>> f([1,2,3]) # 实参为list型
The argument is: [1, 2, 3]
>>> f({'name':'Adam','age':18}) # 实参为dict型
The argument is: {'name': 'Adam', 'age': 18}
在函数定义的时候,形参可以有默认值,以上代码可以修改为:
def f(n=1): # 形参n的默认值为1,表示在函数调用不输入实参时,实参则取默认值
print('The argument is:',n) #该函数仅仅打印一句话
return None # 函数反馈空值None
# 函数调用:
>>> f() # 可以不输入实参直接调用函数,实参则取默认值
The argument is: 1
实参的类型
1 位置实参
函数调用中的实参与函数定义中形参以相同的顺序关联,这种关联方式称为位置实参。使用位置实参调用函数时,如果实参的顺序不正确,结果可能出乎意料,乃至出错。
# 函数定义
def f(name,age):
print(name)
print(age)
# 函数调用
>>> f('Cathy',18)
Cathy
18
2 关键字实参
关键字实参,在函数调用时直接将实参的名称与值关联起来,因此向函数传递的实参不会混淆。关键字实参可以让函数调用无需考虑实参的顺序。
# 函数定义
def f(name,age):
print(name)
print(age)
# 函数调用
>>> f(age=18,name='Cathy')
Cathy
18
3 任意数量的实参
3.1 带*号的形参将任意数量的实参接收为tuple类型
# 函数定义
def f_lt(*n):
print(type(n)) # *号将传进来的参数变成了tuple类型
for i in n:
print(i)
# 函数调用
# 第一次调用
f_lt(1,2,3,4,5)
print('_ '*20)
# 第二次调用,参数为list类型
l = [1,2,3,4,5]
f_lt(*l)
print('_ '*20)
# 第三次调用,参数为tuple类型
t = (1,2,3,4,5)
f_lt(*t)
print('_ '*20)
# 返回结果
<class 'tuple'>
1
2
3
4
5
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<class 'tuple'>
1
2
3
4
5
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<class 'tuple'>
1
2
3
4
5
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
3.2 带**号的形参将任意数量的关键字参数接收为dict类型
# 函数定义
def f_d(**kw):
print(type(kw)) # **号将传进来的参数变成了dict类型
print(kw)
for k,v in kw.items():
print(k,': ',v)
# 函数调用
# 第一次调用
f_d(name='Adam',age=18)
print('_ '*20)
# 第二次调用,参数为dict类型
d = {'name':'Bob','Age':19}
f_d(**d)
print('_ '*20)
# 返回结果
<class 'dict'>
{'name': 'Adam', 'age': 18}
name : Adam
age : 18
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<class 'dict'>
{'name': 'Bob', 'Age': 19}
name : Bob
Age : 19
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _