本文适合阅读对象:已学完Python基础课程,并能熟练使用Python基本用法编程。如果还有一些其他语言的基础最好不过了,如果没有Python基础或者正在学习中,请点击以下链接:

Python基础教程

一、“Python之禅"的彩蛋

虽然任何一本介绍Python的图书基本都会提到Tim Peters的“Python之禅”,但这段话无论提多少遍都不为过。它激励着让无数人趋之若鹜,努力成为更优秀的Programmer,希望大家也能从中受益。

“Python之禅”作为彩蛋藏在Python语言当中,只需进入任何一个Python解释器会话并运行这行语句就能看到:

import this

Python代码结果如下:

Beautiful is better than ugly.

# 优美胜于丑陋(Python以编写优美代码为目标)

Explicit is better than implicit.

# 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似) 

Simple is better than complex.

# 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现) 

Complex is better than complicated.

# 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)

Flat is better than nested.

# 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套) 

Sparse is better than dense.

# 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题) 

Readability counts.

# 可读性很重要(优美的代码是可读的) 

Special cases aren't special enough to break the rules.Although practicality beats purity.

# 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上) 

Errors should never pass silently.Unless explicitly silenced.

#不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写except:pass风格的代码) 

In the face of ambiguity, refuse the temptation to guess.

# 当存在多种可能,不要尝试去猜测 

There should be one-- and preferably only one --obvious way to do it.

# 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法) Although that way may not be obvious at first unless you're Dutch.

# 虽然这并不容易,因为你不是 Python 之父(这里的Dutch是指Guido)

Now is better than never.Although never is often better than right now.

# 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)

If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.# 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准) 

Namespaces are one honking great idea -- let's do more of those!

# 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)

从设计的角度来说,python语言追求的是一种独特的简洁和高可读性;从哲学的角度来讲,python采用了一种所谓的极简主义的设计理念。通过这些如诗一般的文字表达了python编程之美,这就是python之禅。个人感觉python之禅更像修炼武功的心法口诀,需要学习者或开发者们用心去体会其中的奥妙之处,正所谓只可意会不可言传或许用在此处怎么也不为过。

二、使用enumerate()升级循环

如果循环的结果需要用到项的索引,该怎么办呢?可以使用Python内置的enumerate()函数,这是Python很神奇的特性,可以让循环持有并返回当前运行的索引,大家一起来看看:

items=['a','b','c']

for i, item in enumerate(items):

    print(f'{i}:{item}')

Python代码结果如下:

三、理解for-in

如何编写出Python-ful的代码?对于之前学过C语言或Java语言,开始学习Python后,写出来的代码可能是这样的,充满C或Java的风格,举个栗子:

items=['a','b','c']

i = 0

while i < len(items):

   print(items[i])

   i+=1

Python代码结果如下:

这段代码没毛病,执行正常,就是非常没有Python特色,而是C或Java充满的韵味~为什么这么说呢,主要有两点:

代码中手动跟踪了索引:i,先初始化为零,然后在每次循环迭代时仔细递增索引。

为了确定迭代次数,使用len()获取items容器的大小。

如何写出具有Python特色的代码呢?微微老师专门起了个名字,叫做Python-ful的代码。下面来重构第一个代码示例,Python其实无需手动更新索引,可以自动进行,在Python中可以用for循环很好地做到这一点,做法是利用内置的range()自动生成索引:

items=['a','b','c']

for i in range(len(items)):

   print(items[i])

Python代码结果如下:

大家看出来了吗,已经比之前好一点,代码也精简了,但仍然不是很有Python特色,感觉依然有点像一个Java风格的迭代代码。为什么这么说呢?因为Python容器的遍历方式非常之简洁,在Python中,for循环实际上for-each循环,可以直接在容器或序列中迭代元素,无需索引查找,直接这样写就可以了:

完美实现!是不是有些被震撼到的感觉?!Python坚持极简主义理念,这个解决方案很有Python特色,非常整洁,看上去就像在阅读编程教科书中的伪代码一样。

注意:循环中不再跟踪容器的大小,也不必使用运行时索引来访问元素。现在容器本身负责分发将要处理的元素,如果容器是有序的,那么所得到的元素序列也是有序的;如果容器是无序的,那么将以随机顺序返回其元素,但循环仍然会遍历所有元素。

如果使用字典时需要同时循环迭代获取字典的键和值,该怎么办呢?for循环同样没有问题,只需同时写两个索引标志即可,一个代表键,一个代表值。

emails={'a':'s@sina.com',

'b':'h@163.com',

'c':'m@qq.com'}

for i, j in emails.items():

    print(f'{i}:{j}')

Python代码结果如下:

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月29日

热门专题

外贸网站建设|外贸网站建设,英文网站制作,英文网站设计,美国主机空间,外贸建站平台,多语言网站制作
外贸网站建设
中源管业|中源管业,中源管业公司,中源管业有限公司,中源管业电话,中源管业地址,中源管业电力管,中源管业mpp电力管,中源管业cpvc电力管,中源管业pe穿线管
中源管业
大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
自考本科|自考本科有用吗,自考文凭,自考本科文凭,自考文凭有用吗,自考本科文凭有用吗,自考文凭承认吗
自考本科
开放大学|开放大学报名,开放大学报考,开放大学,什么是开放大学,开放大学学历,开放大学学费,开放大学报名条件,开放大学报名时间,开放大学学历,开放大学专业
开放大学
昆明网站建设|昆明网站建设,昆明网站开发,昆明网站建设公司,昆明网站建设价格,昆明网站设计,昆明网站制作,网页设计,高端网站建设,高端网站设计
昆明网站建设
云南巨榕教育投资集团有限公司|云南巨榕教育投资集团有限公司,巨榕教育集团,巨榕教育
云南巨榕教育投资集团有限公司
云南开放大学|云南开放大学报名,云南开放大学报考,云南开放大学,什么是云南开放大学,云南开放大学学历,云南开放大学学费,云南开放大学报名条件,云南开放大学报名时间,云南开放大学学历,云南开放大学专业
云南开放大学

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部