本文轉載自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?
"
????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?
"
??File?
"
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 ”,了解票務以及會務詳情。
推薦閱讀
-
人工智能的浪潮中,知識圖譜何去何從?
-
從Pixel 3a到Android Q,一份谷歌AI能力的“成績單”|Google I/O全程回顧
-
Python datetime指南:教你如何處理日期和時間(附試題+答案)
-
從小白到入門算法,我的經驗分享給你~
-
開了個會:破局企業云通信,華為加速 Buff 開發者!
-
獨家! 幣安被盜原因找到了! 7074枚比特幣竟是這樣丟掉的
-
保送清華成博士,華為 12 年搞通信,他為何如此看待 5G ?|人物志
-
補償100萬?Oracle裁900+程序員,新方案已出!
-
什么叫云原生應用?| 技術頭條
-
@程序員,不加班就滾吧 | 程序員有話說
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
