我有一个简单的类,增加了2个。在添加2个之前,我传递一个辅助函数,它附加2个零并传递结果。
当我尝试打印add_nos.provide(append_zeros)时,它总是显示None。
def append_zeros(x,y):
x = int(str(x) + '00' )
y = int(str(y) + '00')
print x+y
return x + y
class Add_Nos():
def __init__(self,input_array):
self.input_array = input_array
def provide(self,callback):
for each in self.input_array:
x,y = each
callback(x,y)
add_nos = Add_Nos([(1,2),(3,4)])
print add_nos.provide(append_zeros)
答案 0 :(得分:0)
目前还不完全清楚你要做什么,但是provide
并没有返回任何东西。在python中,任何函数的默认返回类型都是None
,因此隐式打印add_nos.provide(append_zeros)
将执行函数调用,然后在幕后执行return None
。
您有一个选择是返回self.input_array
:
class Add_Nos():
def __init__(self,input_array):
self.input_array = input_array
def provide(self,callback):
for each in self.input_array:
x,y = each
callback(x,y)
return self.input_array
请注意,您也可以执行for x, y in self.input_array:
:)
据推测,你实际上想要用计算结果得到一个新列表。在这种情况下,这是list comprehension:
的绝佳候选人def provide(self,callback):
return [callback(x, y) for x, y in self.input_array]
这是一行等效的
def provide(self, callback):
ret = []
for x, y in self.input_array:
ret.append(callback(x, y))
return ret
答案 1 :(得分:0)
方法add_nos.provide(self,callback)没有return语句,因此它不返回任何内容,在python中它表示返回None
。
要避免这种情况,可以添加一个return语句来提供(),或者只是调用方法而不打印。
答案 2 :(得分:0)
你说:
我希望结果在第一个实例中为300,在第一个实例中为700 下一个实例,生成一个迭代器对象。
所以你只需要将.provide
方法转换为生成器,然后适当地调用它。像这样:
def append_zeros(x,y):
x = int(str(x) + '00')
y = int(str(y) + '00')
#print x+y
return x + y
class Add_Nos():
def __init__(self,input_array):
self.input_array = input_array
def provide(self,callback):
for each in self.input_array:
x,y = each
yield callback(x,y)
add_nos = Add_Nos([(1,2),(3,4)])
for t in add_nos.provide(append_zeros):
print t
<强>输出强>
300
700
append_zeros
函数有点奇怪。而不是将args转换为字符串,以便你可以附加零,然后将结果转换回int
来进行算术yu应该简单地将每个arg乘以100。
此外,您可以使用&#34; splat&#34;使.provide
方法更加简化。拆包。正如tyteen4a03
提到的那样,在Python 2中,您的Add_Nos
类应该继承自object
,这样您就可以得到一个新式的类,而不是旧的类。所以这是另一个带有这些变化的版本;它产生与上面代码相同的输出。
def append_zeros(x, y):
return x * 100 + y * 100
class Add_Nos(object):
def __init__(self, input_array):
self.input_array = input_array
def provide(self, callback):
for each in self.input_array:
yield callback(*each)
add_nos = Add_Nos([(1,2),(3,4)])
for t in add_nos.provide(append_zeros):
print t