关于Python函数,你应该知道以下几点基础知识

关于Python函数,你应该知道以下几点基础知识

编码文章call10242024-12-26 12:05:5325A+A-

1) 函数中的类型提示


我开始学习 Python 时,根本没有使用过类型提示。因此,在编写 Python 的最初几年里,我从未写过一个类型提示。
举个简单的例子,假设我们想写一个函数,求 2 个整数的平均值。我们一般会这么写:

我现在工作时就是这样写函数的(添加类型提示和文档字符串):

  • a: int 表示 a 最好是整数
  • b: int 表示 b 最好是整数
  • -> float 表示函数最好返回一个 float 值


但是,请注意,类型提示是提示,而不是强制。如果我们在 a 和 b 中输入字符串或其他数据类型,Python 其实是可以接受的(直到它尝试将一个字符串除以 2 才会导致错误)。
类型提示的目的主要是:1)使代码便于人类阅读;2)使您的集成开发环境(如 PyCharm 或 VSCode)能够为您进行检查。
尽可能在函数中添加类型提示,以便其他程序员(甚至是未来的你)更容易理解函数。

2) 默认参数

^ 在上述函数中,greeting='hi'是默认参数。

  • 如果我们不向‘greeting’函数传递任何参数时,它就会被自动分配为 "hi"。
  • 如果我们向‘greeting’函数传递某个值,它就会接受该值

在 greet('tom') 中,我们没有在问候语中传递任何信息。这意味着它默认为 "hi
在 greet('tom', greeting='hello') 中,我们将 "hello "传入了 greeting。也就是说,我们覆盖了默认参数,并指定 greeting = 'hello'
如果函数中有大量参数,而我们又不希望每次调用函数时都要输入每个参数,那么这种方法就非常有用。

3) 形参和实参

在我学习 Python 的最初几年,我以为它们的意思是一样的。但其实也不尽然,它们之间有一点区别。
比方说,再以之前的例子为例:我们有一个简单的函数,它接收 (a, b) 并返回它们的平均值。

形参是我们定义函数时写在括号内的变量。这里,a 和 b 就是参数。

实参是我们在调用函数时实际传递给函数的值。在这里,当我们调用 avg(a, b) 函数时,3 和 5 就是实参。

4) 位置参数与关键字参数

我们看下面这个函数:

让我们通过传递一些位置参数来调用这个函数。

这里,4 和 7 是位置参数。位置参数需要按顺序排列 -- 4 传递到 a,而 7 传递到 b。


接下来,让我们通过传递一些关键字参数来调用我们的函数。

这里,b=5 和 a=8 是关键字参数。关键字参数不需要按顺序排列,但我们必须使用 key=value 格式传递它们。

5) 任意位置参数 (*args)

函数中的任意位置参数(也称为 *args)允许函数接受任意数量的位置参数。

在这里,test 函数接收 *args - 这使得 test 可以接收任意数量的位置参数,所有这些参数都将包含在一个名为 args 的元组中。


我们也可以将其与普通参数相结合(*参数必须排在后面)

补充说明:我们不必一定要将其命名为‘ *args’。只要在前面加上 "*",我们可以给它起任何名字。

6) 任意关键字参数(**kwargs)

任意关键字参数(也称为 **kwargs)允许我们的函数接收任意数量的关键字参数。

在这里,test 函数使用了 **kwargs--它允许 test 使用任意数量的关键字参数,这些参数将被记录在名为 kwargs 的字典中。


我们还可以将其与普通参数相结合(**kwargs 也必须在后面)

补充说明--如果我们不愿意,不必将其命名为‘kwargs’。只要前面有 **,我们可以给它起任何名字。

7) 使用 * 和 ** 将 列表和字典传递给函数

下面是一个简单的函数,它只需打印出参数。

我们可以不按常规方法调用这个函数,即 hi(1,2):


1) 使用 * 传递包含位置参数的列表

在这里,nums 前面的 * 将其内容作为位置参数解包到函数调用中。这与 hi(100, 200) 相同


2) 使用 ** 传递包含关键字参数的字典

在这里,d 前面的 ** 将其键值对作为关键字参数解包到函数调用中。这与 hi(a=100, b=100) 相同

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4