如何在 python 中全局设置小数精度而不总是键入 Decimal()?
How to set the decimal precision globally in python without always typing Decimal()?
要设置小数精度,我可以这样写:
from decimal import Decimal,getcontext;
getcontext().prec = 20
然后使用:
Decimal(some number)
好的。但是每次都写 Decimal 真的很烦人,尤其是当你有很多数字要处理的时候。如何设置 python 使其始终考虑具有指定小数精度的代码中的每个数字?
你真的不应该。 float
和 Decimal
之间的区别非常重要,您不想向代码的读者隐藏这种区别。
如果您使用大量 Decimal
常量,有些人喜欢这样做:
from decimal import Decimal as D
c0 = D('273.15')
f0 = D('491.67')
c_ms = D('299792485')
# etc.
我偶尔看到的另一个技巧是大量创建常量块:
constants = '''
273.15 # c0
491.67 # f0
299792485 # c_ms
'''
constants = (line.split('#', 1)[0].strip() for line in constants.splitlines())
c0, f0, c_ms = (Decimal(line) for line in constants if line)
如果你真的想推送它,你可以解析出名称并使用 globals()[name]
来设置它们,但这很恶心。
如果你想真正做到极致,你可以编写一个导入挂钩,将每个浮点文字更改为 Decimal 构造函数。 This project 是一个起点,虽然 IIRC 它只适用于 Python 3.3 到 3.5 左右开箱即用。
但实际上,让您的编辑或 IDE 帮助您可能会更好。这使得代码更容易编写,而不会使其更难阅读或产生误导。
要设置小数精度,我可以这样写:
from decimal import Decimal,getcontext;
getcontext().prec = 20
然后使用:
Decimal(some number)
好的。但是每次都写 Decimal 真的很烦人,尤其是当你有很多数字要处理的时候。如何设置 python 使其始终考虑具有指定小数精度的代码中的每个数字?
你真的不应该。 float
和 Decimal
之间的区别非常重要,您不想向代码的读者隐藏这种区别。
如果您使用大量 Decimal
常量,有些人喜欢这样做:
from decimal import Decimal as D
c0 = D('273.15')
f0 = D('491.67')
c_ms = D('299792485')
# etc.
我偶尔看到的另一个技巧是大量创建常量块:
constants = '''
273.15 # c0
491.67 # f0
299792485 # c_ms
'''
constants = (line.split('#', 1)[0].strip() for line in constants.splitlines())
c0, f0, c_ms = (Decimal(line) for line in constants if line)
如果你真的想推送它,你可以解析出名称并使用 globals()[name]
来设置它们,但这很恶心。
如果你想真正做到极致,你可以编写一个导入挂钩,将每个浮点文字更改为 Decimal 构造函数。 This project 是一个起点,虽然 IIRC 它只适用于 Python 3.3 到 3.5 左右开箱即用。
但实际上,让您的编辑或 IDE 帮助您可能会更好。这使得代码更容易编写,而不会使其更难阅读或产生误导。