使用一个简单的过滤器,测试0-100范围内的输入.
def foo(foo_input):
if 0 <= foo_input <= 100:
return f_input
Run Code Online (Sandbox Code Playgroud)
如果,则返回none foo_input is > 100
.但它真的"不"会返回任何东西吗?或者功能总是必须返回一些东西?
为什么类需要定义__iter__()
返回self,以获取类的迭代器?
class MyClass:
def __init__(self):
self.state = 0
def __next__(self):
self.state += 1
if self.state > 4:
raise StopIteration
return self.state
myObj = MyClass()
for i in myObj:
print(i)
Run Code Online (Sandbox Code Playgroud)
控制台日志:
Traceback (most recent call last):
for i in myObj:
TypeError: 'MyClass' object is not iterable
Run Code Online (Sandbox Code Playgroud)
迭代器是具有next(Python 2)或
__next__
(Python 3)方法的对象.
添加以下内容的任务:
def __iter__(self):
return self
Run Code Online (Sandbox Code Playgroud)
是返回定义方法的迭代器或类的对象__next__()
.
但是,当MyClass在myObj = MyClass()行中实例化时,不是返回MyClass对象(定义__next__()
方法)的任务,而是由__new__()
MyClass实例化了吗?
类定义__next__()
方法的对象不是自己的迭代器吗?
我已经研究了问题__iter__方法中返回self的用途是什么?并构建一个基本的Python迭代器,但我仍然无法理解 …
这篇Stack Overflow帖子是关于使一个对象成为Python中的迭代器.
在Python 2中,这意味着您需要实现一个__iter__()
方法和一个next()
方法.但是在Python 3中,您需要实现一个不同的方法,而不是next()
您需要实现的方法__next__()
.
如何在Python 2和3中创建一个迭代器对象?
我想知道如何在python中执行等效的range函数,但是能够指定基数.例如:
countUp(start=0, end=1010, base=2)
countUp(start=0, end=101, base=3)
countUp(start=0, end=22, base=4)
Run Code Online (Sandbox Code Playgroud)
基数2计数的示例输出:
[0, 1, 10, 11, 100, ...]
Run Code Online (Sandbox Code Playgroud)
是否有一个我缺少的功能呢?或者我该怎么做呢?
我正在寻找一个模拟Python中不可变序列的类的示例最小示例.
class MySequence()
...
a = MySequence()
len(a)
for i in a:
pass
a[0]
Run Code Online (Sandbox Code Playgroud)
有哪些方法必须实施?
我习惯于for循环的C++方式,但Python循环让我感到困惑.
for party in feed.entry:
print party.location.address.text
Run Code Online (Sandbox Code Playgroud)
这里for party in feed.entry
在for party in feed.entry
.它意味着什么以及它如何实际起作用?
我正在尝试使用pyplurk为Plurk编写一个简单的GUI前端.
我已经成功地创建了API连接,登录,并检索并显示了一个朋友列表.现在我正在尝试检索并显示Plurks列表.
pyplurk提供了一个GetNewPlurks函数,如下所示:
def GetNewPlurks(self, since):
'''Get new plurks since the specified time.
Args:
since: [datetime.datetime] the timestamp criterion.
Returns:
A PlurkPostList object or None.
'''
offset = jsonizer.conv_datetime(since)
status_code, result = self._CallAPI('/Polling/getPlurks', offset=offset)
return None if status_code != 200 else \
PlurkPostList(result['plurks'], result['plurk_users'].values())
Run Code Online (Sandbox Code Playgroud)
如您所见,这会返回一个PlurkPostList,后者又定义如下:
class PlurkPostList:
'''A list of plurks and the set of users that posted them.'''
def __init__(self, plurk_json_list, user_json_list=[]):
self._plurks = [PlurkPost(p) for p in plurk_json_list]
self._users = [PlurkUser(u) for u in user_json_list]
def __iter__(self):
return …
Run Code Online (Sandbox Code Playgroud) 在python 2中,内置函数map
似乎调用__len__
时长度被覆盖.这是否正确 - 如果是这样,为什么我们计算迭代的长度来映射?Iterables不需要覆盖长度(例如),并且即使长度没有被iterable预定义,map函数也能工作.
地图在这里定义; 它确实指定在传递多个iterables的情况下存在与长度相关的功能.然而,
None
map(f, iterable)
基本上相当于:
[f(x) for x in iterable]
但我遇到了一些简单的例子.
例如
class Iterable:
def __iter__(self):
self.iterable = [1,2,3,4,5].__iter__()
return self
def next(self):
return self.iterable.next()
#def __len__(self):
# self.iterable = None
# return 5
def foo(x): return x
print( [foo(x) for x in Iterable()] )
print( map(foo,Iterable()) )
Run Code Online (Sandbox Code Playgroud)
表现得如此,但如果你取消超载的话len
,它就不会.
在这种情况下,它会引发AttributeError,因为iterable是None
.虽然单位行为是愚蠢的,但我认为在len的规范中没有要求不变性 …
def __iter__(self):
return self
Run Code Online (Sandbox Code Playgroud)
只是想知道上面的代码通常做了什么,为什么需要它.
我经历了许多代码教程和块,没有任何适当的规范得到多个答案,只是一个简短的解释将是伟大的.
我想知道是否可以使用自己的类进行星形解包,而不仅仅是使用list
和tuple
.
class Agent(object):
def __init__(self, cards):
self.cards = cards
def __len__(self):
return len(self.cards)
def __iter__(self):
return self.cards
Run Code Online (Sandbox Code Playgroud)
并且能够写作
agent = Agent([1,2,3,4])
myfunc(*agent)
Run Code Online (Sandbox Code Playgroud)
但我得到:
TypeError: visualize() argument after * must be a sequence, not Agent
Run Code Online (Sandbox Code Playgroud)
为了使拆包成为可能,我必须实施哪些方法?
python ×10
python-3.x ×3
class ×2
iterator ×2
python-2.7 ×2
base ×1
for-loop ×1
function ×1
iterable ×1
python-2.x ×1
range ×1
sequence ×1