Python標準庫中哪些類型和類支持數學運算,但不是真正的數字?支持數學運算符的標準python類?
兩個我所知道的是:
list
一般,特別是字符串,tuples
太bool
值:這是一個讓我吃驚
還有其他的嗎?
注:以我的思維方式,datetime
的行爲同樣的數字給我,讓他們確定。
上下文是,我試圖編寫一個允許任意類型插值的函數。
我的第一個想法是:
def weighted_combine(val1, val2, weight):
''' Return the weighted combination of val1 and val2
@arg weight : 0 => ignore val2, 1 => ignore val1
0.5 => 50/50 mix of val1, val2
'''
try:
# if I can do math, do it
return val1+(val2-val1)*weight
except TypeError,e:
pass
# otherwise pick the predominant value
if weight>0.5:
return val2
else:
return val1
搞清楚,這應該幾乎任何類型的右側上工作。直到我檢查,如果你可以做布爾值(和布爾丘壑numpy的陣列)的數學,所以現在我需要增加明確的類型,這些特殊情況檢查(因爲我想用「挑接近」爲布爾變量的邏輯),所以我需要知道在這種情況下是否還需要考慮其他特殊類型。
示例結果:
In [4]: True+(False-True)*0.2
Out[4]: 0.8
In [8]: a=scipy.array([True, False, True])
In [9]: a+(a-a)*0.2
Out[9]: array([ 1., 0., 1.])
「布爾值」:這是一個讓我感到驚訝的「?真?布爾語在C語言和其他語言中被視爲int,有很長的歷史。 [documentation](http://docs.python.org/2/library/functions.html#bool)明確指出'bool'是'int'的一個子類。 – Bakuriu
我曾經認爲當真/假分別更改爲「關鍵詞」(或精確的術語),他們會不再是同構的數字,這不是我的風格依賴於C++該功能的一部分。 – Dave
那麼,你*可以*在Python中依賴它。我相信它在文檔中多個地方的陳述的,也是在[PEP 285](http://legacy.python.org/dev/peps/pep-0285/),其中提出了'bool'類型。在某些情況下,使用布爾值作爲整數很有用。 – Bakuriu