Wtfpython講解了大量的Python編譯器的內容。其實它們不一定很實用,只要程序員按照規範的語法輸入基本上是不會碰到其中的「BUG「的,不過其中有一部分內容是真的很有趣或者可能有用,這裡將其中幾個較為有用或有趣的摘錄下來,看看能否激起大家前去一閱的興趣。
Tips:
1.python中對「-」號的定義:Pyhon的自由度真的很高啊,不過這個自由度是建立在定義嚴格的基礎上的。-」號是「+」號的反向,具體一點,就是這樣:
2.多線程處理:多個Python線程不會同時運行你的Python代碼。多線程看起來很直觀,可以派生出幾個線程,讓他們同時執行你的Python代碼,但是由於Python存在全局解釋器鎖(Global Interpreter Lock),你所做的只是讓你的線程在相同的內核上輪流執行。Python線程適用於IO綁定任務,但為了實現CPU綁定任務的Python實際並行化,您可能需要使用Python 多處理模塊(multiprocessing module)。
有關全局解釋器鎖的內容可以查看官方文檔:
https://wiki.python.org/moin/GlobalInterpreterLock
3.關於count函數:
'abc'.count('') == 4.
Count函數用於統計字元串中某個子串的出現次數,以下代碼模擬了該函數的執行過程,或許可以解釋這個問題:
def count(s, sub):
result = 0
for i in range(len(s) + 1 - len(sub)):
result += (s[i:i + len(sub)] == sub)
return result
4.兩個特殊字元串:
nan與inf意義分別是「不存在」與「無窮大」,這兩個概念在被強制轉換為float類型後生效。即:
a=float(『inf』) 正無窮大
b=float(『-inf』)負無窮大
c=float(『nan』)不存在的數
這樣的話會有:
>>>a+3
inf
>>>b+3
-inf
>>>c+3
nan
Ps:無限的哈希值是10 5 xπ
5.+=的優先順序要比+高,除非你把+號連接的內容打上括弧。
6.以Python為舟,看看Python的哲學:
>>>import this
>>> love = this
>>> this is love
True
>>> love is True
False
>>> love is False
False
>>> love is not True or False
True
>>> love is not True or False; love is love # Love is complicated(複雜的)
True
算一個梗吧,哈哈。
這是this模塊的內容https://hg.python.org/cpython/file/c3896275c0f6/Lib/this.py
7.global的使用:
在函數外定義的變數,可以被函數引用,但是如果函數內有同名變數的賦值(不論位置),引用都會觸發錯誤。
例:
a = 1
def some_func():
return a
def another_func():
a += 1
return a
運行:
>>> some_func()
1
>>> another_func()
UnboundLocalError: local variable 'a' referenced before assignment
除非改成這樣:
def another_func()
global a
a += 1
return a
8、關於哈希:
some_dict = {}
some_dict[5.5] = "Ruby"
some_dict[5.0] = "JavaScript"
some_dict[5] = "Python"
運行:
>>> some_dict[5.5]
"Ruby"
>>> some_dict[5.0]
"Python"
>>> some_dict[5]
"Python"
由於5.0的哈希值與5相同,因此JavaScript被Python覆蓋了(emmmm,滿滿的惡意)
測試兩鍵哈希是否相同用hash(a)==hash(b)即可。
由於存取只以哈希值為標準,因此字典也被稱作哈希表。
9.當並列的語句都含有return時,以最後一句的內容為準。
def some_func():
try:
return 'from_try'
finally:
return 'from_finally'
運行:
>>> some_func()
'from_finally'