Python写代码的用法建议「建议收藏」

Python写代码的用法建议「建议收藏」1.MutableandimmutabletypesPython有两种内置或用户定义的类型可变类型是允许就地修改内容的类型。典型的可变列表是列表和词典:所有列表都有变异方法,如 l

大家好,又见面了,我是你们的朋友全栈君。

1.Mutable and immutable types

Python有两种内置或用户定义的类型

可变类型是允许就地修改内容的类型。典型的可变列表是列表和词典:所有列表都有变异方法,如 list.append()或list.pop(),并且可以在适当的位置进行修改。词典也是如此。

不可变类型不提供改变其内容的方法。例如,设置为整数6的变量x没有“增量”方法。如果要计算x + 1,则必须创建另一个整数并为其指定名称。

Python写代码的用法建议「建议收藏」

体会一下这Best这招,选择是使用map函数,它可以将内置函数类型str映射到迭代器range。这会生成一个map对象,然后就可以像其他示例一样join。在某些情况下,map函数甚至可能比列表理解更快,更简洁!


2.One statement per line

每一行一个语句,尤其在复杂的逻辑表达式的时候,这样会清晰很容易阅读

Python写代码的用法建议「建议收藏」

虽然列表推导等一些复合语句因其简洁性和表达性而被允许和赞赏,但在同一行代码上有两个脱节语句是不好的做法

 

3.Explicit code

Python因为技巧性非常高,有的时候滥用一些黑魔法,过度的使用技巧而反而失去了代码本身的直观性。

 Python写代码的用法建议「建议收藏」

字典的更新有几种方法,dict(**locals)本意是想生成一个新的字典返回。在上面的好代码中,显式地从调用者接收x和y,并返回显式字典。使用此函数的开发人员通过读取第一行和最后一行就能确切地知道要做什么,而不是像坏例子的那种情况,比较晦涩难懂,不直接。

 

 4.Returning values

关于返回值的处理

当函数的复杂性增加时,在函数体内使用多个return语句并不罕见。但是,为了保持清晰的意图和可持续的可读性水平,最好避免从体内的许多输出点返回有意义的值。

在函数中返回值有两种主要情况:函数在正常处理时返回的结果,以及指示错误输入参数的错误情况或函数无法完成其计算的任何其他原因或任务

def complex_function(a, b, c):
   if not a:
       return None  # Raising an exception might be better
   if not b:
       return None  # Raising an exception might be better
   # Some complex code trying to compute x from a, b and c
   # Resist temptation to return x if succeeded
   if not x:
       # Some Plan-B computation of x
   return x  # One single exit point for the returned value x will help
             # when maintaining the code.

当一个函数在其正常过程中有多个主要出口时,调试返回的结果变得很困难,因此最好保留一个退出点。这也将有助于分解一些代码路径,如果函数有多个出口点,说明你的代码要进一步的重构。

 
5.Unpacking

如果知道列表或元组的长度,则可以通过解压缩为其元素指定名称。比如enumerate()将为列表中的每个项提供两个元素的元组,一个下标一个值:

 

for index, item in enumerate(some_list):
   # do something with index and item

 

也可以使用它来交换变量:

a, b = b, a

嵌套解包也适用Py3.x

a, (b, c) = 1, (2, 3)
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4

6.Searching for an item in a collection

有时我们需要搜索一系列的东西。让我们看看两个选项:列表和集合。

以下面的代码为例:

s = set(['s', 'p', 'a', 'm'])
l = ['s', 'p', 'a', 'm']

def lookup_set(s):
   return 's' in s

def lookup_list(l):
   return 's' in l

 

即使两个函数看起来都相同,因为lookup_set利用了Python中的集合是哈希表的事实,两者之间的查找性能是非常不同的。

要确定项目是否在列表中,Python必须遍历每个项目,直到找到匹配的项目。

这很费时,特别是对于长列表。另一方面,在集合中项目的哈希将告诉Python在集合中的哪个位置寻找匹配项目。因此,即使集合很大,也可以快速完成搜索

 

7.Check if variable equals a constan

检查变量是否等于常数

您不需要显式地将值与True或None或空进行比较 – 您只需将其添加到if语句即可。

Python写代码的用法建议「建议收藏」

 

8.Access a Dictionary Element

访问字典元素

不要使用该dict.has_key()方法。相反使用语法或传递默认参数 比如x in dict ,dict.get(k,default_value)

