Python函数参数的使用
Python是一种面向对象的程序设计语言,它不仅能够灵活地支持数据结构、函数和模块等基础语言特性,也能够支持各种应用及各种编程技巧。其中函数作为Python最常用的基础语言特性之一,在Python程序设计中占有重要的位置。Python函数可以是最基本的函数,也可以是带有参数的函数。本文将会详细地介绍Python函数参数的类型、传递方式、默认值、可变参数和关键字参数等问题。
一、Python函数参数的类型
在Python函数中,函数参数的类型有两种,一种是位置参数,另一种是关键字参数。
1、位置参数
位置参数是指在函数定义中所指定的参数,即在函数定义时指定的参数名,是Python函数中最常见的参数类型。示例代码如下:
def add(x, y):
return x+y
在这个函数定义中,x和y是位置参数。
调用该函数的方式包括:
add(1, 2) add(x=1, y=2) add(y=2, x=1)
这些调用都是等效的。
2、关键字参数
关键字参数是指在调用函数时指定的参数名,以及与它们对应的实参。关键字参数的顺序可以是随意的。示例代码如下:
def add(x, y):
return x+y
调用该函数的方式包括:
add(1, y=2) add(x=1, y=2)
二、Python函数参数的传递方式
Python函数中的参数有两种传递方式,一种是值传递,另一种是引用传递。值传递是指函数的形参在被调用时接收到的是实参的一个副本,即形参的值与实参的值是两个不同的对象。引用传递则是指函数的形参在被调用时接收到的是实参的一个引用,即形参和实参是同一个对象。Python函数中默认是值传递,但是可变对象作为参数时则是引用传递。下面,我们来看看这些传递方式在Python中的具体表现。
1、值传递
在Python中,对于不可变类型的参数,函数内部的操作不会对调用之前的变量产生任何影响。示例代码如下:
def add(x):
x = x + 1
return x
x = 1
add(x)
print(x) # 打印结果为1
在这个例子中,x在函数中被加1之后,返回到函数外部的调用者并不会对外部的变量产生影响。
2、引用传递
对于可变类型的参数,在函数内部进行的所有修改都会对函数外部调用这个变量的位置产生影响。示例代码如下:
def add(x):
x.append(1)
return x
x = []
add(x)
print(x) # 打印结果为[1]
在这个例子中,函数将参数的最后一个元素置为1。由于x是可变类型的列表,所以函数执行操作后,也就改变了函数外部的变量。
三、Python函数参数的默认值
在Python中,函数参数可以拥有默认值。如果参数在函数被调用时没有被赋值,那么将会使用这个参数的默认值。我们在函数定义时可以通过为参数赋值来为这个参数指定一个默认值。示例代码如下:
def add(x, y=1):
return x+y
print(add(1)) # 打印结果为2
print(add(1, 2)) # 打印结果为3
在这个例子中,y有默认值,所以在调用add函数时,不必为变量y指定实参,直接提供x即可。
四、Python函数参数的可变参数
我们在Python中可以定义可变长度的参数表用于处理一个函数不确定的参数数量。可变参数需要在函数调用的时候传递,传递的元素被包装在元组或列表中。Python提供了两种形式让我们能够声明函数的可变参数:*args和**kwargs。
1、*args
使用*args表示任意数量的非关键字参数,这些参数将会被包装成一个元组。示例代码如下:
def add(*args):
result = 0
for arg in args:
result += arg
return result
print(add(1, 2, 3)) # 打印结果为6
print(add(1, 2, 3, 4)) # 打印结果为10
在这个例子中,*args声明了一个可变参数列表,用于保存不确定数量的参数,并将参数加起来返回。
2、**kwargs
使用**kwargs表示任意数量的关键字参数,这些参数将会被包装成一个字典。示例代码如下:
def add(**kwargs):
result = 0
for key in kwargs:
result += kwargs[key]
return result
print(add(a=1, b=2, c=3)) # 打印结果为6
print(add(a=1, b=2, c=3, d=4)) # 打印结果为10
在这个例子中,**kwargs声明了一个可变参数字典,用于保存不确定数量的关键字参数,并将参数加起来返回。
五、Python函数参数的关键字参数
Python提供了关键字参数的语法,让函数能够接受仅指定方式传递的参数。这种语法是在调用函数时使用而不是在函数定义中。关键字参数必须有默认值,否则会出现TypeError异常。示例代码如下:
def add(a=1, b=2, c=3):
return a + b + c
print(add()) # 打印结果为6
print(add(a=4)) # 打印结果为9
print(add(a=4, b=5)) # 打印结果为12
print(add(a=4, b=5, c=6)) # 打印结果为15
在这个例子中,使用add()执行函数调用称为调用重载,这是因为函数add含有默认参数,因此即使没有参数也可以被调用。其他调用都指定了至少一个参数。
总结
Python函数参数的使用方法与其他编程语言类似,但是在语法上还是有些不同的地方。本文主要介绍Python函数参数的类型、传递方式、默认值、可变参数和关键字参数等问题,对于想要变得熟练 Python 编程的读者来说是一篇非常不错的指南。
