python回调函数返回None
我有一个简单的类,添加了2个。在添加2个之前,我传递了一个附加2个零的helper函数并传递结果 当我试图打印add_nos.provide(append_zero)时,它总是显示Nonepython回调函数返回None,python,Python,我有一个简单的类,添加了2个。在添加2个之前,我传递了一个附加2个零的helper函数并传递结果 当我试图打印add_nos.provide(append_zero)时,它总是显示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
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)
您想做什么还不完全清楚,但是
provide
不会返回任何内容。在python中,任何函数的默认返回类型都是None
,因此隐式打印add\u nos.provide(append\u zeros)
将执行函数调用,然后在后台返回None
一个选项是返回self.input\u数组:
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
注意,您也可以在self.input_数组中对x,y执行:)
据推测,您实际上希望得到一个包含计算结果的新列表。在这种情况下,这是一个优秀的候选人:
这是一行相当于做的事情
def provide(self, callback):
ret = []
for x, y in self.input_array:
ret.append(callback(x, y))
return ret
add_nos.provide(self,callback)方法没有返回语句,因此它不返回任何内容,这在python中意味着它返回None
为了避免这种情况,可以添加一个return语句来提供()或直接调用该方法而不打印。您说过:
我希望结果一开始是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
函数有点奇怪。与其将arg转换为字符串,这样您就可以附加零,然后将结果转换回int
s来执行算术运算,相反,yu只需将每个arg乘以100即可
此外,通过使用“splat”解包,您还可以使.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
这是Python 2还是Python 3?您需要创建Add\u Nos
子类object
,否则它将创建一个旧式类。此外,来自回调(x,y)
的结果将被丢弃。您希望返回值是什么样的?您希望打印什么print add\u nos.provide(append\u zeros)
来打印?我希望结果在第一个实例中是300,在下一个实例中是700,这类似于生成一个迭代器对象。然后您需要将.provide
方法转换为生成器。
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