ITPub博客

首页 > 数据库 > 数据库开发技术 > Python效率秘籍:使用“*” 和“/” 让你的函数参数看起来更整洁

Python效率秘籍:使用“*” 和“/” 让你的函数参数看起来更整洁

原创 数据库开发技术 作者:jackzhang 时间:2024-05-01 06:30:00 0 删除 编辑

引言

在Python中,我们可以通过位置参数或关键字参数向函数传递数据,这种灵活性让Python函数的使用变得非常方便。然而,这种方式也有一些局限性。例如,你可能希望某些参数仅限于使用位置来指定,而另一些参数则只能通过关键字来指定。此外,常见的一种需求是将带有默认值的参数放在没有默认值的参数之前,这样可以使参数看起来更加有序,使用起来也更加简单。在Python中,通过使用*和/符号,可以实现这些特定的需求。

默认行为

众所周知,在Python中可以通过位置参数或关键字参数传递数据给函数。让我们看看下面这个简单的例子:

def output(a, b, c):
    print(f'{a=}, {b=}, {c=}')

只要关键参数放在位置参数后面,我们可以使用位置参数或关键字参数调用此函数:

这几种调用方式都有效,而且结果都一样。

使用 / 指定仅限位置参数

在函数定义中,放在 / 符号之前的参数必须作为位置参数传递。现在让我们使用 /更新 output() 函数:

def output_v2(a, /, b, c):
    print(f'{a=}, {b=}, {c=}')

在这个更新版本中,a 只能通过位置参数传递,而 b 和 c 仍然可以通过位置参数和关键字参数传递:

如果参数 a 我们通过关键字参数传递,则会报类型错误:

使用 * 指定仅限关键字参数

在函数定义中,* 号后面的参数必须通过关键字参数传递。我们再次修改 output() 函数,将 / 修改为 *:

def output_v3(a, *, b, c):
    print(f'{a=}, {b=}, {c=}')

现在,a 可以通过位置参数或关键字参数传递,但b 和 c 必须通过关键字参数传递:

如果 b 和 c 通过位置参数传递的话,就会报类型错误:

上面的错误说明这个函数只有一个参数支持位置传递,即 * 号前面的 a。

* 号的一个非常有用的功能是,它允许你在没有默认值的参数之前放置具有默认值的参数,使得参数看起来更有组织性或结构性。例如,我们可以给 b 一个默认值,仍然可以使用星号在 b 之后放置 c :

def output_v4(a, *, b=2, c):
    print(f'{a=}, {b=}, {c=}')

这是 Python 中的有效语法,并且常用于具有复杂函数参数的第三方 Python 库。

现在 b 和 c 都必须通过关键字参数传递,而且 b 具有默认值:

在函数定义中结合使用 * 和 /

我们可以结合 * 和 / 来定义函数,其中一些参数是仅限位置传递,另一些则仅限关键字传递:

def output_v5(a, /, *, b=2, c):
    print(f'{a=}, {b=}, {c=}')

在这个案例中,a 是仅位置参数,而 b 和 c 是仅关键字参数。

如果 a 使用关键字传递,b 和 c 使用位置传递,则都会发生类型错误和语法错误:

结论

在这篇文章中,我们介绍了在函数定义中使用 * 和 / 符号的方法,它们具有以下有趣的用途:

  • 使一些参数仅限位置参数,一些仅限关键字参数。
  • 将具有默认值的参数放在没有默认值的参数之前,使参数看起来更有组织且更容易使用。

“

如果你觉得这篇文章对你有用,请“点赞➕关注”支持我!关注我,带你解锁更多Python实用技能、数据分析知识以及更多AI工具和新玩法!

Thank you for reading!

- END -

推荐阅读👇👇👇

震惊全球!!!谷歌解雇了它整个Python基础团队,释放了什么信号?

Python提速秘籍:9个让你的代码飞速运行的巧妙技巧!

Pandas高级功能:提升您的数据处理技能。值得一看!(建议收藏~~)

Python如何从SQL Server中存取数据?

再见pandas,你好polars!


原文作者:数据派探险家;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2017-12-19

  • 博文量
    119
  • 访问量
    55965