中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python問題怎么解決

發布時間:2023-05-04 09:43:32 來源:億速云 閱讀:124 作者:zzz 欄目:編程語言

今天小編給大家分享一下Python問題怎么解決的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1.懶惰的 Python
class A:
def function(self):
return A()
a = A()
A = int
print(a.function())
2.四舍五入
>>> round(7 / 2)
>>> round(3 / 2)
>>> round(5 / 2)
3.type 和 object
>>> isinstance(type, object)
>>> isinstance(object, type)
>>> isinstance(object, object)
>>> isinstance(type, type)
4、空的布爾值
>>> any([])
>>> all([])
5.類內部函數的優先級
class A:
answer = 42
def __init__(self):
self.answer = 21
self.__add__ = lambda x, y: x.answer + y
def __add__(self, y):
return self.answer - y
print(A() + 5)
6.求和
>>> sum("")
>>> sum("", [])
>>> sum("", {})
7.意外的屬性
>>> sum([
el.imag 
for el in [
0, 5, 10e9, float('inf'), float('nan')
]
])
8.輸出負數倍的字符串
>>> "this is a very long string" * (-1)
9.見過負數的 0
max(-0.0, 0.0)
10.違反數學規則
>>> x = (1 << 53) + 1
>>> x + 1.0 > x

答案與解釋

以下結果均在 Python 3.8.5 版本驗證過。

1.懶惰的 Python
class A:
def function(self):
return A()
a = A()
A = int
print(a.function())

正確的結果是 0:

Python問題怎么解決

這個不難,因為 Python 的函數定義其實是可執行語句,函數在被調用前都是不存在的,實際調用時才會綁定變量。

在上面的示例中,在函數定義期間,Python 允許引用尚未定義的類或函數。但是,在執行期間,A 已經是 int 類,這意味著函數方法將返回一個新創建的 int 實例,int 實例的默認值就是 0。

如果沒有 A = int,結果就是:

Python問題怎么解決

2.四舍五入
>>> round(7/2)
4
>>> round(3/2)
2
>>> round(5/2)
2

正確的結果是 4 2 2,你肯定覺得最后的 round(2.5) == 2 有點違反數學規則,這是因為 Python 的 round 方法實現了銀行家的四舍五入[1],其中所有半值將四舍五入到最接近的偶數。

3.type 和 object
>>> isinstance(type, object)
True
>>> isinstance(object, type)
True
>>> isinstance(object, object)
True
>>> isinstance(type, type)
True
>>>

都是 True,有點懷疑 object 和 true 是不是一個東西?

在 Python 中,一切都是對象,因此對對象的任何實例檢查都將返回 True。

isinstance(Anything, object) #=> True。

type 表示用于構造所有 Python 類型的元類。因此,所有類型:int、str、object 都是 type 類的實例,就像 python 中的所有對象一樣,它也是一個對象。但 type 是 Python 中唯一的是它自身的一個實例的對象。

>>> type(1)>>> type(int)>>> type(type)>>>
4.空的布爾值
>>> any([])
False
>>> all([])
True
>>> any([True,False])
True
>>> all([True,False])
False
>>>

當參數是空列表的時候,any 和 all 的結果有點出乎意料。但是明白了它的檢查邏輯,就合情合理了:

Python 中的邏輯運算符是惰性的,any 的算法是尋找第一次出現為真元素,如果沒有找到,則返回 False,由于序列為空,因此沒有元素可以為真,因此 any([]) 返回 False。

同樣的,all 算法是查找第一個 false 元素,如果沒有找到,則返回 True,由于空序列中沒有假元素,所以 all([]) 返回 True,是不是有點空洞真理概念?

5.類內部函數的優先級
class A:
answer = 42
def __init__(self):
self.answer = 21
self.__add__ = lambda x, y: x.answer + y
def __add__(self, y):
return self.answer - y
print(A() + 5)

正確的結果是:16:

Python問題怎么解決

對象函數的查找順序是:實例級別 > 類級別 > 父類級別,上面的代碼,在初始化時綁定的函數就是實例級別,在類內部定義的就是類級別。

但是雙下劃線包裹的魔法函數不在這個規則之內,也就是說 Python 優先查找類級別的魔法函數。

如果說把雙下劃線去掉,那么結果就是 26 啦:

Python問題怎么解決

6.求和
>>> sum("")
0
>>> sum("", [])
[]
>>> sum("", {})
{}

為了搞清楚這里發生了什么,我們需要檢查 sum 函數的簽名:

sum(iterable, /, start=0)

sum 從左到右開始求和可迭代的項目,并返回總數。iterable 一般是數字,起始值不允許是字符串。

在上述所有情況下,空字符串都被視為空序列,因此 sum 將簡單地將起始參數作為總結果返回。在第一種情況下,它默認為零,對于第二種和第三種情況,它意味著空列表和字典作為開始參數傳入。

7.意外的屬性
>>> sum([
... el.imag
... for el in [
... 0, 5, 10e9, float('inf'), float('nan')
... ]
... ])
0.0

上面的代碼有個 imag 屬性,但是我們根本沒有定義它,運行也沒有報錯,怎么回事呢?

這是因為 Python 中的所有數值類型(int、real、float)都繼承自基對象類,它們都支持 real 和 imag 屬性,分別返回實部和虛部。這也包括 Infinity 和 NaN。

8.輸出負數倍的字符串
>>> "this is a very long string" * (-1)
''
>>>

正確的結果是 '',所有的負數倍的字符串,都當作 0 倍,返回 ''。

9.見過負數的 0.0
max(-0.0, 0.0)

為什么會這樣?出現這種情況是由于兩個原因。負零和零在 Python 中被視為相等。max 的邏輯是,如果多個最大值,返回遇到的第一個。因此 max 函數返回第一次出現的零,它恰好是負數。

10.違反數學規則
>>> x = (1 << 53) + 1
>>> x + 1.0 > x
False

正確的結果是 False,這違反了數學規則啊,為什么呢?

這種違反直覺的行為歸咎于三件事:長算術、浮點精度限制和數值比較。

Python 可以支持非常大的整數,如果隱式超過限制則切換計算模式,但 Python 中的浮點精度是有限的。

2?3 + 1 = 9007199254740993

是不能完全表示為 Python 浮點數的最小整數。因此,為了執行加 1.0,Python 將 9007199254740993 轉換為 float,將其四舍五入為 Python 可以表示的 9007199254740992.0,然后向其添加 1.0,但由于相同的表示限制,它將其設置回 9007199254740992.0:

>>> float(9007199254740993)
9007199254740992.0
>>> 9007199254740992.0 + 1.0
9007199254740992.0
>>>

此外 Python 在 float 與 int 比較時并不會拋出錯誤,也不會嘗試將兩個操作數轉換為相同的類型。相反,他們比較實際的數值。因為 9007199254740992.0 比 9007199254740993 小,因此 Python 返回 False。

以上就是“Python問題怎么解決”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

杂多县| 广昌县| 崇礼县| 会昌县| 信丰县| 靖安县| 黑山县| 临泽县| 登封市| 神木县| 都昌县| 阳朔县| 福贡县| 平山县| 资溪县| 郯城县| 锦屏县| 边坝县| 永善县| 蓝田县| 临城县| 湖州市| 余江县| 南丰县| 大宁县| 顺平县| 南充市| 吴川市| 合肥市| 洛南县| 广宁县| 镇宁| 德钦县| 来凤县| 广德县| 桐城市| 肥乡县| 信阳市| 台东县| 金山区| 綦江县|