Python写代码的用法建议「建议收藏」

 

9.Filtering a list

过滤列表坏的做法,或者初学者经常会犯的错误

Python写代码的用法建议「建议收藏」

好的做法是使用filter函数,从Python 3.0开始,该filter()函数返回迭代器而不是列表。如果你真的需要一个列表,前面加一个list()即可!

 

10.Read From a File

使用语法从文件中读取,这将自动为您关闭文件,一定要用with open

Python写代码的用法建议「建议收藏」

 

11.Line Continuations

代码长度的持续

当我们的逻辑代码行长于可接受的限制时(PEP8规定是79个字符),需要将其拆分为多个物理行。

如果行的最后一个字符是反斜杠,Python解释器将连接连续的行。这在某些情况下很有用,但通常应该避免因为它的脆弱性。

在反斜杠之后添加到行尾的空格会破坏代码并可能产生意外结果。

 Bad :

my_very_big_string = """For a long time I used to go to bed early. Sometimes, \
   when I had put out my candle, my eyes would close so quickly that I had not even \
   time to say “I’m going to sleep.”"""

from some.deep.module.inside.a.module import a_nice_function, another_nice_function, \
   yet_another_nice_function

Good :

my_very_big_string = (
   "For a long time I used to go to bed early. Sometimes, "
   "when I had put out my candle, my eyes would close so quickly "
   "that I had not even time to say “I’m going to sleep.”"
)

from some.deep.module.inside.a.module import (
   a_nice_function, another_nice_function, yet_another_nice_function)

更好的做法是在元素周围使用括号。在行尾留下一个未闭合的括号,Python解释器将加入下一行,直到括号被关闭。对于大括号和方括号,同样的行为也适用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156105.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PCA算法过程_pca推导

    PCA算法过程_pca推导PCA是主成分分析(PrincipalComponentsAnalysis)的简称。这是一种数据降维技术,用于数据预处理。一般我们获取的原始数据维度都很高,那么我们可以运用PCA算法降低特征维度。这样不仅可以去除无用的噪声,还能减少很大的计算量。…

    2025年5月26日
    0
  • Idea激活码最新教程2023.2.8版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2023.2.8版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2023 2 8 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2023 2 8 成功激活

    2025年5月29日
    1
  • 关于cpu流水线的各阶段周期,吞吐率计算问题

    关于cpu流水线的各阶段周期,吞吐率计算问题本人在复习计组流水线时,遇到了一些问题,再次记录,以备不时之需。首先要弄明白一点,那就是cpu的各阶段是否具有相同的时钟周期,也就是说,每个阶段所花费的时间是否都是相同的?为什么会想到这个问题,先看一下408统考真题的这一题:刚开始那是想都没想,这他么这么简单的题,肯定选A啊,虽然的确做对了,但分析这道题所考的知识点时,想的就多了,为什么时钟周期不能小一点,比如为50ns,让每个阶段所占用两个时钟周期不就得了,但是这时候脑子突然想到,cpu流水线的每个阶段是不是必须是一个时钟周期啊?这时候,

    2022年8月22日
    5
  • MySql批量插入语句(INSERT)[通俗易懂]

    MySql批量插入语句(INSERT)[通俗易懂]这里写自定义目录标题欢迎使用Markdown编辑器创建数据库新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何

    2022年10月5日
    0
  • ping原理和Traceroute原理

    ping原理和Traceroute原理ping原理ping主要是用来探测主机和主机之间是否可以进行通信,如果不能ping到某台主机,表示不能与这台主机建立连接。ping使用的是ICMP协议,他发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机,如果源主机在一定时间内收到应答,表明主机可达。ICMP协议是通过IP协议发送的,IP协议是无连接的,不可靠的数据报协议。ping是用来检测…

    2022年7月21日
    10
  • android开机动画多长时间_Android开机动画及黑屏[通俗易懂]

    android开机动画多长时间_Android开机动画及黑屏[通俗易懂]platform:RK3399OS:Android7.11.Android各阶段动画Android动画主要分为关机充电动画和开机动画;开机动画又分为三个阶段:uboot阶段动画、kernel阶段动画、Android阶段动画。1.1uboot开机动画Uboot阶段由于大部分环境和驱动没有准备好,所有此阶段显示直接采用的framebuffer;而且严格来说只是图片,并不是动画。要在uboot阶…

    2022年5月14日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号