函数基础——形参和实参
文章目录函数参数的两大分类形参和实参的具体使用位置参数关键字参数默认参数可变长参数*号和**号在实参中的使用组合使用函数参数的两大分类形式参数:在函数定义阶段括号内声明的参数就叫形式参数,简称"形参",形参本质就是一个变量名,用来接收外部传来的值。def func(a,b):pass# 这里的a和b即形式参数,形参实际参数:在函数调用阶段括号号内传入的值,就叫实际参数,简称"实参",值可以是常量、
函数参数的两大分类
- 形式参数:在函数定义阶段括号内声明的参数就叫形式参数,简称"形参",形参本质就是一个变量名,用来接收外部传来的值。
def func(a,b):
pass
# 这里的a和b即形式参数,形参
- 实际参数:在函数调用阶段括号号内传入的值,就叫实际参数,简称"实参",值可以是常量、变量、表达式或三者的组合。
func(1, 2)
# 这里的1和2就是实际参数
-
形参和实参的关系:
形参相当于变量名,实参相当于变量值;两者在函数调用阶段临时绑定,函数运行结束立马断开联系。
强调:形参的表现形式就一种,实参的表现形式有多种。
形参和实参的具体使用
位置参数
从左往右依次写入的数据就是位置参数。
- 位置形参:在定义函数的时候,从左往右依次写入的变量名就是位置形参。
- 位置实参:在函数调用阶段,从左往右依次写入的变量值就是位置实参。
- 位置形参和位置实参的关系:位置实参从左往右依次传递给位置实参(一一对应)。
练习:
# 写一个可以比较两个数字大小的函数,返回最大值
def my_max(a, b):
print(a, b)
if a > b:
return a
else:
return b
res = my_max(1, 2)
print(res)
my_max(b=1, a=2) # 关键字参数
通过形参名=变量值的形式传递
关键字参数
通过 形参名=变量值(key=value)的形式传值的是关键字参数。
- 关键字形参:在函数定义阶段,参数有默认值时才使用。
- 关键字实参:在函数调用阶段,通过k:v形式进行传值。
强调:在调用函数时,实参也可以是按位置或按关键字的混合使用,但必须保证关键字参数在位置参数后面,且不可以对一个形参重复赋值
默认参数
在函数定义阶段,就已经为形参赋值,这类形参称为默认参数。
注意:
- 默认参数必须在位置参数之后。
- 默认参数的值在函数定义阶段被赋值一次。
- 默认参数的值通常应设置为不可变类型。
- 在调用阶段,如果为默认参数传递值,就使用传的值,如果没有传值,就使用默认值。
练习1:用户注册功能
def register(name, age, gender='male'):
print('%s:%s:%s' % (name, age, gender))
register('mary',18,'female') # 为默认参数传值了,就使用所传的值
练习2:
x = 100
def index(a, b, c=x):
print(a, b, c)
x = 200
index(1, 2)
# 结果c的值为100,因为默认参数在函数定义的时候已经确定了
可变长参数
在函数调用阶段,实参的个数不固定,如果要传很多,就不能在定义阶段挨个对应,需要用到可变长参数。
-
可变长的位置参数:如果在最后一个形参的前面加上*号,就表示这个参数为可变长的位置参数,在调用函数时,溢出的位置实参,都会被该参数接收,以元组的形式保存下来赋值给该形参。
def index(x, y, *a): print(x, y) print(a) index(1, 2, 3, 4, 5, 6, 7, 8) # x = 1 y = 2 a = (3,4,5,6,7,8)
-
可变长的关键字参数:如果在最后一个形参的前面加上**号,就表示这个参数为可变长的关键字参数,在调用函数时,溢出的关键字实参,都会被该参数接收,以字典的形式保存下来赋值给该形参。
def index(a, **x): print(x) index(a=1, b=2, c=3) # x = {'b': 2, 'c': 3}
-
可变长的位置参数和关键字参数同时使用:
''' - 默认参数只要不放在**后面都可以 - *号后面和**号后面的变量名可以任意命名,但是,在python中推荐使用 *args => arguments 位置参数 **kwargs => keyword arguments 关键字参数 def func(a, b, c, *args, **kwargs): pass '''
*号和**号在实参中的使用
- *号在实参中的使用
def index(a, b, c):
print(a, b, c)
l = [11, 22, 33]
index(*l) # 等同于index(11, 22, 33)
- **号在实参中的使用
def func(username, password):
print(username, password)
d = {'username': 'mark', 'password': 222}
func(**d) # 等同于func(username='mark',password=222)
func(username='mark', password=222)
组合使用
以上所有参数可以任意组合使用,但定义顺序必须是:位置参数、默认参数、*args、**kwargs。
更多推荐
所有评论(0)