相关疑难解决方法(0)

是不是可以从python中的函数返回任何内容?

使用一个简单的过滤器,测试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.但它真的"不"会返回任何东西吗?或者功能总是必须返回一些东西?

python function

18
推荐指数
4
解决办法
4万
查看次数

为什么类需要__iter __()来返回迭代器?

为什么类需要定义__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)

答案/sf/answers/691898161/,说

迭代器是具有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迭代器,但我仍然无法理解 …

python iterator class python-3.x

9
推荐指数
2
解决办法
3610
查看次数

如何使对象成为Python2和Python3迭代器?

这篇Stack Overflow帖子是关于使一个对象成为Python中的迭代器.

在Python 2中,这意味着您需要实现一个__iter__()方法和一个next()方法.但是在Python 3中,您需要实现一个不同的方法,而不是next()您需要实现的方法__next__().

如何在Python 2和3中创建一个迭代器对象?

python iterator python-2.7 python-3.x

8
推荐指数
1
解决办法
2464
查看次数

用变量base在python中向上计数

我想知道如何在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 base range

8
推荐指数
2
解决办法
1310
查看次数

如何实现一个像Python中的序列一样的最小类?

我正在寻找一个模拟Python中不可变序列的类的示例最小示例.

class MySequence()
    ...

a = MySequence()

len(a)

for i in a:
    pass

a[0]
Run Code Online (Sandbox Code Playgroud)

有哪些方法必须实施?

python sequence

7
推荐指数
2
解决办法
2728
查看次数

Python for循环如何工作?

我习惯于for循环的C++方式,但Python循环让我感到困惑.

for party in feed.entry:
    print party.location.address.text
Run Code Online (Sandbox Code Playgroud)

这里for party in feed.entryfor party in feed.entry.它意味着什么以及它如何实际起作用?

python for-loop iterable

6
推荐指数
3
解决办法
1万
查看次数

无法迭代Python中的列表类

我正在尝试使用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

6
推荐指数
2
解决办法
4704
查看次数

Python 2,在简单的情况下映射不等同于列表推导; 长度依赖

在python 2中,内置函数map似乎调用__len__时长度被覆盖.这是否正确 - 如果是这样,为什么我们计算迭代的长度来映射?Iterables不需要覆盖长度(例如),并且即使长度没有被iterable预定义,map函数也能工作.

地图在这里定义; 它确实指定在传递多个iterables的情况下存在与长度相关的功能.然而,

  • 我对只传递一个iterable的情况感兴趣
  • 即使传递了多个迭代(不是我的问题),显然检查长度似乎是一个奇怪的设计选择,而不是只是迭代直到你用完然后返回 None

我因为根据几个很关注1 2极高upvoted的问题,

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的规范中没有要求不变性 …

python python-2.x

6
推荐指数
1
解决办法
143
查看次数

在__iter__方法中返回self的用途是什么?

def __iter__(self):
    return self 
Run Code Online (Sandbox Code Playgroud)

只是想知道上面的代码通常做了什么,为什么需要它.

我经历了许多代码教程和块,没有任何适当的规范得到多个答案,只是一个简短的解释将是伟大的.

python python-2.7

6
推荐指数
2
解决办法
2476
查看次数

明星拆包自己的课程

我想知道是否可以使用自己的类进行星形解包,而不仅仅是使用listtuple.

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 class python-3.x iterable-unpacking

6
推荐指数
1
解决办法
763
查看次数