跳转到主要内容

用于处理单位的工厂和函数

项目描述

介绍

F3U1 - 处理单位的工厂和函数。

背景

很久以前,有人给了英雄一个任务,让他找出一种方法将秒数格式化为人类可读的字符串。英雄在网络的迷宫中历经千辛万苦,从活跃状态、栈交换到其他Git中心,最后在一片混乱中,找到了一些巨人,他们有的重复着长长的数字,有的做着奇怪的事情,看起来很复杂。那些说着奇怪咒语的人毫无用处。最后,英雄放弃了,从仙女们的尸体上构建了这个怪物。

def format_timedelta(delta_t):
    hours = delta_t.seconds / 3600
    days = delta_t.days
    seconds = delta_t.seconds

    # Don't ask.  Read the test; be happy you don't have to write this.
    # (WTB something simple like str(delta_t) with more control.)
    # (Maybe I should just do this in javascript?)
    return '%(day)s%(hour)s' % {
        'day': days and '%(days)d day%(dayp)s%(comma)s' % {
                'days': days,
                'dayp': days != 1 and 's' or '',
                'comma': seconds > 3599 and ', ' or '',
            } or '',
        'hour': (hours > 0 or days == 0 and hours == 0)
            and '%(hours)d hour%(hourp)s' % {
                'hours': hours,
                'hourp': hours != 1 and 's' or '',
            } or '',
    }

(OOC: 实际上已经测试过;见最早的提交)。

然后英雄意识到:有时矮人想微管理分钟的分辨率,然后中层管理恐龙会回来,以安全的名义踩碎所有事情,并使分辨率不小于一周。对这个小小的简单事物所做的任意更改导致了无数的痛苦和许多似乎永远不会结束的噩梦。到处都是F7U12的呼喊。

经过无数纳秒的冥想,英雄向看不见的地平线方向摧毁了4个F和11个U,发现了解决方案,这是一个超越时间的解决方案。

是什么?

这导致了原始F3U1 - 单位格式化工厂的创建。其他描述曾经适用,包括单位格式化函数的函数工厂或来自单位函数的格式化函数。然而,随着时间的推移,这个模块逐渐成熟,它实际上变成了处理单位的工厂和函数。

虽然这个模块最初是为了将时间格式化为人类友好的字符串而创建的,但它后来被推广到可以格式化任意单位,例如非公制测量单位,成为可读的字符串。然后它进一步推广为可调用的对象,可用于构建表示某些值的对象,然后将其转换为相同的可读字符串。

如何实现?

只需在您的虚拟环境设置中使用pip进行安装。

或者,您可以克隆此存储库以运行测试,这将需要其他依赖项,这些依赖项在requirements.txt中指定。

$ git clone git://github.com/metatoaster/mtj.f3u1.git
$ cd mtj.f3u1
$ pip install -r requirements.txt
$ python setup.py develop

示例

使用预定义的单位

>>> from mtj.f3u1.units import Time
>>> value = Time(second=90210)
>>> print value
1 day, 1 hour, 3 minutes, 30 seconds

或创建自己的单位组

>>> from mtj.f3u1.factory import UnitGroup
>>> Custom = UnitGroup(base_unit='one', ratios={
...     'thousand': 1000,
...     'hundred': 100,
...     'ten': 10,
... })
>>> custom = Custom(thousand=2, hundred=5, one=621)
>>> print custom
3 thousand, 1 hundred, 2 ten, 1 one

也可以进行分辨率限制

>>> value = Time('hour', second=99999)
>>> print value
1 day, 3 hours

值的构建可以使用定义集的任何键作为部分

>>> value = Time(hour=1, minute=99999)
>>> print value
69 days, 11 hours, 39 minutes

可以重新指定任何单位定义,包括它们相关的复数形式

>>> TimeWithWeek = Time.respecify({'week': 604800},
...     plurals={'week': 'weeks'})
>>> value = TimeWithWeek(hour=1, minute=99999)
>>> print value
9 weeks, 6 days, 11 hours, 39 minutes

注意:目前,值都限制为正整数。将来可能会有所改变,可能会添加完整的单位转换和数学。

变更日志

0.2 - 2014-11-07

  • Python 3 兼容性。

  • 允许指定元素之间的分隔符。

0.1 - 2013-04-10

  • 提供了将时间格式化为可读字符串的核心功能。

  • 还提供了其他单位,并且可以从比率的定义中构建新的单位。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源代码发行版

mtj.f3u1-0.2.tar.gz (9.9 kB 查看散列值)

上传时间 源代码

由以下机构支持