回答
作爲每comments in the source code,
轉換一個數字或字符串的整數,或者,如果沒有給出參數 返回0。如果x是數字,則返回
x.__int__
()。對於浮點數 ,這會向零截斷。如果x不是數字或如果基給出,則x必須是一個字符串, 字節或ByteArray實例表示整數字面在 給定的基
所以,如果輸入是一個數字,__int__
函數將在該對象上被調用,結果將被返回。內部nb_int
is an item in PyNumberMethods structure,對應於__int__
功能。按照最新的源代碼在寫這篇文章,long_long
is the function which corresponds to the nb_int
function,這是這樣
long_long(PyObject *v)
{
if (PyLong_CheckExact(v))
Py_INCREF(v);
else
v = _PyLong_Copy((PyLongObject *)v);
return v;
}
這裏PyLong_checkExact
定義的時間是一個宏觀的,剛剛檢查,如果當前的對象實際上是long類型。如果它是真的,它只是增加引用計數,並返回對象,沒有額外的事情。
如果輸入是在一個字符串的形式,字符串必須被轉換爲數字同PyLong_FromUnicodeObject
功能。
你爲什麼不比較兩者?
>>> def f(): int('42')
...
>>> def g(): int(42)
...
>>> from timeit import timeit
>>> timeit(f)
0.3384080480027478
>>> timeit(g)
0.2566616949989111
@Crystal這將取決於你正在使用或您的最終用戶將使用實施。 – Hyperboreus
如果你傳遞一個int
對象int()
,你會得到相同的對象返回(CPython的3.3.2):
>>> a = 1000 * 1000 # large enough to avoid interning
>>> b = int(a)
>>> a is b
True
我不知道你所說的「算法的性能差異」是什麼意思,但它不會創建一個新對象。
不需要道歉,這是更好的答案 – jonrsharpe
這功能long_long
in Objects/longobject.c
的處理,如通過thefourtheye更詳細地解釋:
static PyObject *
long_long(PyObject *v)
{
if (PyLong_CheckExact(v))
Py_INCREF(v);
else
v = _PyLong_Copy((PyLongObject *)v);
return v;
}
所以,當參數是已經是int
,引用計數被遞增,並且在同一對象返回。
對於一般不可變類型,您可以採取類似的行爲。例如,tuple(mytuple)
返回mytuple
的新參考,而相比之下,list(mylist)
會創建mylist
的副本。
雖然這幾乎與實際功能相似,但實際上這是一個內部幫助功能。 – thefourtheye
@thefourtheye你是對的,編輯。 –
- 1. Python函數性能
- 2. 使用int函數的Python
- 3. 如何比較python函數的性能?
- 4. 性能的函數
- 5. 的Python - Unorderable類型:STR()<int()函數
- 6. 的Python unorderable類型:NoneType()> int()函數
- 7. 太少參數函數「功能(INT ANS)」
- 8. python性能函數vs發生器函數
- 9. 我不能使用map函數將列表更改爲int Python
- 10. 功能函數Python
- 11. 性能差()函數
- 12. jQuery函數性能
- 13. Javascript函數性能
- 14. XCreateGC函數性能
- 15. 可能性的R函數
- 16. SQL中函數的性能
- 17. 內部函數的性能
- 18. COUNT SQL函數的性能
- 19. Mysql介質int與int性能
- 20. 遞歸函數int sum(int * x,int n)?
- 21. int在調用函數時不能轉換爲int [] []
- 22. 在調用Python中的遞歸函數時,'int'對象沒有任何屬性
- 23. 在Python中使用long和int時的性能影響
- 24. int const函數(參數),int函數(const參數)和int函數(參數)const之間的區別是什麼?
- 25. int => int的散列函數映射
- 26. 性能轉換爲int
- 27. 函數內函數vs使用私有函數的性能
- 28. python 3.0函數內功能
- 29. Python函數在功能
- 30. 可能的二進制數函數Python
'int'實際上是一個沒有引號的字符串。該轉換在編譯期間完成(即在源代碼的第一次處理期間)。 Python的'int'對象必須在兩種情況下構造。由於Python不使用機器「int」,所以在兩種情況下複雜性都應該相似。 – pepr