'tuple' 对象在我的代码中不可调用
'tuple' object is not callable on my code
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 return 元组时,出现错误:
'tuple' object is not callable.
我尝试做的是 filter1 获取参数 *args,因为当我调用 filiter1() 时没有任何函数,他 returns 序列没有改变。
我删除了你 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)
.
所以根据你在这里所说的。
What I try to do is the filter1 get the argument *args because when I
will call filiter1() with nothing function he returns the sequence
without change.
你可以用你的函数做的是
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)
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 return 元组时,出现错误:
'tuple' object is not callable.
我尝试做的是 filter1 获取参数 *args,因为当我调用 filiter1() 时没有任何函数,他 returns 序列没有改变。
我删除了你 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)
.
所以根据你在这里所说的。
What I try to do is the filter1 get the argument *args because when I will call filiter1() with nothing function he returns the sequence without change.
你可以用你的函数做的是
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)