我正在尝试返回一个除以2的列表,以获取列表中的偶数。
我正在尝试使用装饰器执行此操作,但由于出现TypeError: 'int' object is not iterable
我的代码是
def getEven(fnc):
def inner(list_of_val):
return [ devideBy2(int(value)) for value in list_of_val ]
return inner
@getEven
def devideBy2(num):
return int(num)/2
list_of_num = [ 1, 2, 3, 4, 5]
print(devideBy2(list_of_num))
当我遍历list_of_num
时,它打印出每个数字,而我的想法是,现在每个数字都将一个参数传递给devideBy2
函数,并返回num/2
的结果
但是我最后得到的是TypeError: 'int' object is not iterable
。
请帮助我了解我在哪里做错了。
谢谢。
答案 0 :(得分:1)
也许您正在寻找类似的东西,
>>> nums = [1,2,3,4,5]
>>> def div_by_two(func):
... def wrapper(nums):
... func(nums)
... return [num // 2 for num in nums]
... return wrapper
...
>>>
>>> @div_by_two
... def some_func(nums):
... print(nums)
... return nums
...
>>>
>>> some_func(nums)
[1, 2, 3, 4, 5]
[0, 1, 1, 2, 2]
答案 1 :(得分:1)
您需要调用在inner
函数内部传递的函数,而不是调用正在修饰的函数。另外,您已经在int
中将传递的值转换为fnc
,而无需在getEven
def getEven(fnc):
def inner(list_of_val):
# Call fnc here instead of devideBy2
return [ fnc(value) for value in list_of_val ]
return inner
@getEven
def devideBy2(num):
return int(num)/2
list_of_num = [ 1, 2, 3, 4, 5]
print(devideBy2(list_of_num))
答案 2 :(得分:0)
HERE :
In [0]: def getEven(fnc):
...: def inner(list_of_val):
...: return [fnc(value) for value in list_of_val]
...: return inner
...:
...: @getEven
...: def devideBy2(num):
...: return num // 2
...:
...: list_of_num = [ 1, 2, 3, 4, 5]
...:
...: print(devideBy2(list_of_num))
[0, 1, 1, 2, 2]
答案 3 :(得分:0)
因为列表包含用逗号分隔的整数,并且list在此是可迭代的,但是您正在尝试将那些可迭代的值(多个整数值)转换为单个值,再将其转换为不可迭代的值,但是在Python中不支持交叉转换(逻辑上也是如此),意味着不能将多个值转换为单个值,反之亦然,因此类型不可用,因此会显示类型错误,如果列表是单个值,而您尝试将其转换为整数,则该类型将具有工作。