1.形参 函数定义处的参数称为形参,函数调用处的参数是实参,函数调用的本质是实参把值复制了一份给形参,形参的改变不影响实参。
实例:
# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:25
# @File : function2.py
# @Software : PyCharm
def swap(x, y):
temp = x
x = y
y = temp
return
x = 10
y = 7
swap(x,y)
print("x=",x,"y=",y)
运行结果:
x= 10 y= 7
2.默认参数 python可以设置默认参数,避免出现参数个数不匹配时的调用错误。 注意:必选参数必须在前,默认参数在后,否则Python的解释器会报错。
实例:
# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:32
# @File : function3.py
# @Software : PyCharm
def pow(x,n=2):
result = 1
while n > 0:
n -= 1
result = result * x
return result
print(pow(2))
print(pow(2,10))
运行结果:
4
1024
3.可变参数 在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
实例: 我们以数学题为例子,给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……。
# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:38
# @File : function4.py
# @Software : PyCharm
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
sum = calc(1,2,3,4,5)
print(sum)
运行结果:
55
4.关键字参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
实例:
# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:41
# @File : function5.py
# @Software : PyCharm
def person(name,gender,**keys):
print('name:', name, 'gender:', gender, 'other:', keys)
return
person('张三','男')
person('李四','女',age=20)
person('王五','男',age=22,city='西安')
#使用dict简化
map={'age':18,'ciy':'成都'}
person('赵六','男',**map)
运行结果:
name: 张三 gender: 男 other: {}
name: 李四 gender: 女 other: {'age': 20}
name: 王五 gender: 男 other: {'age': 22, 'city': '西安'}
name: 赵六 gender: 男 other: {'age': 18, 'ciy': '成都'}
5.命名关键字参数
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过keys检查。如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和age作为关键字参数。这种方式定义的函数如下:
# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:41
# @File : function5.py
# @Software : PyCharm
#注意:age和city都没有默认参数
def person(name, gender, *, age, city):
print('name:', name, 'gender:', gender, 'age:', age, "city:", city)
return
person('张三', '男') #错误,命名关键字参数必须传入参数名
person('张三', '男', age=18, city='武汉') #ok
person('李四', '男', age=18, zipcode='027') #错误,错误的参数名字
注意: 如果命名关键字参数具有默认值,调用时,可不传入参数。 如果命名关键字参数没有默认值,命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错。
# -*- coding: utf-8 -*-
# @Time : 2022/3/27 12:41
# @File : function5.py
# @Software : PyCharm
def person(name, gender, *, age=18, city='北京'):
print('name:', name, 'gender:', gender, 'age:', age, "city:", city)
return
person('张三', '男') #ok
person('李四', '男', age=18, zipcode='027') #错误,错误的参数名字
6.参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
实例:
# -*- coding: utf-8 -*-
# @Time : 2022/3/27 13:24
# @File : function6.py
# @Software : PyCharm
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
return
f1(1, 2, 3, 'a', 'b', x=100)
运行结果:
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 100}