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 ';元组';对象不能在我的代码上调用 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):

当我尝试从fitlter1返回元组时,出现错误:

“tuple”对象不可调用


我试着做的是让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)