如何解决“元组”对象在我的代码中不可调用
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))
'tuple' 对象不可调用。
我尝试做的是 filter1 获取参数 *args 因为当我将调用 filiter1() 时不带任何函数,他会不加更改地返回序列。
解决方法
我删除了 *
上的 def filter1(func):
尝试这样做,我注意到您的参数是带有 *func
的 *
实际上它是一个元组函数上的参数,看来您不需要*
。我认为您需要搜索*args
and **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 但它不是,它实际上是一个 tuple
一旦你把 *
在您的 def filter1(*func)
上。
所以根据你在这里所说的。
我尝试做的是 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,5)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。