Python函数参数传递方式及注意事项
发布时间:2023-06-22 18:13:40
Python中函数参数传递方式有四种,分别是传值调用、传址调用、可变长参数和关键字参数。下面我们来逐一分析。
1. 传值调用
在 Python 中,数据类型可以分为可变数据类型和不可变数据类型。不可变数据类型包括数字、字符串和元组,而可变数据类型包括列表、字典和集合。在传值调用中,函数参数传递的是实参的值,而不是实参本身,即在函数内对参数进行修改,并不会影响到实参。
举个例子:
def foo(a):
a += 1
print('参数的值为:', a)
n = 10
foo(n)
print('函数外的值为:', n)
输出结果为:
参数的值为: 11 函数外的值为: 10
可以看出,在函数内部对参数进行修改,并不会影响到实参。
2. 传址调用
在传址调用中,函数参数传递的是实参的地址,在函数内对参数进行修改会影响到实参。
举个例子:
def foo(a):
a[0] = 'hello'
print('参数的值为:', a)
s = ['world']
foo(s)
print('函数外的值为:', s)
输出结果为:
参数的值为: ['hello'] 函数外的值为: ['hello']
可以看出,在函数内部对参数进行修改,影响到了实参。
3. 可变长参数
在 Python 中,我们可以使用可变长参数来传递不定数量的参数,包括位置参数和关键字参数。
位置参数
位置参数就是使用 *args 来传递不定数量的位置参数,它会将所有的位置参数打包成一个元组传递给函数。
举个例子:
def foo(*args):
print('参数的值为:', args)
foo(1, 2, 3)
foo(4, 5)
输出结果为:
参数的值为: (1, 2, 3) 参数的值为: (4, 5)
关键字参数
关键字参数就是使用 **kwargs 来传递不定数量的关键字参数,它会将所有的关键字参数打包成一个字典传递给函数。
举个例子:
def foo(**kwargs):
print('参数的值为:', kwargs)
foo(name='Tom', age=20)
foo(city='Beijing')
输出结果为:
参数的值为: {'name': 'Tom', 'age': 20}
参数的值为: {'city': 'Beijing'}
4. 关键字参数
关键字参数就是指在函数调用时,指定参数的名称和值,这样可以使代码更加可读性强。
举个例子:
def foo(name, age, city):
print('name:', name)
print('age:', age)
print('city:', city)
foo(name='Tom', age=20, city='Beijing')
输出结果为:
name: Tom age: 20 city: Beijing
注意事项:
1. 传值调用和传址调用的区别需要格外注意,避免在修改参数时产生不必要的错误。
2. 在使用可变长参数或关键字参数时,需要遵守函数调用的规则,传递正确的参数。
3. 在使用关键字参数时,需要确保传递的参数名称和函数定义中的名称相同。
4. 在编写代码时,应该遵循 Python 的命名规范,避免使用中文拼音等不规范的写法。
