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)