摆弄单位的工厂和职能

mtj.f3u1的Python项目详细描述


简介

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工厂的创建 单位。用于拟合的其他描述,包括函数工厂 用于格式化单位或从单位的函数格式化函数。 然而,随着这个模块的成熟,它真正成为了工厂 以及摆弄单位的功能。

而这开始是一个模块,用于将时间格式化为对人类友好的 字符串,它被推广为能够格式化任意单位,比如 作为非公制测量单位,转换成人类可读的字符串那么 这进一步概括为可调用的对象,这些对象可以 用于构造一个表示某个值的对象,然后将其转换为 在同一个人类可读的字符串中。

怎么做?

只需在virtualenv安装程序中使用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年4月10日

  • 将时间格式化为可读字符串的核心功能是 提供。
  • 还提供了其他单元,新单元可以从 比率的定义。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
分析线程“main”java中的异常。时间总体安排DateTimeParseException:未能在索引0处分析文本“”   java为什么术语“工作单元”如此重要,为什么JDBC自动提交违反了这种模式?   java您的SQL语法有错误,但查询在MySQL工作台中运行   如何将api post请求从Java写入c#   java集成Hbase和Hive的优势是什么   使用Ecplise从数据库检索列表时遇到问题的java   java使用Guice需要做什么?   java在控制器中使用@Autowired和@Qualifier更改服务的数据源   通过Java API将具有值的字段添加到MongoDB中的现有文档中   java设置了JFrame背景,为什么这不起作用?   java和安卓中的异常处理   java如何在glassfish服务器中配置oracle精简连接池?   java如何使用spring@Lookup注释?   java Log4J调试不起作用?   java有没有人有一个好的代码示例/库,可以通过S3预签名的URL执行大文件(5GB)PUT操作?   java如何避免“除非模拟类型是可注入的或动态的,否则无法进入方法”?   浮点Java IEEE 754浮点到IBM浮点字节[4]转换