【问题标题】:Could python have suffix-based number notation for engineering purposes?出于工程目的,python 是否可以具有基于后缀的数字表示法?
【发布时间】:2011-03-19 08:48:17
【问题描述】:

作为一名电气工程师,我(我们?)使用 python 来帮助计算/自动化/等。

当使用一些真实世界的数字处理计算时,以-nano、-pico、-tera 等方式思考是很常见的。

例如:我知道 1pF 电容器是什么,但 1e-12 F 电容器在某种程度上不太友好。此外,它的打字次数增加了 4 倍(1p vs 1e-12)并且更容易出错。并不是说在显示数字的时候,加上数字后缀就更简单了。

所以问题是:是否可以在 python(IPython?)中使用它:

L = 1n
C = 1p
f = 1/(2*pi*sqrt(L*C))
print(f) gives: 5.033G (or whatever the accuracy should be)

它作为一个计算器也将非常有用!

谢谢。

更新: 我寻找的不是 units 处理,而只是 后缀数字 处理。所以不管是法拉还是公斤,但一定要关心后缀(-n,-u,-m,-M,-G...)

【问题讨论】:

  • 更一般地说,如果有一个 Python 模块可以deal with units as Frink can :)
  • ...虽然好像有quite a few options
  • 好吧,也许法拉让它变得混乱了。我不寻求对单位的支持(或在它们之间进行转换),而是simply 支持后缀数字解析。这样 1p 就和 1e-12 一样
  • 我知道 - 我只是出于兴趣(或者 Frink 的情况下的娱乐)而提到它们 - 这就是为什么这只是一个评论

标签: python numbers notation


【解决方案1】:

当然。只需编写您自己的解析器并使用 Python's language services 生成您自己的 AST。

【讨论】:

  • @delnan:CPU 很便宜,程序员很贵。 “实用”是相对的。
  • 喂...!这看起来很强大,但不是完全程序员而是工程师我正在寻找现有的东西:)
  • @Ignacio:我的意思是不切实际,因为“有人需要编写该解析器,并且有人需要相当长的时间和解析经验”。
  • 知道是否有人写过这样的解析器吗?这似乎是我得到的最好的主意。
  • 另外我想知道为什么这不能使其成为标准的python语法?没有以数字开头的变量名,所以 1n, 150M 是很自然的表达数字的方式……或者有没有我看不到的墙?
【解决方案2】:

您可以创建一个模块,其中包含所有必要的单元作为符号,例如units.py,包含类似

pico = 1*e-12
nano = 1*e-9
micro = 1*e-6
mili = 1*e-3 

Farad = 1

pF = pico*Farad
nF = nano*Farad

那么在代码中,法拉的 50pF 是

units
50*units.pF

【讨论】:

  • 是的,当然,但这不会带来任何简单性吗?
  • 我想这取决于您对简单性的看法。对我来说,这似乎比编写解析器更容易且更具可扩展性。
  • 是的,但它不需要非常可扩展和可扩展,因为只需要 21 个 (en.wikipedia.org/wiki/Order_of_magnitude) 值...
  • 当然,但您可能希望将数量级应用于法拉以外的尺寸。这种方法处理大小和维度,但这可能超出您的需要。
  • 确实如此。管理真正的“单位”有很多包,但不是用于管理只是数字...
【解决方案3】:

对于可以通过适当的命名和函数简单解决的问题,在语言中引入复杂性没有多大意义:

L_nano = unit_nano(1)
C_pico = unit_pico(1)
f = 1/(2*pi*sqrt(L*C))

print(to_Giga(f)) gives: 5.033G 

【讨论】:

  • 是的,当然,但我正在寻找的是简单而不是复杂性。这比 1p 更复杂,不是吗?
  • 是吗?按照 Ignacio 告诉你的方式编写解析器代码,然后我们可以进行比较
  • 确实,这里的额外工作量是零并且在那里很大,但之后可用性差异是巨大的(再次,1p 对 1e-12 对 unit_pico(1))
【解决方案4】:

pyparsing 附带的示例包括一个简单的表达式解析器,称为fourFn.py。我用大约 8 行附加代码对其进行了调整以接受您的后缀文字,找到它here。此更改支持standard suffixes,但 1e1 的“da”除外,由于我仅限使用单个字符,因此我使用了“D”。

如果你想把它变成一个交互式计算器,你可以使用我对fourFn.py所做的相同更改来调整Steven Siew's submission

【讨论】:

  • 嗯。是的,它应该在诸如计算器之类的应用程序中工作,但是,不能在“普通”python 中工作。不管怎样,谢谢,这实际上很有用。我猜自定义解析器解决方案是最接近的......
猜你喜欢
  • 2019-08-01
  • 2016-11-04
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
相关资源
最近更新 更多