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

系统 1656 0

链式比较、奇怪的字母、有趣的import...Python冷知识(六)_第1张图片


本文转载自Python编程时光(ID:Python-Time)


冷知识系列,已经更新至第六篇。

谈谈 Python 那些不为人知的冷知识(一)

谈谈 Python 那些不为人知的冷知识(二)

谈谈 Python 那些不为人知的冷知识(三)

谈谈 Python 那些不为人知的冷知识(四)

谈谈 Python 那些不为人知的冷知识(五)


链式比较

先给看一个示例。

            

>>>  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

就会自动打开一个网页。

链式比较、奇怪的字母、有趣的import...Python冷知识(六)_第2张图片


局部/全局变量分不清

在开始讲之前,你可以试着运行一下下面这小段代码。

            

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 ”,了解票务以及会务详情。

链式比较、奇怪的字母、有趣的import...Python冷知识(六)_第3张图片

推荐阅读

  • 人工智能的浪潮中,知识图谱何去何从?

  • 从Pixel 3a到Android Q,一份谷歌AI能力的“成绩单”|Google I/O全程回顾

  • Python datetime指南:教你如何处理日期和时间(附试题+答案)

  • 从小白到入门算法,我的经验分享给你~

  • 开了个会:破局企业云通信,华为加速 Buff 开发者!

  • 独家! 币安被盗原因找到了! 7074枚比特币竟是这样丢掉的

  • 保送清华成博士,华为 12 年搞通信,他为何如此看待 5G ?|人物志

  • 补偿100万?Oracle裁900+程序员,新方案已出!

  • 什么叫云原生应用?| 技术头条

  • @程序员,不加班就滚吧 | 程序员有话说

640?wx_fmt=png


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论