一、参数的概念
参数指的是函数在定义时,接受外部传入的数据的变量,供函数内部使用。Python中的函数可以接受多个参数,其中有些必选,有些可选;有些是位置参数,有些是关键字参数。
二、位置参数和关键字参数
在Python中,函数的参数可以分为位置参数和关键字参数。
位置参数指的是函数调用时按照定义的顺序传入的参数,它们与函数中形参的位置一一对应。例如,下面这个函数接受两个位置参数x和y:
def add(x, y): return x + y print(add(2, 3)) # 输出5
关键字参数指的是函数调用时用参数名来传递的参数,这种方式不依赖于参数的位置。关键字参数需要在函数定义时设定默认值,否则在调用时必须填写参数,否则将会抛出异常。例如:
def person_info(name, age, sex='男'): print('姓名:', name) print('年龄:', age) print('性别:', sex) person_info('张三', 20) # 输出:姓名:张三,年龄:20,性别:男 person_info('李四', 22, sex='女') # 输出:姓名:李四,年龄:22,性别:女
要注意的是,关键字参数必须在位置参数之后,否则会抛出异常:
person_info(name='张三', age=20, '男') # 抛出异常
三、默认参数
当函数参数有默认值时,调用函数时可以省略这些参数。默认参数可以减少函数参数的数量,在某些场合可以提高代码的可读性。例如:
def print_info(name, age=18, sex='男'): print('姓名:', name) print('年龄:', age) print('性别:', sex) print_info('张三') # 输出:姓名:张三,年龄:18,性别:男 print_info('李四', 20) # 输出:姓名:李四,年龄:20,性别:男 print_info('王五', 22, '女') # 输出:姓名:王五,年龄:22,性别:女
需要注意的是,默认参数必须指向不变对象,否则会出现意想不到的错误:
def test(num, L=[]): L.append(num) return L print(test(1)) # 输出[1] print(test(2)) # 输出[1, 2],而不是预期的[2]
这是因为在Python中,函数默认参数的值是在函数定义的时候生成的,而不是在调用的时候生成。因此,默认参数指向的不变对象(比如list、tuple、string等)在函数的多次调用中会被多次修改,从而导致意想不到的结果。
四、可变长参数
在Python中,可变长参数是指函数在定义时可以接受一定数量的位置参数或关键字参数。
1、可变长位置参数
可变长位置参数使用星号(*)来表示,可以接收任意数量的位置参数,并将它们作为元组传递给函数。例如:
def test(*args): print(args) test(1, 2, 3) # 输出(1, 2, 3)
2、可变长关键字参数
可变长关键字参数使用两个星号(**)表示,在函数内部将其作为字典处理。例如:
def test(**kwargs): print(kwargs) test(a=1, b=2, c=3) # 输出{'a': 1, 'b': 2, 'c': 3}
需要注意的是,可变长位置参数和可变长关键字参数必须在位置参数之后,否则会报错:
def test(a, b, *args, **kwargs): print(a, b, args, kwargs) test(1, 2, 3, 4, c=5, d=6) # 输出1, 2, (3, 4), {'c': 5, 'd': 6}
五、函数参数的传递方式
函数参数的传递方式分为值传递和引用传递。在Python中,函数参数的传递方式是值传递。
值传递是指将实参的值传递给形参,形参中的操作不会影响实参的值。例如:
def test(x): x = 10 a = 5 test(a) print(a) # 输出5
而引用传递是指将实参的引用传递给函数,函数中的操作会修改实参的值。在Python中,可变对象(如list、dict)是引用传递,而不可变对象(如int、str、tuple)是值传递。
六、总结
Python函数中的参数有多种类型,包括位置参数、关键字参数、默认参数、可变长参数等。在使用时需要注意参数的传递方式,以确保函数能够正常运行。
完整代码如下:
# 位置参数和关键字参数 def add(x, y): return x + y print(add(2, 3)) # 输出5 def person_info(name, age, sex='男'): print('姓名:', name) print('年龄:', age) print('性别:', sex) person_info('张三', 20) # 输出:姓名:张三,年龄:20,性别:男 person_info('李四', 22, sex='女') # 输出:姓名:李四,年龄:22,性别:女 # 默认参数 def print_info(name, age=18, sex='男'): print('姓名:', name) print('年龄:', age) print('性别:', sex) print_info('张三') # 输出:姓名:张三,年龄:18,性别:男 print_info('李四', 20) # 输出:姓名:李四,年龄:20,性别:男 print_info('王五', 22, '女') # 输出:姓名:王五,年龄:22,性别:女 # 可变长参数 # 可变长位置参数 def test(*args): print(args) test(1, 2, 3) # 输出(1, 2, 3) # 可变长关键字参数 def test(**kwargs): print(kwargs) test(a=1, b=2, c=3) # 输出{'a': 1, 'b': 2, 'c': 3} # 函数参数的传递方式 # 值传递 def test(x): x = 10 a = 5 test(a) print(a) # 输出5 # 引用传递 def test(l): l.append(4) lst = [1, 2, 3] test(lst) print(lst) # 输出[1, 2, 3, 4]
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/158195.html