在Python中,一個可以通過只用該字符串調用浮動構造函數把字符串轉換成浮動:擴展浮法解析 - 自動解析PI
>>> float('3.14')
3.14
不過,我想能夠同時解析字符串'pi'
爲math.pi
,而不僅僅是普通的'pi'
,而且還有'-pi'
以及浮點解析的所有內容(即實際數字之前和之後的空格無關緊要)。我應該自己編寫它,我將不得不重新實現很多原來的浮動解析邏輯,我顯然不想要。有沒有已經存在的函數或庫可以做到這一點?
在Python中,一個可以通過只用該字符串調用浮動構造函數把字符串轉換成浮動:擴展浮法解析 - 自動解析PI
>>> float('3.14')
3.14
不過,我想能夠同時解析字符串'pi'
爲math.pi
,而不僅僅是普通的'pi'
,而且還有'-pi'
以及浮點解析的所有內容(即實際數字之前和之後的空格無關緊要)。我應該自己編寫它,我將不得不重新實現很多原來的浮動解析邏輯,我顯然不想要。有沒有已經存在的函數或庫可以做到這一點?
自己寫。剝離後,您可以檢查輸入是否爲字符串"pi"
。如果不是,轉發給原來的float
打電話。
import math
def float_or_pi(x):
x = x.strip().lower()
if x in ('pi', '+pi'):
return math.pi
elif x == '-pi':
return -math.pi
else:
return float(x)
assert float_or_pi(' PI ') == math.pi
assert float_or_pi(' 3.25 ') == 3.25
# (off-topic note: don't try to `==` floats at home.)
你可以使用拉姆達一個襯墊功能
get_value = lambda x : math.pi if x == 'pi' else (-math.pi if x == '-pi' else float(x)) get_value('pi') get_value('-pi') get_value('4.3')
你可以只調用'浮動(X)''如果是x'不是' 'pi''或'' -pi'' ,不需要重新實現浮點解析邏輯。 – kennytm
@kennytm不是,因爲它不僅僅是「pi'''還有」pi'''''''''''''''''''以相同的方式對待任何其他號碼,包括該號碼之前和/或之後的空格可以在那裏,並且該事物仍然成功解析。 – zegkljan
如果空格有問題,那麼首先調用'x = x.strip()'(或者甚至調用'.lower()'),這對於自己來說仍然是可管理的。 – kennytm