关于数据抽象和不可变数据的练习,我需要仅使用数字和函数创建日期结构。我还需要实现打印日期组件的函数。
执行示例:
>>>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)))
答案 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版本。