Python ';元组';对象不能在我的代码上调用 def生成顺序(seq): def过滤器1(*func): 新过滤器=过滤器(功能,顺序) 返回元组(新的_过滤器) def filter_迭代器(*func): new_seq=元组(过滤器(func,seq)) 索引=0 def next1(): 非局部索引 如果索引>=0且索引=0且索引>>s1['filter'](lambda x:x>2)>>(3,4,5)>>s1['filter']()>>(1,2,3,4,5)
当我尝试从fitlter1返回元组时,出现错误: “tuple”对象不可调用Python ';元组';对象不能在我的代码上调用 def生成顺序(seq): def过滤器1(*func): 新过滤器=过滤器(功能,顺序) 返回元组(新的_过滤器) def filter_迭代器(*func): new_seq=元组(过滤器(func,seq)) 索引=0 def next1(): 非局部索引 如果索引>=0且索引=0且索引>>s1['filter'](lambda x:x>2)>>(3,4,5)>>s1['filter']()>>(1,2,3,4,5),python,object,tuples,callable,Python,Object,Tuples,Callable,当我尝试从fitlter1返回元组时,出现错误: “tuple”对象不可调用 我试着做的是让filter1获取参数*args,因为当我调用filter1()时,没有任何函数,他返回的序列没有变化。我删除了*中的def filter1(func):试试看,我注意到您的参数是一个带有*的*func,实际上它是一个元组,当您在函数上添加一些参数时,似乎不需要*。我想你需要四处寻找 我运行了它,得到了这个输出 def make_sequence(seq): def filter1(*func):
我试着做的是让filter1获取参数*args,因为当我调用filter1()时,没有任何函数,他返回的序列没有变化。我删除了
*
中的def filter1(func):
试试看,我注意到您的参数是一个带有*
的*func
,实际上它是一个元组,当您在函数上添加一些参数时,似乎不需要*
。我想你需要四处寻找
我运行了它,得到了这个输出
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))
这里有一个简单的例子,说明你为什么会收到这个消息。因为当你将*
放入函数中的参数时,它的数据类型是一个元组
(2, 4)
[Finished in 0.3s]
输出:
def foo(*args):
print(args)
print(type(args))
foo(1)
print(s1['filter'](lambda x: x % 2 == 0))
print(s1['filter']())
print(s1['filter'](lambda x: x>2))
filter
函数期望您的func
是一个函数或至少是lambda,但实际上它不是,一旦您将*
放在def filter1(*func)
上,它就是一个元组
根据你在这里所说的
我要做的是过滤器1获取参数*args,因为当我
将调用filiter1(),但不使用任何函数返回序列
没有变化
你能用你的函数做的是
filter(func, seq)
将您的filter1
函数更改为该函数,您将得到此结果
def filter1(func=None):
if callable(func):
new_filter = filter(func, seq)
return tuple(new_filter)
return seq
输出:
def foo(*args):
print(args)
print(type(args))
foo(1)
print(s1['filter'](lambda x: x % 2 == 0))
print(s1['filter']())
print(s1['filter'](lambda x: x>2))
是的,我知道没有*它可以工作,但当我尝试打印时(s1['filter']()),它会说filter1()缺少一个必需的位置参数:“func”是的,它会抛出该错误及其原因,因为在你的函数filter1
中有一个参数,或者换句话说,你需要提供一个参数。正如您在这里的代码上所说的打印(s1['filter'])
您没有提供任何()
为空,因此您需要在那里提供一个函数,因为我看到的参数是您将把它放在filter
函数上。我理解为什么会出现错误,但我需要做的任务是:当我调用'filter'键时,我需要发送函数来过滤我的seq,或者不向filter1发送注释,它不会更改我的seqYou需要做什么?是否有*
<代码>对象不可调用
意味着元组不可调用,因此它不是一个函数。例如:s1=make_seq((1,2,3,4,5)),>>>s1['filter'](lambda x:x>2)>>(3,4,5)>>s1['filter']()>>(1,2,3,4,5)