簡體   English   中英

比較Python中的性能:相等與不相等

[英]Comparing Performance in Python: equal versus non equal

在比較任何變量時,可以選擇比較平等與比較不平等。 對於具有一個元素的變量, 而不是字符串/ list / tuple / etc ... ,差異可能不存在或可忽略不計。

問題:當比較兩個多元素變量時,檢查它們是否比它們是否相等更慢或更快。

我的直覺告訴我,比較他們是否不平等應該更快。 我很好奇是否有人可以告訴我這是否屬實,以及對於哪種類型的多元素類型都是如此。

注意 :我看過了,但在這里找不到任何能回答我問題的帖子。 這可能是顯而易見的,但我希望得到更多的意見,而不僅僅是我自己的意見。

你可以隨時檢查:

>>> timeit("{'a': 1, 'b': 2} == {'a': 2, 'b': 1}")
0.29072967777517983
>>> timeit("{'a': 1, 'b': 2} != {'a': 2, 'b': 1}")
0.2906114293159803

差異似乎可以忽略不計......也許是另一個測試案例?

>>> timeit("range(30) == range(35)")
0.7179841181163837
>>> timeit("range(30) != range(35)")
0.725536848004765

再次,可以忽略不計。

>>> timeit("a == b", "a = {'a': 1, 'b': 2}; b = {'a': 2, 'b': 1}")
0.06806470555693522
>>> timeit("a != b", "a = {'a': 1, 'b': 2}; b = {'a': 2, 'b': 1}")
0.06724365965146717

隨着對象的創建搬走了。 不可否認的是,小的例子,但我仍然認為,當它們變得明顯不同時,它們都會在適當時使用短路。

我認為它與object.__eq__()object.__ne__直接相關。

當您使用== (等於)或!= (非等於)時啟動此方法,並且在要比較的對象的函數中,它可能更快或更慢,具體取決於方法的編寫方式。

請參閱官方文檔中的Datamodel Basic自定義

我對一些Cortex M3程序集(或至少我的教授說它就是這樣)的經驗是,當你檢查相等或不相等時,有一個比較命令設置3位,一個if語句(如果可以的話)稱之為),它看着一個特定的。 基本上你比較AB ,3比特是更小,等於和更大,然后當你檢查任何東西它應該是檢查它是更大還是更小(2個檢查,所以2個周期)的不相等,或應用不是等於標志,取決於架構可能是2個不同的動作或單個循環。 因此我推測它取決於編譯器,匯編器和CPU的架構。

然而,這應該意味着你可以制作兩個程序,每個程序進行大量的此類檢查,並為執行計時,其中巨大的數量將達到成千上萬(通過C / C ++中的執行時間來判斷)。 在我看來,這是一個相當可行的任務,可以手動定時,因此你不會弄亂定時器,並且由於定時器在許多語言中具有一些特殊性,它們甚至可能無法捕獲單個執行時間聲明。 或者你可以計時巨大的循環,看看計算機說的是什么。

但請記住,如果在非等效循環中獲得1.1倍的時間,這並不意味着不等式需要1.1倍的相等檢查時間,因為循環具有更大的周期,它可能是時間的2倍。 對於每個循環使用更多檢查的更多測試,應該非常容易確定循環所花費的時間和檢查所花費的時間。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM