python 中*的用处

自己经常混*的用处,为此特意总结记录。

在Python中,函数定义中的*(星号)用于指示位置参数的结束和关键字参数的开始。具体来说,*之后的参数必须以关键字参数的形式传递。

用在函数参数中

在我的例子中:

python 复制代码
def __init__(self, *, name: str, grams: float):

这里的*表示在*之后的参数namegrams必须通过关键字来传递,而不能通过位置来传递。也就是说,你必须这样调用这个构造函数:

python 复制代码
obj = 类名(name="example", grams=10.5)

而不能这样调用:

python 复制代码
obj = 类名("example", 10.5)  # 这会导致错误

这种用法有助于提高代码的可读性和明确性,特别是在构造函数或方法有很多参数时,明确指出哪些参数必须通过关键字传递,可以避免参数顺序错误的问题。

在Python中,*(星号)在函数定义和调用中有多种用途,主要包括以下几种情况:

  1. 单星号 * 用于收集和解包位置参数:

    • 收集位置参数: 在函数定义中,*args用于收集所有传递给函数的位置参数,并将它们打包成一个元组。

      python 复制代码
      def example_function(*args):
          for arg in args:
              print(arg)
      
      example_function(1, 2, 3)  # 输出: 1 2 3
    • 解包位置参数: 在函数调用中,*用于解包一个可迭代对象(如列表、元组),将其元素作为单独的位置参数传递给函数。

      python 复制代码
      def example_function(a, b, c):
          print(a, b, c)
      
      args = [1, 2, 3]
      example_function(*args)  # 输出: 1 2 3
  2. 双星号 ** 用于收集和解包关键字参数:

    • 收集关键字参数: 在函数定义中,**kwargs用于收集所有传递给函数的关键字参数,并将它们打包成一个字典。

      python 复制代码
      def example_function(**kwargs):
          for key, value in kwargs.items():
              print(f"{key}: {value}")
      
      example_function(a=1, b=2, c=3)  # 输出: a: 1 b: 2 c: 3
    • 解包关键字参数: 在函数调用中,**用于解包一个字典,将其键值对作为单独的关键字参数传递给函数。

      python 复制代码
      def example_function(a=0, b=0, c=0):
          print(a, b, c)
      
      kwargs = {'a': 1, 'b': 2, 'c': 3}
      example_function(**kwargs)  # 输出: 1 2 3
  3. 单星号 * 用于指示关键字参数的开始:

    如前所述,*在函数定义中可以用于指示位置参数的结束和关键字参数的开始。

    python 复制代码
    def example_function(*, a, b):
        print(a, b)
    
    example_function(a=1, b=2)  # 输出: 1 2

总结来说,***在Python函数中主要用于参数的收集和解包,以及指示关键字参数的开始。这些特性使得函数定义和调用更加灵活和强大。

相关推荐
萧鼎5 小时前
深入理解 Python Scapy 库:网络安全与协议分析的瑞士军刀
开发语言·python·web安全
阿拉丁的梦8 小时前
教程1:用vscode->ptvsd-创建和调试一个UI(python)-转载官方翻译(有修正)
开发语言·python
名难取aaa8 小时前
celery solo acks_late得不到预期
python·celery
大翻哥哥10 小时前
Python地理空间数据分析:从地图绘制到智能城市应用
开发语言·python·数据分析
奇舞精选11 小时前
爬虫入门
爬虫·python
爬虫程序猿11 小时前
利用 Python 爬虫获取 1688 商品详情 API 返回值说明(代码示例)实战指南
开发语言·爬虫·python
明月看潮生12 小时前
编程与数学 02-017 Python 面向对象编程 23课题、测试面向对象的程序
开发语言·python·青少年编程·面向对象·编程与数学
小蒜学长13 小时前
基于django的梧桐山水智慧旅游平台设计与开发(代码+数据库+LW)
java·spring boot·后端·python·django·旅游
nightunderblackcat13 小时前
新手向:Python开发简易股票价格追踪器
开发语言·python
感哥14 小时前
DRF 认证
python·django