如何在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>