本文转载自Python编程时光(ID:Python-Time)
冷知识系列,已经更新至第六篇。
谈谈 Python 那些不为人知的冷知识(一)
谈谈 Python 那些不为人知的冷知识(二)
谈谈 Python 那些不为人知的冷知识(三)
谈谈 Python 那些不为人知的冷知识(四)
谈谈 Python 那些不为人知的冷知识(五)
链式比较
先给看一个示例。
>>>False==False==True
False
你知道这个表达式会返回 False 吗?
我再给你举个例子,你可能就懂了。
f18<age<60:
print("youngman")
如果还不明白,再给你整个等价写法。
>>>False==FalseandFalse==True
False
奇怪的字母
直接看下列例子,在Python 2.x 中
>>>value=11
>>>valuе=32
File"<stdin>",line1
valuе=32
^
SyntaxError:invalidsyntax
在Python 3.x 中
>>>value=11
>>>valuе=32
>>>value
11
我相信你一开始看到这里,一定是目瞪口呆。你可以在自己的电脑上尝试一下,你会发现你不管在哪个版本的 Python 里运行都没有问题。
如果你想重现我这个场景,你可能复制我上面的代码粘贴至自己的命令行中即可。
在这里,也不卖关子了,上面代码中第二行的е和 第一行的e是不一样的。(为了让你区分开来,上面的两个 e 的字体我选不一样的,当你在你的 cmd 窗口中执行时,是完全区分不出来的。)
第二行的e是 Cyrillic(西里尔)字母,而不是我们熟悉的英文字母。
>>>ord('е')#cyrillic'e'(Ye)
1077
>>>ord('e')#latin'e',asusedinEnglishandtypedusingstandardkeyboard
101
>>>'е'=='e'
False
细思恐极,平时可千万不要得罪同事们,万一辞职的时候,把你项目里的e全局替换成e,到时候连错都不知道错哪了哈哈。
x == +x 吗
在大多数情况下,这个等式是成立的。
>>>n1=10086
>>>n2=+n1
>>>
>>>n1==n2
True
什么情况下,这个等式会不成立呢?由于Counter的机制,+用于两个 Counter 实例相加,而相加的结果如果元素的个数<=0,就会被丢弃。
>>>fromcollectionsimportCounter
>>>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__
HelloWorld!
Python之禅
>>>importthis
TheZenofPython,byTimPeters
Beautifulisbetterthanugly.
Explicitisbetterthanimplicit.
Simpleisbetterthancomplex.
Complexisbetterthancomplicated.
Flatisbetterthannested.
Sparseisbetterthandense.
Readabilitycounts.
Specialcasesaren'tspecialenoughtobreaktherules.
Althoughpracticalitybeatspurity.
Errorsshouldneverpasssilently.
Unlessexplicitlysilenced.
Inthefaceofambiguity,refusethetemptationtoguess.
Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.
Althoughthatwaymaynotbeobviousatfirstunlessyou'reDutch.
Nowisbetterthannever.
Althoughneverisoftenbetterthan*right*now.
Iftheimplementationishardtoexplain,it'sabadidea.
Iftheimplementationiseasytoexplain,itmaybeagoodidea.
Namespacesareonehonkinggreatidea--let'sdomoreofthose!
反地心引力漫画
在 cmd 窗口中导入antigravity
>>>importantigravity
就会自动打开一个网页。
局部/全局变量分不清
在开始讲之前,你可以试着运行一下下面这小段代码。
a=1
deffunc01():
a+=1
func01()
看似没有毛病,但实则已经犯了一个很基础的问题,这个报错相当常见吧?
>>>func01()
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<module>
File"<stdin>",line2,infunc01
UnboundLocalError:localvariable'a'referencedbeforeassignment
当程序运行到a += 1时,Python 解释器就认为在函数内部要给a这个变量赋值,当然就把a当做局部变量了,报错是理所应当的。理解了上面的例子,给你留个思考题。为什么下面的代码不会报错呢?
a=1
deffunc02():
print(a)
func02()
(本文为 AI科技大本营转载文章,转载请联系原作者)
◆
CTA核心技术及应用峰会
◆
5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。
更多重磅嘉宾请识别海报二维码查看,目前会议早鸟票发售中(原票价1099元),点击阅读原文即刻抢购。添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。
推荐阅读
人工智能的浪潮中,知识图谱何去何从?
从Pixel 3a到Android Q,一份谷歌AI能力的“成绩单”|Google I/O全程回顾
Python datetime指南:教你如何处理日期和时间(附试题+答案)
从小白到入门算法,我的经验分享给你~
开了个会:破局企业云通信,华为加速 Buff 开发者!
独家! 币安被盗原因找到了! 7074枚比特币竟是这样丢掉的
保送清华成博士,华为 12 年搞通信,他为何如此看待 5G ?|人物志
补偿100万?Oracle裁900+程序员,新方案已出!
什么叫云原生应用?| 技术头条
@程序员,不加班就滚吧 | 程序员有话说