Python函数参数类型详解:位置参数、默认参数、可变参数和关键字参数

2025-01-01
来源:网络整理

函数参数类型

函数参数类型分为4种:

成都创新互联网公司网站建设公司是一家多年服务于网站建设、策划、设计、制作的公司。为用户提供网站设计、成都网站制作、成都网站设计、广告平台、成都网站建设公司选择成都创新互联网公司、贴吧满足企业需求、性价比高、满足企业需求的一站式服务不同层次的客户。欢迎来电咨询。

1、位置参数:调用函数时,根据函数定义的参数位置来传递参数。位置参数也可以称为必要参数,即调用函数时必须传递的参数。

当参数满足向函数传递必要参数的条件时,函数就可以正常执行:

add(1,2) #两个参数的顺序必须一一对应,且不能缺少一个参数。

当我们运行上面的程序时,输出是:

当一个函数需要两个必要参数,但调用该函数时只给出一个参数时,程序就会抛出异常。

添加(1)

当我们运行上面的程序时,输出是:

当一个函数需要两个必要参数,但调用该函数时只给出了三个参数时,程序就会抛出异常。

添加(1,2,3)

当我们运行上面的程序时,输出

2、关键字参数:用于函数调用,以“键-值”的形式指定。可以让功能更加清晰易用,同时也明确了参数的顺序。

add(1,2) # 这种方式传递参数时,必须按顺序传递:x对应1,y对应:2

add(y=2,x=1) #以关键字传入参数(不按顺序)

正确的打电话方式

添加(x = 1,y = 2)

添加(y=2,x=1)

添加(1,y=2)

以上调用方式都是允许的,可以正常执行。

调用方法错误

加(x=1, 2)

加(y=2, 1)

上面的调用会抛出异常

从上面的例子可以看出:当有位置参数时,位置参数必须在关键字参数前面,但关键字参数之间没有顺序。

3.默认参数:用于定义函数,为参数提供默认值。调用函数时可以传递也可以不传递默认参数的值。所有位置参数必须出现在默认参数之前,包括函数定义和调用。有多个默认参数。调用时可以按顺序提供默认参数,也可以不按顺序提供一些默认参数。当一些默认参数乱序提供时,需要写出参数名称

带默认参数的函数定义

上面的第一个例子是定义位置参数的正确方法,第二个例子是错误的,因为位置参数在前,默认参数在最后。

def add1(x=1,y) 的定义将抛出以下异常

带默认参数的函数调用

注意:定义默认参数最好不要将默认参数定义为变量对象,这样很容易导致陷阱。

不可变对象:对象所指向的内存中的值不能改变,int,,,

可变对象,对象指向的内存中的值可以改变,dict、list

你只需要在这里理解这个概念或者自己搜索一下即可。稍后我会写相关文章来解释。

举个简单的例子

4、可变参数的区别:在定义函数时,有时我们不确定调用时会有多少个参数,所以可以使用可变参数。

变量参数主要有两种类型:

*args: ( ) 允许任意数量的可选位置参数(参数),这些参数将被分配给一个元组。参数名称前面带有*。 args只是一个约定的变量名,可以替换为其他名称。

网站建设多少钱_python网站建设_网站建设开发

**: () 允许任意数量的可选关键字参数,这些参数将分配给字典。参数名称前面带有**,这只是常规的变量名称,可以替换为其他名称。

*参数用法

args 用于将可变数量的参数列表(不是键值对)传递给函数。

语法是使用带有可变数量参数的符号;按照惯例,通常使用“arg”这个词。 args相当于变量名,可以自己定义。

在上面的程序中,我们使用 *args 作为传递给 add() 函数的可变长度参数列表。在函数中,我们有一个循环来实现传递参数的计算并输出结果。

也可以直接以列表或数组的形式传递参数,以数组或列表的形式在参数名前添加(*)号。

理解* *

** 允许您将可变长度键值对作为参数传递给函数。这些关键字参数会在函数内自动组装成字典。

下一篇文章将详细讲解*args、**的参数传递和使用。请注意。

功能及参数

是函数定义的参数形式

是函数调用时传入的参数实体。

函数调用的参数传递方式一般有两种:

还,

也是一个关键字传参

函数参数定义一般有五种类型:混合位置参数和关键字参数、仅位置参数、仅关键字参数、可变位置参数和可变关键字参数。仅位置参数的方法只是一个概念,语法中暂时没有这样的设计。

通常我们看到的函数是位置函数和关键字函数的混合。

可以使用关键字和位置调用

或者

这种方法的定义只能采用关键字参数传递方式。

