Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中创建日期结构?_Python_Python 3.x - Fatal编程技术网

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

如何在python中创建日期结构?,python,python-3.x,Python,Python 3.x,在一个关于数据抽象和不可变数据的练习中,我需要创建一个只使用数字和函数的日期结构。我还需要实现打印日期组件的功能 执行示例: >>>d = make_date(2016, 12, 26) >>>d <function make_date.<locals>.dispatch at 0x02A880C0> >>>year (d) 2016 >>>month (d) December >>>

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

执行示例:

>>>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'

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

当您打印
d
时,您会得到预期的函数表示形式

<function make_date.<locals>.dispatch at 0x02A880C0>
当您调用
year(d)
时,它确实调用
d(1)(
(使用
1
作为参数调用您的函数)

编辑:这并不是真正的回答问题。根据你提供的代码,我可以

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

(因为
dispatch
嵌套在
make\u date
中)

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

在Python2(删除
非本地的
语句)或Python3.2(相同的代码)中,您可以得到


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

当我打印d时,我得到的数据没有生成日期。请看我的编辑。在提供的代码片段中,它不会发生(我运行的是python 3),但在我的代码调度中,它嵌套在make_date中,我不知道您的python版本是什么?我的是使用3.2.2版本的Python3.4.im,所以可能是版本问题?
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)))
<function make_date.<locals>.dispatch at 0x02A880C0>
def year(p):
    return p(1)()
<function make_date.<locals>.dispatch at 0x000000000346A6A8>