page contents

Python教程-5个 Python 错误让你看起来很弱!

Python是一种非常容易学习的语言,它不强制你使用特定的约定。同时,你也很容易陷入一些陷阱,让你看起来像是一个初学者。为了避免看起来完全是个初学者,看看下面的技巧以及如何修复它们。

attachments-2024-09-qbDT02zc66e3958c935c8.jpgPython是一种非常容易学习的语言,它不强制你使用特定的约定。同时,你也很容易陷入一些陷阱,让你看起来像是一个初学者。为了避免看起来完全是个初学者,看看下面的技巧以及如何修复它们。

1. 不使用enumerate()

Python使得遍历列表等事物变得超级简单。看看下面的例子:

vals = ['Python', 'is', 'fun!']for val in vals:    print(val)

# Returns:# Python# is# fun!

但是,如果你需要引用每个项目的索引会发生什么?你可能遇到过甚至写过下面这样的代码:

vals = ['Python', 'is', 'fun!']for i in range(len(vals)):  print(i, vals[i])

# Returns:# 0 Python# 1 is# 2 fun!

虽然这有效,但并不十分优雅!它也没有立即清楚地表明你的代码在做什么。这里就是enumerate()函数发挥作用的地方!让我们看看它让这个过程变得多么容易:

for idx, val in enumerate(vals):  print(idx, val)

# Returns:# 0 Python# 1 is# 2 fun!

作为一个专业提示,你甚至可以改变起始值。比如说,如果你想从1开始标记项目。然后你可以简单地写:

vals = ['Python', 'is', 'fun!']for idx, val in enumerate(vals, start=1):    print(idx, val)    # Returns:# 1 Python# 2 is# 3 fun!

2. 不使用三元运算符

当你使用if-else语句来赋值时,你正在为一个简单动作使用大量的代码行。看看下面的场景:

amount = 100if amount > 50:    raise_amount = 20else:    raise_amount = 10

print(raise_amount)

# Returns:# 20

在上面的例子中,我们创建了一个if-else语句来检查某人销售的数量是否超过50。如果是,那么他们将获得20的加薪。否则,他们将获得10的加薪。虽然我们的代码很清晰,但并不十分简洁。我们可以通过使用三元赋值来大大简化这一点:

amount = 100raise_amount = 20 if amount > 50 else 10

print(raise_amount)

# Returns:# 20

这最适合非常简单的赋值。虽然你可以更复杂,但不要为了简洁而牺牲可读性!

3. 不使用推导式

Python推导式可以快速创建列表、字典甚至生成器。它们提供了一种优雅且易于阅读的方式来轻松创建数据结构。让我们看看你会如何使用for循环来创建一个平方数列表的例子:

squares = []for i in range(1, 6):    squares.append(i ** 2)

print(squares)

# Returns:# [1, 4, 9, 16, 25]现在让我们比较一下使用列表推导式的情况:

squares = [i ** 2 for i in range(1, 6)]print(squares)

# Returns:# [1, 4, 9, 16, 25]

我们可以看到使用列表推导式是多么简单和明确!代码不仅更简洁,而且更容易阅读。创建字典推导式也同样容易。让我们再次比较两种方法,创建一个字典,其中键是原始数字,值是它的平方:

squares = {}for i in range(1, 6):    squares[i] = i ** 2

print(squares)

# Returns:# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

现在让我们看看我们如何使用字典推导式来简化这个!

squares = {i: i**2 for i in range(1, 6)}print(squares)

# Returns:# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

现在,也很容易过度使用推导式,对一切都使用推导式。所以我会在这里加上一个额外的提示:除非有意义,否则不要对一切都使用它们!

4. 过度使用推导式

Python推导式非常强大——真的非常强大。你可以内置复杂的if-else语句,甚至可以将它们嵌套在一起。让我们看看我们如何结合if-else语句:

even_odd_numbers = [    "Even" if num % 2 == 0 else "Odd"     for num in range(10)]print(even_odd_numbers)

# Returns:# ['Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd']

在上面的例子中,我们使用三元运算符在继续迭代的同时返回一个值。现在,这个例子很简单——但让我们看看一个更复杂的:

result = [x * 2 if x % 2 == 0 else x * 3 for x in range(10) if x != 5]

这一点也不有趣,难以阅读。这就引出了我的主要观点——如果使用for循环更清晰,就不要写推导式。让我们将这个推导式转换为循环,看看阅读起来有多容易:

result = []for x in range(10):    if x != 5:        if x % 2 == 0:            result.append(x * 2)        else:            result.append(x * 3)

我们可以看到,虽然我们用更多的行来写这段代码,但它的可读性要高得多!

5. 不使用itertools

Python的itertools是内置在Python中的一个隐藏的宝石。表面上,它的许多功能看起来很简单,但它们提供了优雅而强大的方法来迭代不同的对象。防止嵌套循环假设你有两个列表,你想遍历所有可能的组合。你可以像下面这样编写一个嵌套的for循环:

colors = ['Red', 'Green']sizes = ['S', 'M', 'L']

for color in colors:    for size in sizes:        print(color, size)

# Returns:# Red S# Red M# Red L# Green S# Green M# Green L

类似于我们在这篇文章中讨论的其他一切,这种方法有效,但并不十分优雅。幸运的是,itertools带有product()函数,它创建了所有项目的笛卡尔积。这意味着我们可以直接在一个for循环中解包值,如下所示:

from itertools import productcolors = ['Red', 'Green']sizes = ['S', 'M', 'L']

for color, size in product(colors, sizes):    print(color, size)

# Returns:# Red S# Red M# Red L# Green S# Green M# Green L

成对遍历列表

在某些情况下,你需要成对地遍历列表,这意味着你需要访问一个项目及其邻居。为此,你可以编写以下代码:

vals = [1, 2, 3, 4]

for i in range(len(vals) - 1):    print((vals[i], vals[i+1]))

# Returns:# (1, 2)# (2, 3)# (3, 4)

这种方法效果很好,但不易阅读,也不明确它的作用。这就是Python 3.10中引入的pairwise()函数派上用场的地方!让我们看看我们如何简化我们的代码:

from itertools import pairwisevals = [1, 2, 3, 4]

for pair in pairwise(vals):    print(pair)

# Returns:# (1, 2)# (2, 3)# (3, 4)

这是一个比我们之前写的代码更明确的版本,让我们立即理解代码的目的。itertools库为你提供了许多有用的函数来迭代对象。知道何时应用这些函数真的能让你的技能提升到另一个层次。

结论

掌握Python不仅仅是记住语法——它是关于拥抱优雅,知道何时在简洁性和可读性之间取得平衡。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-09-13 09:30
  • 阅读 ( 67 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1478 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章