链式比较、奇怪的字母、有趣的import...Python冷知识(六)

本文转载自Python编程时光(ID:Python-Time)
冷知识系列,已经更新至第六篇。
链式比较
先给看一个示例。
>>>?False?==?False?==?True
False
你知道这个表达式会返回 False 吗?
我再给你举个例子,你可能就懂了。
f?18?< ?age?60:
????print("young?man")
如果还不明白,再给你整个等价写法。
>>>?False?==?False?and?False?==?True
False
奇怪的字母
直接看下列例子,在Python 2.x 中
>>>?value?=?11
>>>?valuе?=?32
??File?"" ,?line?1
????valuе?=?32
????????^
SyntaxError:?invalid?syntax
在Python 3.x 中
>>>?value?=?11
>>>?valuе?=?32
>>>?value
11
我相信你一开始看到这里,一定是目瞪口呆。你可以在自己的电脑上尝试一下,你会发现你不管在哪个版本的 Python 里运行都没有问题。
如果你想重现我这个场景,你可能复制我上面的代码粘贴至自己的命令行中即可。
在这里,也不卖关子了,上面代码中第二行的?е?和 第一行的?e?是不一样的。(为了让你区分开来,上面的两个 e 的字体我选不一样的,当你在你的 cmd 窗口中执行时,是完全区分不出来的。)
第二行的?e?是 Cyrillic(西里尔)字母,而不是我们熟悉的英文字母。
>>>?ord('е')?#?cyrillic?'e'?(Ye)
1077
>>>?ord('e')?#?latin?'e',?as?used?in?English?and?typed?using?standard?keyboard
101
>>>?'е'?==?'e'
False
细思恐极,平时可千万不要得罪同事们,万一辞职的时候,把你项目里的?e?全局替换成?e,到时候连错都不知道错哪了哈哈。
x == +x 吗
在大多数情况下,这个等式是成立的。
>>>?n1?=?10086
>>>?n2?=?+n1
>>>
>>>?n1?==?n2
True
什么情况下,这个等式会不成立呢?由于Counter的机制,+?用于两个 Counter 实例相加,而相加的结果如果元素的个数?< =0,就会被丢弃。
>>>?from?collections?import?Counter
>>>?ct?=?Counter('abcdbcaa')
>>>?ct
Counter({'a':?3,?'b':?2,?'c':?2,?'d':?1})
>>>?ct['c']?=?0
>>>?ct['d']?=?-2
>>>
>>>?ct
Counter({'a':?3,?'b':?2,?'c':?0,?'d':?-2})
>>>
>>>?+ct
Counter({'a':?3,?'b':?2})
有趣的import
import 是?Python 导包的方式。你知道 Python 中内置了一些很有(wu)趣(liao)的包吗?
Hello World
>>>?import?__hello__
Hello?World!
Python之禅
>>>?import?this
The?Zen?of?Python,?by?Tim?Peters
Beautiful?is?better?than?ugly.
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.
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.
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!
反地心引力漫画
在 cmd 窗口中导入antigravity
>>>?import?antigravity
就会自动打开一个网页。

局部/全局变量分不清
在开始讲之前,你可以试着运行一下下面这小段代码。
a?=?1
def?func01():
????a?+=?1
func01()
看似没有毛病,但实则已经犯了一个很基础的问题,这个报错相当常见吧?
>>>?func01()
Traceback?(most?recent?call?last):
??File?"" ,?line?1,?in?
??File?"" ,?line?2,?in?func01
UnboundLocalError:?local?variable?'a'?referenced?before?assignment
当程序运行到?a += 1?时,Python 解释器就认为在函数内部要给?a?这个变量赋值,当然就把?a?当做局部变量了,报错是理所应当的。理解了上面的例子,给你留个思考题。为什么下面的代码不会报错呢?
a?=?1
def?func02():
????print(a)
func02()
(本文为 AI科技大本营转载文章,转载请联系原作者)
◆
CTA核心技术及应用峰会
◆
5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。
更多重磅嘉宾请识别海报二维码查看,目前会议早鸟票发售中(原票价1099元),点击阅读原文即刻抢购。添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。

推荐阅读
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 《求是》发表习近平总书记重要文章 7904509
- 2 《怦然心动》导演家中死亡 其子已被捕 7809517
- 3 欧洲拟组“多国部队”支持乌克兰 7714412
- 4 明年经济工作政策取向确立这八个字 7618581
- 5 韩国年轻人流行周五下班来中国 7524288
- 6 中华书局回应《唐诗三百首》出现错误 7426506
- 7 30万级的玛莎拉蒂两天被一抢而空 7333062
- 8 9天涨粉400万的“蛋神”发声 7234113
- 9 男子买炒饼打包5头蒜被老板劝退 7143482
- 10 如何让你我的钱袋子鼓起来 7042234


AI100
