1、位置参数
函数调用时,根据函数定义的参数(形参)的 位置 来传递参数。第1个实参赋值给第1个形参,第1个实参赋值给第2个形参 。
def mul(a,b,c):
print(a*b*c)
def welcome(username):
print('欢迎',username,'光临')
# 调用时,根参数的位置传递参数
mul(1,2,3)
welcome('郭靖')
运行结果:
6
欢迎 郭靖 光临
2、关键字参数
函数调用时,通过 键-值
方式为函数形参传值,不用按照位置的顺序为函数形参传值。
def fn (a ,b,c):
print('a =',a)
print('b =',b)
print('c =',c)
# 调用时,使用 键-值 方法为函数指定每个形参的参数
fn( b=2 , c=3 , a=1)
运行结果:
a = 1
b = 2
c = 3
3、给形参指定默认值
指定了默认值以后,如果用户传递了参数,则默认值没有任何作用;如果用户没有传递,则默认值就会生效。
def fn (a = 1 ,b = 2 ,c = 3):
print('a =',a,',b =',b,',c =',c)
fn( 2 , 4 , 6) # a = 2 ,b = 4 ,c = 6
fn(2) # a = 2 ,b = 2 ,c = 3
4、 位置参数和关键字参数混用
1)混合使用时,必须将 位置参数 写到前面,关键字参数 不用按照顺序来指定。
def fn(a = 1 ,b = 2 ,c = 3):
print('a =',a)
print('b =',b)
print('c =',c)
调用方式:
fn(1,2,c=3)
fn(1,c=3,b=2) # 位置参数的值在前面,关键字参数的值在后面
2)混用使用时,每个参数只能接收一个值,不可重复。
fn(1,a=3) # 参数 a 接收到两个值,所以报错:multiple values for argument 'a'
5、函数形参的重新赋值
示例1:(修改变量)
在函数中对形参进行重新赋值,不会影响其他的变量。(修改变量)
def fn(a) :
a=20
print('a =',a)
c = 10
fn(c)
print('c =',c)
运行结果:
a = 20
c = 10
示例2:(修改对象)
a是一个列表,尝试修改列表中的元素,
如果形参执行的是一个对象,当我们通过形参去修改对象时,
会影响到所有指向该对象的变量。
def fn(a) :
a[0]=50
print('a =',a)
c = [10,20,30]
fn(c)
print('c =',c)
运行结果:
a = [50, 20, 30]
c = [50, 20, 30]
说明,
修改列表 c 中的数据,则函数内 和 函数外 对c的引用都同时改变。
参数是可变对象
示例3:
当参数是可变对象, 为了防止函数内对形参的对象进行修改,在调 用时,传入对象的复本,或对象的切片。
def fn(a) :
a[0]=50
print('a =',a)
c = [10,20,30]
fn(c.copy()) # 复本
fn(c[:]) # 切片
print('c =',c)
运行结果:
a = [50, 20, 30] # 函数内,形参值发生变化
a = [50, 20, 30]
c = [10, 20, 30] # 函数外,形参值未发生变化