1.形式参数(Formal Parameters)和实际参数(Actual Parameters)是函数或方法定义和调用过程中的两个重要概念。举个例子,在下面的greet函数中,当我们调用greet(“李白”)时,"李白"就是实际参数,name是一个形式参数。这个实际参数,被用来替换函数定义中的形式参数,以执行函数操作。
# @Author : 小红牛
# 微信公众号:WdPython
简单来说,形式参数是函数或方法定义的参数列表,用于规定接收输入的方式;实际参数是在调用函数或方法时传递的值,用于执行函数或方法的操作。
def greet(name):
print(f'大家好,我是{name}哥哥')
# 调用函数
greet('李白') # 输出:大家好,我是李白哥哥
2.位置参数(Positional Arguments):位置参数是按照函数定义时的顺序传递的参数。在调用函数时,必须按照定义时的顺序传递参数。位置参数是函数的基础,通常用于定义函数的主体逻辑。这里还说明参数的个数传参的时候要相同,比如下面的greet函数有两个参数,传参的时候也要传两个,实参和形参数量保持一致,且第一个参数是name,第二个参数是age,顺序不能错乱,参数的类型也要一致,不然解释器容易报错。
def greet(name, age):
print(f'大家好,我是{name}哥哥,今年{age}岁')
# 调用函数时,必须按照定义时的顺序传递参数
greet('李白', 18) # 输出:大家好,我是李白哥哥,今年18岁
# 传参顺序不一样的输出
greet(18, '李白') # 大家好,我是18哥哥,今年李白岁
3.默认参数(Default Arguments):默认参数是在函数定义时为参数设置一个默认值。如果在调用函数时没有提供该参数的值,那么将使用默认值。默认参数可以减少函数调用的复杂性,同时提供一种灵活的方式来处理未提供的参数值。下面的name=‘李白’, age=18就是两个默认参数。
def greet(name='李白', age=18):
print(f'大家好,我是{name}哥哥,今年{age}岁')
# 1.调用函数时,不传递任何参数,使用默认值
greet() # 输出:大家好,我是李白哥哥,今年18岁
# 2.调用函数时,只传递一个参数,其他参数使用默认值
greet('杜甫') # 输出:大家好,我是杜甫哥哥,今年18岁
# 3.查询参数有默认值,返回值是一个元组
print(greet.__defaults__) #输出 ('李白', 18)
混合参数的使用的小提醒: 当定义一个有默认值参数的函数时,有默认值的参数必须位于所有,没有默认值参数的后面。如下ab参数,放在默认参数name='李白’的前面就不会报错,反之放在后面就会有语法错误。
# 不会报错
def greet(a, b, name='李白', age=18):
# 会报错
def greet(name='李白', age=18, a, b):
4.关键字参数(Keyword Arguments):关键字参数,是在调用函数时明确指定参数的名称和值。在函数定义中,可以通过为参数设置默认值来确保它们有默认值,但在调用函数时,可以使用关键字参数来明确指定要使用的值。关键字参数提供了更大的灵活性,允许在调用函数时传递特定的值,而不是使用默认值。下面例子中,func1函数有4个参数abcd,在调用func1的时候指定了关键字参数d=4,指定的实参和形参,写法上都要放在最后面,除非你把所有的参数,都传入的是关键字参数,这样可以无序传参 。func2函数错误的原因,是因为形参c,如果是关键字参数的时候,一定要放在参数的最后面位置,不然报错。所以func3是对func2错误的改写。只需要把指定的关键字参数c,放在最后面即可。即函数含有混合传参时,关键字参数必须位于所有的位置参数之后。
print('1.正确的写法'.center(30, '-'))
def func1(a, b, c, d):
print('参数的值:', a, b, c, d)
func1(1, 2, 3, d=4) # 参数的值:1 2 3 4
func1(c=30, a=10, b=20, d=40) # 参数的值:10 20 30 40
print('2.错误的写法'.center(30, '-'))
def func2(a, b, c, d):
print('参数的值:', a, b, c, d)
func2(1, 2, 4, c=3)
# 输出 TypeError: func2() got multiple values for argument 'c'
print('3.错误的改对的方法'.center(30, '-'))
def func3(a, b, d, c):
print('参数的值:', a, b, c, d)
func3(1, 2, 4, c=3) # 参数的值:1 2 3 4
5.动态参数(Variable-length Arguments):动态参数允许函数接受可变数量的参数。在Python中,有两种动态参数类型:args和**kwargs。args用于接收任意数量的位置参数,**kwargs用于接收任意数量的关键字参数。这些动态参数可以与其他普通参数一起传递给函数,以实现更灵活的函数调用。
# 动态参数示例(*args)
def sum_numbers(*numbers):
total = 0
for num in numbers:
total += num
return total
# 调用函数时,传递任意数量的数字参数
result = sum_numbers(1, 2, 3)
print(result) # 输出:6
result2 = sum_numbers(1, 2, 3, 4, 5)
print(result2) # 输出:15
**kwargs的示例用法
def print_info(**kwargs):
print(kwargs.items())
for key, value in kwargs.items():
print(f"{key}: {value}")
# 调用函数并传递参数
print_info(name="李白", age=18, city='唐')
输出内容:
dict_items([('name', '李白'), ('age', 18), ('city', '唐')])
name: 李白
age: 18
city: 唐
完毕!!感谢您的收看
----------★★历史博文集合★★----------