'tuple'对象在我的代码上不可调用


def make_sequence(seq):
def filter1(*func):
new_filter = filter(func, seq)
return tuple(new_filter)
def filter_iterator(*func):
new_seq = tuple(filter(func, seq))
index = 0
def next1():
nonlocal index
if index >= 0 and index < len(new_seq):
ele = new_seq[index]
index += 1
else:
index = 0
ele = new_seq[index]
index += 1
return ele
def reverse():
nonlocal index
index -= 1
if index >= 0 and index < len(new_seq):
ele = new_seq[index]
else:
index = len(new_seq) - 1
ele = new_seq[index]
return ele
return {'next': next1, 'reverse': reverse}
def reverse():
return tuple(seq[::-1])
def extend(new_seq):
nonlocal seq
seq += new_seq
return {'filter': filter1, 'filter_iterator': filter_iterator, 'reverse': reverse, 'extend': extend}

s1 = make_sequence((1, 2, 3, 4, 5))
print(s1['filter'](lambda x: x % 2 == 0))

当我试图从fitlter1返回元组时,我得到了错误:

"元组"对象不可调用。

我试图做的是filter1获取参数*args,因为当我不使用任何函数调用filiter1((时,他会返回序列而不进行更改。

我删除了def filter1(func):上的*。尝试一下,我注意到你的参数是一个带有**func,当你在函数上放一些参数时,它实际上是一个元组,看起来你不需要*。我认为你需要搜索关于*args**kwargs

我已经运行了它,并得到了这个输出

(2, 4)
[Finished in 0.3s]

这里有一个快速的样本,你为什么得到这个消息。因为当你把*放在函数中的一个参数上时,它的数据类型是tuple

def foo(*args):
print(args)
print(type(args))

foo(1)

输出:

(1,)
<class 'tuple'>

为什么会出现错误

filter(func, seq)

filter函数期望您的func是一个函数,或者至少是lambda,但当您将*放在def filter1(*func)上时,它实际上不是tuple


所以以你在这里所说的为基础。

我试图做的是filter1获取参数*args,因为当我将调用不带任何函数的filiter1((,返回序列没有变化。

您可以使用功能

def filter1(func=None):
if callable(func):
new_filter = filter(func, seq)
return tuple(new_filter)
return seq

将您的filter1函数更改为该函数,您就会得到该函数。

print(s1['filter'](lambda x: x % 2 == 0))
print(s1['filter']())
print(s1['filter'](lambda x: x>2))

输出:

(2, 4)
(1, 2, 3, 4, 5)
(3, 4, 5)

最新更新