有趣生活

当前位置:首页>科技>python 定义函数的使用方法:定义函数输入参数很简单

python 定义函数的使用方法:定义函数输入参数很简单

发布时间:2026-07-21阅读(1)

导读前言上一篇文章中介绍了Python定义函数参数和传参的实现,详情可查阅:Python编程:函数参数定义与传递方式。本期内容主要详细介绍如何定义函数输入参数以....前言

上一篇文章中介绍了Python定义函数参数和传参的实现,详情可查阅:Python编程:函数参数定义与传递方式。本期内容主要详细介绍如何定义函数输入参数以及实战规则。老规矩,辅助加深理解的示例代码,比便于实操。

闲话少叙,开始正文——记得点赞 关注@传新视界 ,前进不迷路 ^_^

本文内容主要涉及如下几个主题方法,文章有点长,请收藏以便查阅。

函数参数即为函数的输入,可分类为五组。

•位置或关键字参数:同时允许位置和关键字参数;

•可变位置参数:在元组中收集任意数量的位置参数;

•可变关键字参数:在字典中收集任意数量的关键字参数;

•仅限位置参数:只能作为位置参数传递;

•仅限关键字参数:只能作为关键字参数传递。

到目前为止,我们所看到的例子中,看到的所有参数都是普通的位置参数或关键字参数。也已经了解了如何将它们作为位置参数和关键字参数传递。关于它们没有太多要说的了,所以我们要来看看其他类别。在此之前,先来看看可选参数。

1 可选参数

除了我们在这里看到的类别之外,参数还可以分为必选项和可选项。可选参数有默认值,其值在函数定义中指定。语法是格式为:name=value。示例如下:

# 定义参数有默认值的函数,调用时其为可选型参数def func(a, b=4, c=88): print(a, b, c)func(1) # prints: 1 4 88func(b=5, a=7, c=9) # prints: 7 5 9func(42, c=9) # prints: 42 4 9func(42, 43, 44) # prints: 42, 43, 44

这里,a是必需传递参数项,而b的默认值是4,c的默认值是88,两者是可选项。重要的是要注意,除了只有关键字的形参外,必需型形参必须始终位于函数定义中所有可选形参的左侧。试着在上面的例子中删除c的默认值,看看会发生什么。

2 不定量位置参数

有时,可能不希望为函数指定位置参数的确切数量,而Python通过使用可变位置参数提供了实现这一点的能力。让我们来看一个非常常见的用例,minimum()函数。

这是一个计算其输入值最小值的函数,代码如下:

# 不定量位置参数def minimum(*n): # print(type(n)) # n 是个元组 if n: # mn = n[0] for value in n[1:]: if value < mn: mn = value print(mn)minimum(1, 3, -7, 9) # n = (1, 3, -7, 9) - prints: -7minimum() # n = () - prints: nothing

如上所见,当我们定义一个带有星号*的形参时,我们是在告诉Python,当函数被调用时,这个形参将收集数量不定的位置实参。在函数中,n是一个元组。可取消代码中的注释print(type(n))行,然后运行程序并看看输出。

注意,一个函数最多只能有一个不定量位置参数——有更多的位置参数是没有意义的。Python将无法决定如何划分它们之间的参数。您也无法为变量位置参数指定默认值。默认值总是一个空元组。

提示:

是否注意到代码中是如何用一个简单的if n:检查n是否为空的?这是因为在Python中,集合对象在非空时求值为True,否则为False。元组、集合、列表、字典等等都是如此。

另一件需要注意的事情是,当调用不带参数的函数时,可能想抛出一个错误,而不是静默地什么都不做。在这种情况下,我们不关心如何使这个函数健壮,而是要理解可变量位置参数。

另外,是否注意到,定义不定量位置形参的语法与可迭代解包的语法非常相似?这并非巧合。毕竟,这两个特征互为镜像。它们也经常一起使用,因为不定量位置形参让你不必担心解包的可迭代对象的长度是否与函数定义中的形参数量相匹配。

3 不定量关键字参数

不定量关键字参数(Variable keyword parameters)非常类似于不定量位置参数。唯一的区别是语法(**而不是*)和它们以字典形式被收集的事实:

# 不定量关键字参数def func(**kwargs): print(kwargs)func(a=1, b=42) # prints {a: 1, b: 42}func() # prints {}func(a=1, b=46, c=99) # prints {a: 1, b: 46, c: 99}

如上所示,在函数定义的参数名称前添加**告诉Python使用该名称来收集数量不定的关键字参数。与不定量位置参数的情况一样,每个函数最多只能有一个可变关键字参数,并且不能指定默认值。

就像可变量位置参数类似于可迭代解包一样,可变关键字参数类似于字典解包。字典解包也经常用于将参数传递给具有可变量关键字形参的函数。

为什么能够传递可变数量的关键字参数如此重要,目前可能还不清楚,那么通过如何使用这一能力的示例,你将能更真实的理解其重要性。

我们定义一个连接到数据库的函数:我们希望通过不带参数地调用这个函数来连接到默认数据库。还希望通过向函数传递适当的参数来连接到任何其他数据库。在你继续读下去之前,自己试着花几分钟自己想出一个解决方案:

# 可变量关键字参数def connect(**options): conn_params = { host: options.get(host, 127.0.0.1), port: options.get(port, 5432), user: options.get(user, ), pwd: options.get(pwd, ), } print(conn_params)# 然后连接数据库(注释掉的代码行)# db.connect(**conn_params)connect()connect(host=127.0.0.42, port=5433)connect(port=5431, user=admin, pwd=super)

注意,在函数中,我们可以准备一个连接参数字典(conn_params)使用默认值作为回退,其允许在函数调用时提供以覆盖它们。有更好的方法可以用更少的代码行来实现这一点,但我们现在不关心这一点。运行上述代码会得到以下结果:

Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图