如何在python中创建日期结构?

时间:2017-01-11 12:26:41

标签: python python-3.x

关于数据抽象和不可变数据的练习,我需要仅使用数字和函数创建日期结构。我还需要实现打印日期组件的函数。

执行示例:

>>>d = make_date(2016, 12, 26)
>>>d
<function make_date.<locals>.dispatch at 0x02A880C0>
>>>year (d)
2016
>>>month (d)
December
>>> day (d)
26
>>> str_date(d)
'26th of December, 2016'

我不明白第3条执行线..

<function make_date.<locals>.dispatch at 0x02A880C0>

我可以获得一个执行此类代码的示例吗?

我只是为了得到这个......

<function dispatch at 0x02CCE078>

这是我到目前为止所得到的:

def make_date(y,m,d):
    def year_f():
        nonlocal y
        return y
    def day_f():
        nonlocal d
        return d    
    def month_f():
        nonlocal m
        if(m==1):
            return 'January'
        if(m==2):
            return 'February' 
        if(m==3):
            return 'March'
        if(m==4) . . . 

    def dispatch(date_type):
        if date_type==1:
             return year_f
        if date_type==2:
            return month_f
        if date_type==3:
            return day_f 
    return dispatch
    #=================================================#
def year(p):
    return p(1)()
def month(p):
    return p(2)()
def day(p):
    return p(3)() 
def str_date(p):
    return repr("{0}th of {1}, {2}".format(day(p),month(p),year(p)))

1 个答案:

答案 0 :(得分:2)

make_date返回函数对象,您将其分配给d

当您打印d时,您将获得该功能的表示,这是预期的

<function make_date.<locals>.dispatch at 0x02A880C0>

不会调用生成的函数。

要获得结果,您必须调用该函数,就像这样:d(<some params>)

请注意代码段中的语法:

def year(p):
    return p(1)()

当您致电year(d)时,它会调用d(1)()(以1作为参数调用您的函数)

编辑:那并没有真正回答这个问题。使用您提供的代码,我得到了

<function make_date.<locals>.dispatch at 0x000000000346A6A8>

(因为dispatch嵌套在make_date

但那是运行Python 3.4(或更高版本)

在python 2(删除nonlocal语句)或python 3.2(相同代码)中,得到<function dispatch at 0x000000000341A510>

因此,要获得所需的输出,您需要升级您的python版本。