首页 > 编程语言 >Python 逗号的巧用

Python 逗号的巧用

时间:2024-05-23 10:20:48浏览次数:13  
标签:... Python Dilbert Alice 列表 逗号 添加 巧用

Python 逗号的巧用

如果需要在中的列表、字典或集合常量中添加或移除项,记住一个窍门:在所有行后面都添加一个逗号。

还不太明白?来看一个示例。假设在代码中有下面这个由名字组成的列表:

>>> names = ['Alice', 'Bob', 'Dilbert']

在修改这个名字列表时,通过git diff查看改动可能有点不方便。大多数源码控制系统都是基于行的,因此无法标出同一行中的多个改动。

一个快速改进是根据编码规范,将列表、字典或集合常量分割成多行,如下所示:

>>> names = [
...     'Alice',
...     'Bob',
...     'Dilbert'
... ]

这样每项独占一行,因此可以清楚地从源码控制系统的diff中看出哪里进行了添加、删除和修改操作。虽然只是一个小改动,但我发现这有助于避免很多愚蠢的错误,也让团队成员能够更方便地审阅我的代码改动。

但现在依然有两个编辑情形会导致混乱,即在列表末尾添加或移除内容时,还需要手动调整逗号来保持格式的一致性。
比如需要向列表中添加一个名字Jane,则需要在Dilbert这一行的末尾添加一个逗号来避免一个讨厌的错误:

>>> names = [
...     'Alice',
...     'Bob',
...     'Dilbert' # <- 缺失逗号!
...     'Jane'
]

在查看这个列表的内容时,请做好心理准备:

>>> names
['Alice', 'Bob', 'DilbertJane']

可以看到,将字符串DilbertJane合并成了DilbertJane。这称为字符串字面值拼接,是文档中有记录的刻意行为。这种行为可能会在程序中引入令人难以琢磨的bug:

以空白符分隔多个相连的字符串或byte字面值,即使它们各自使用不同的引号,也会执行拼接操作。

详见文档:“String literal concatenation”。

在某些情况下,字符串字面值拼接是一个有用的特性。例如,在跨越多行的长字符串中可以省去反斜杠:

my_str = ('This is a super long string constant '
          'spread out across multiple lines. '
          'And look, no backslash characters needed!')

但另一方面,这个特性有时又会成为负担。那么如何解决这个问题呢?

Dilbert后添加缺失的逗号就能避免两个字符串合并了:

>>> names = [
...     'Alice',
...     'Bob',
...     'Dilbert',
...     'Jane'
]

现在回到原来的问题。为了向列表添加一个新名字,需要修改两行代码。这同样让开发人员很难从git diff看出到底做了什么改动:到底是添加了一个新名字,还是修改了Dilbert这个名字?

幸运的是语法留有余地,让我们可以一劳永逸地解决这个逗号放置问题。只要遵循一种能够避免这个问题的编码风格即可,下面来看具体方法。

在中,可以在列表、字典和集合常量中的每一项后面都放置一个逗号,包括最后一项。因此只要记住在每一行末尾都加上一个逗号,就可以避免逗号放置问题。

下面是示例的最终版:

>>> names = [
...     'Alice',
...     'Bob',
...     'Dilbert',
... ]

看到Dilbert后面的那个逗号了吗?现在能方便地添加或移除新的项,无须再修改逗号了。这不仅让各行代码保持一致,而且源码控制系统生成的diff清晰整洁,让代码审阅者心情愉悦。看到没,有时魔法就藏在这些细微之处。

关键要点

  • 合理的格式化及逗号放置能让列表、字典和集合常量更容易维护。
  • 的字符串字面值拼接特性既可能带来帮助,也可能引入难以发现的bug。

标签:...,Python,Dilbert,Alice,列表,逗号,添加,巧用
From: https://www.cnblogs.com/wenyuan519/p/18207785

相关文章

  • Python pip 安装与使用
    Pythonpip安装与使用pip是Python包管理工具,该工具提供了对Python包的查找、下载、安装、卸载的功能。目前如果你在python.org下载最新版本的安装包,则是已经自带了该工具。注意:Python2.7.9+或Python3.4+以上版本都自带pip工具。pip官网:https://pypi.org/pro......
  • [oeasy]python018_ 如何下载github仓库_git_clone_下载仓库
    继续运行......
  • python在Linux环境下访问Windows共享目录
    1.smbprotocol 不推荐,偶然会出现 "SMBsocketwasclosed,cannotsendorreceiveanymoredata" 的异常。pipinstallsmbprotocol实现代码:#!/usr/bin/envpython#-*-encoding:utf-8-*-fromsmbclientimportopen_file,register_session,delete_session......
  • Python可视化训练
    Python可视化训练一实验目的l 使学生综合运用图形用户界面设计的概念;l 使学生熟悉使用中间面板,组成层次复杂的GUI界面;l 使学生掌握Python图形绘制和图像处理步骤与方法;l 使学生掌握Python可视化处理的步骤、方法与编程;二实验环境及实验准备l 所需硬件环境为微机;l ......
  • 2022-07-03-含有非期望产出的sbm模型python代码
    传统的径向DEA模型无法考虑“松弛变量”对效率值的影响,也没有考虑同时使期望产出增加,非期望产出减少的技术变化,以此度量的效率值是不准确或有偏的,为了解决这一问题,Tone(2001)提出了基于投入产出松弛变量的环境效率评价模型,简称SBM模型,在此基础上,他进一步提出了SBM的拓展模型,从而实......
  • 【PYTHON3】认识python语言
    一、什么是pythonPython是一种高级的开发语言,和java、C/C++等开发语言一样。其主要的方向是人工智能、爬虫、大数据、自动化等注意这里指的是主要用途,但并不代表python不能开发WEB、GUI、游戏等程序二、发展史以下解释来源菜鸟教程网址,因为我觉得菜鸟教程上的说明已经很清......
  • python 实现公众号模板消息推送(亲测有效)
    APPID='xxxxxxxxx'APPSECRET='xxxxxxxxxxxxxx'response=requests.get('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}'.format(APPID,APPSECRET))ACCESS_TOKEN=response.js......
  • python直接调用InstantID进行图片生成
    项目地址https://github.com/InstantID/InstantID克隆到本地,根据要求pip安装依赖模型文件上篇文章讲了如何下载https://www.cnblogs.com/qcy-blog/p/18202276我用的windows,所以改了一下示例infer.py源码,主要是修改了模型得绝对路径。importcv2importtorchimportnumpy......
  • Python使用Mypy进行静态变量审查
    python作为一个动态语言,可以对变量不进行类型定义就使用,这就导致随着项目的增大,我们很难回顾以前某些模块中每一个变量是什么类型(特别是在函数定义里,如果不进行类型检查,很可能对一个str类型进行了()调用等等),为了在编码时能够让编译器提醒我们,也防止在运行时出现问题,采用静态变......
  • python 自然语言处理模块
    Python中有几个流行的自然语言处理(NLP)模块,这些模块提供了广泛的工具和库,用于文本分析、处理和理解。以下是一些广泛使用的NLP模块:NLTK(NaturalLanguageToolkit)NLTK是Python中最著名的NLP库之一,它提供了文本处理的丰富工具,包括分词、词性标注、句法分析、语义推理等。网......