f(*) 等价于 f(arg1, arg2, ...) (其中 = [arg1, arg2, ...])

网络模块方法设计

大多数可选参数被设计为可变关键字参数

有多种方法可以定义函数的输出:

非常晦涩难懂

如果使用可变对象作为函数的默认参数,则默认参数将在所有函数调用之间共享。

示例1:

该方法的数据是用默认参数设计的。使用不当会导致默认参数被共享。

里面,函数的默认参数存储在属性中,属性是一个元组类型

示例2:

在示例1中,默认参数是一个列表,即数据类型。当它被写入属性时,函数的操作并不会改变它的id,相当于只是保存了一个数据的引用。对于它的内存数据来说并不重要。每次调用时,都会将 .可以修改。这是一个共享数据。

如果默认参数是类型,情况就会有所不同。首次存储默认参数的值时,您无法更改该值。

在示例 1 中,连续调用 ('') 的结果将是

而不是预期的

函数参数类型

函数的参数类型主要包括必需参数、可选参数、可变参数、位置参数和关键字参数。本文介绍了它们的定义以及传递可变数据类型参数时需要注意的事项。

必填参数( ) 是必须输入的参数。例如下面的代码,必须输入2个参数,否则会报错:

事实上,上例中的参数num1和num2也是关键字参数。例如,可以通过以下方式调用它们:

执行结果:

可选参数 ( ) 不需要传递到函数中。它有一个默认值。如果不传入,则使用默认值,不会报错。

位置参数 ( ) 根据其在函数定义中的位置进行调用。以下是pow()函数的帮助信息:

python网站建设_网站建设多少钱_网站建设开发

三个参数x、y、z的顺序是固定的,不能使用关键字:

输出:

在上面pow()函数的帮助信息中,可以看到位置参数后面加了一个反斜杠/。这是内置函数的语法定义。开发人员无法在 0.8 版本之前的代码中使用此语法。但是,版本 0 到 3.7 可以通过以下方式定义位置参数:

星号之前的参数是位置参数或关键字参数,星号之后的参数是强制关键字参数。详细信息请参见强制关键字参数。

.8版本引入了强制位置参数(-Only),这意味着我们可以使用反斜杠/语法来定义位置参数,可以写成以下形式:

考虑以下示例:

.8 运行:

不能使用关键字参数形式进行赋值。

可变参数()表示传入的参数个数是可变的,可以是0-n。使用星号(*)自动将输入参数组装成元组():

执行结果:

关键字参数 ( ) 允许将任意数量的包含参数名称的参数导入到函数中。使用双星号 ( ** ) 在函数内自动组装字典。

执行结果:

上面介绍的参数可以混合使用:

结果:

注意:由于传入的参数个数是可变的,与普通参数一起使用时,带星号的参数必须放在最后。

强制关键字参数(-Only)为功能介绍,请参考:。使用星号分隔:

在位置参数一节中,我们介绍了星号之前的参数可以是位置参数和关键字参数。星号后面的参数为强制关键字参数,必须通过指定参数名来传递。如果强制关键字参数没有设置默认参数,则调用函数时必须传递参数。

执行结果:

您还可以在可变参数之后命名关键字参数,这样就不需要星号分隔符:

执行结果:

在对象和内存管理机制中,传入的参数被引入为对象的引用传递(pass by)。编写函数时需要特别注意。

我们先看一个例子:

执行结果:

l1和l2指向同一个地址。由于列表是可变的,因此当 l1 发生变化时,l2 也会发生变化。

然后看下面的例子:

结果:

l1没有改变!为什么不是[1,2,3,4]?

l = l + [4] 意味着创建一个新列表“将元素4添加到末尾”并让l指向这个新对象。 l1不执行任何操作,因此l1的值保持不变。如果要改变l1的值,需要添加返回值:

结果:

执行以下代码的结果是什么?

执行结果:

和第一个例子一样,l1和l2指向同一个地址,所以它们会一起改变。如何解决这个问题呢?

可以使用以下方法:

也可以使用浅复制或深复制。具体使用方法请参考对象和内存管理机制。这个问题在编程时需要特别注意。

本文主要介绍函数的几种参数类型:必需参数、可选参数、可变参数、位置参数、强制位置参数、关键字参数、强制关键字参数。请注意,它们并不是完全独立的,例如所需的参数。 ,可选参数也可以是关键字参数,位置参数可以是必需参数或可选参数。

另外,传入的参数是对象的引用传递。传递变量数据类型的参数时需要特别注意。如有必要,请使用复制方法。

参考文档:

--结束--

本文标题:函数名作为参数 函数作为参数

分享