百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

让你看起来像初学者的4个Python错误!

off999 2024-11-20 20:03 39 浏览 0 评论

引言

Python是一种非常容易学习的语言,并且不会强制你使用特定的约定。但也很容易掉入一些陷阱,使你看起来像个初学者。为了避免看起来像个彻头彻尾的初学者,看看以下这些提示以及如何解决它们。

1. 不使用enumerate()

Python使得遍历列表之类的操作变得非常简单。看看下面的示例:

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

# 输出:
# Python
# is
# fun!

但是,如果你需要引用每个项目的索引呢?你可能遇到过甚至编写过如下代码:

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

# 输出:
# 0 Python
# 1 is
# 2 fun!

虽然这能工作,但它并不优雅!而且它并没有立即清晰地显示出你的代码在做什么。

这时,enumerate()函数就派上用场了!让我们看看它是如何简化这个过程的:

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

# 输出:
# 0 Python
# 1 is
# 2 fun!

是不是好很多?

作为一个专业提示,你甚至可以更改起始值。假设你想从1开始标记项目。那么你只需编写:

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

好了,让我们进入下一个初学者习惯!

2. 不使用三元操作符

当你使用if-else语句分配一个值时,你为一个简单的操作编写了很多行代码。看看下面的场景:

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

print(raise_amount)

# 输出:
# 20

在上面的示例中,我们创建了一个if-else语句,检查某人的销售金额是否超过50。如果是,那么他们得到20的加薪。否则,他们得到10的加薪。

虽然我们的代码很干净,但它并不简洁。我们可以通过使用三元赋值语句大大简化这一过程:

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

print(raise_amount)

# 输出:
# 20

这对于非常简单的赋值操作效果最好。虽然你可以变得更复杂,但不要为了简洁而牺牲可读性!

3. 不使用列表推导式

Python的推导式使创建列表、字典甚至生成器变得轻而易举。它们提供了一种优雅且可读的方法来轻松创建数据结构。

让我们看一个示例,看看你如何使用for循环创建一个平方数的列表:

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

print(squares)

# 输出:
# [1, 4, 9, 16, 25]

现在让我们比较一下列表推导式:

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

# 输出:
# [1, 4, 9, 16, 25]

我们可以看到使用列表推导式是多么简单明了!不仅代码更简洁,而且也更易读。

创建字典推导式同样简单。让我们再次比较两种方法,创建一个字典,其中键是原始数字,值是它的平方:

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

print(squares)

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

现在让我们看看如何用字典推导式简化它!

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

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

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

3b. 过度使用推导式

Python的推导是非常强大——非常强大。你可以在其中构建复杂的if-else语句,甚至相互嵌套。

让我们看看如何在推导式中加入if-else语句:

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

# 输出:
# ['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)

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

4. 不使用itertools

Python的itertools是Python中的一颗隐藏的宝石。表面上看,许多它的功能似乎很简单,但它们提供了优雅而强大的方式来遍历不同的对象。

防止嵌套循环

假设你有两个列表,并且想要遍历所有可能的组合。你可以像下面这样编写嵌套for循环:

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

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

# 输出:
# Red S
# Red M
# Red L
# Green S
# Green M
# Green L

与我们在本文中讨论的所有其他方法类似,这种方法可以工作,但并不优雅。

幸运的是,itertools带有product()函数,它创建所有项目的笛卡尔积。这意味着我们可以在一个单独的for循环中直接解包值,如下所示:

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

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

# 输出:
# 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]))

# 输出:
# (1, 2)
# (2, 3)
# (3, 4)

这种方法效果不错,但不易读,也不太明确。

这时引入了pairwise()函数,它在Python 3.10中被引入!让我们看看如何简化我们的代码:

from itertools import pairwise
vals = [1, 2, 3, 4]

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

# 输出:
# (1, 2)
# (2, 3)
# (3, 4)

这是我们之前编写的代码的一个更明确的版本,使我们可以立即理解代码的目的。

itertools库为你提供了许多有用的函数来遍历对象。知道何时应用这些函数确实会将你的技能提升到另一个水平。

结论

掌握Python不仅仅是记住语法——它还涉及到优雅的编写代码并知道何时在简洁性和可读性之间取得平衡。

记住Python之禅:

美丽胜于丑陋。 显式优于隐式。 简单胜于复杂。 复杂胜于难解。 扁平胜于嵌套。 稀疏胜于密集。 可读性很重要。

上面的提示应该能真正帮助你拥抱这些Python之禅的前几行!

你有任何其他你喜欢的提示吗?欢迎在下面的评论中分享!

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: