函数参数
在python中,函数调用时传递的参数可以分为两种类型:位置参数和关键字参数;
- 位置参数
- 关键字参数
位置参数
位置参数是最基本的参数传递方式。在调用函数时,位置参数必须按照函数定义时的顺序传递。位置参数在函数定义时没有指定参数名,只通过位置来匹配。
def add(a, b):
return a + b
result = add(3, 4) # 这里3和4就是位置参数
print(result) # 输出7
在这个例子中,a和b是位置参数,调用add函数时必须按照a, b的顺序传递两个参数。
关键字参数
关键字参数在函数调用时通过参数名来指定要传递的参数。这种方式不依赖于参数的顺序,但需要在函数调用时明确指定参数名和对应的值。
def greet(name, age):
print(f"Hello, {name}! You are {age} years old.")
greet(age=30, name="Alice") # 这里使用了关键字参数
在这个例子中,name和age是关键字参数。调用greet函数时,通过name=Alice和age=30明确指定了参数名和对应的值。注意这里参数的顺序和函数定义时的顺序不一致,但因为使用了关键字参数,所以仍然可以正确调用。
同时,关键字参数也可以和位置参数混合使用,但需要注意位置参数必须在关键字参数之前:
ef greet(name, age, greeting):
print(f"{greeting}, {name}! You are {age} years old.")
greet("Alice", 30, greeting="Hello") # 位置参数和关键字参数混合使用
特殊的位置参数
在Python中,args在函数定义中用于收集任意数量的位置参数为一个元组。这意味着你可以在调用函数时传递任意数量的位置参数,这些参数在函数内部将被收集为一个名为args的元组。
下面是一个使用args的简单例子:
- 例子1
def myfun2(*args):
for arg in args:
print(arg)
# 调用函数,传递不同数量的位置参数
myfun2(1, 2, 3) # 输出 1 2 3
myfun2(4, 5, 6, 7) # 输出 4 5 6 7
myfun2(8, 9) # 输出 8 9
在这个例子中,myfun2函数定义中的*args允许你传递任意数量的位置参数给函数。函数内部通过遍历args元组来打印每个参数。
值得注意的是,args只是一个通常的命名约定。实际上,你可以使用任何名称,只要在它前面加上*。例如,*parameters
- 例子2
def myfun2(*args):
print("有{}个参数".format(len(args)))
print("参数是:{}".format(args))
print("参数类型:{}".format(type(args)))
myfun2("333", 4, "56t5")
结果:
有3个参数
参数是:('333', 4, '56t5')
参数类型:<class 'tuple'>
- 例子3
def myfun3(*args, x , y):
#在Python中,*args在函数定义中用于收集任意数量的位置参数为一个元组。
# 这意味着你可以在调用函数时传递任意数量的位置参数,这些参数在函数内部将被收集为一个名为args的元组
print("有{}个参数".format(len(args)))
print("参数是:{}".format(args))
print("参数类型:{}".format(type(args)))
myfun3(1, 4, 6, x = 3 , y = 5)
结果:
有3个参数
参数是:(1, 4, 6)
参数类型:<class 'tuple'>
从以上函数可以得到当函数的参数中有args,以及其他参数时,其他参数需要传递位置参数,否则会被分为args参数中;
- *args返回参数是元组,如果想要返回字典需要用”**kwargs“;
def myfun4(**kwargs):
#在Python中,*args在函数定义中用于收集任意数量的位置参数为一个元组。
# 这意味着你可以在调用函数时传递任意数量的位置参数,这些参数在函数内部将被收集为一个名为args的元组
print("有{}个参数".format(len(kwargs)))
print("参数是:{}".format(kwargs))
print("参数类型:{}".format(type(kwargs)))
myfun4(a=1, b=4, c=6)
结果:
有3个参数
参数是:{'a': 1, 'b': 4, 'c': 6}
参数类型:<class 'dict'>
如有错误欢迎指正!