标签: generator

当生成器用完可产生的值时会发生什么?

为了说明这个问题,假设我们有这个简单的生成器:

def firstn(n):
    num = 0
    while num < n:
        yield num
        num += 1

for i in firstn(10):
    print i
Run Code Online (Sandbox Code Playgroud)

这将打印数字 0 到 9。但是如果我们有:

def firstn(n):
    num = 0
    while num < 5 < n:
        yield num
        num += 1

for i in firstn(10):
    print i
Run Code Online (Sandbox Code Playgroud)

(更改在while语句中。)然后它仅打印数字 0 到 4。一旦num >= 5,生成器将不再生成值。

我很好奇的是幕后发生的事情:我使用PythonTutor来逐步执行代码,我的印象是,一旦while语句不再True,函数就会隐式返回None,循环for以某种方式检测到,然后也断了。我使用next内置函数来更仔细地检查这一点:

>>> def firstn(n):
...     num = 0
...     while num …
Run Code Online (Sandbox Code Playgroud)

python generator yield-keyword

0
推荐指数
1
解决办法
859
查看次数

迭代生成器中的相邻对

我想访问生成器中相邻值的重叠对。

如果它是一个列表,我可以使用

a = [5, 7, 11, 4, 5]
for v, w in zip(a[:-1], a[1:]):
    print [v, w]
Run Code Online (Sandbox Code Playgroud)

这是来自这个问题

但是当我尝试对生成器执行相同操作时,出现错误

TypeError: 'generator' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

有没有办法为发电机做到这一点?

python generator python-3.x

0
推荐指数
1
解决办法
422
查看次数

Python:理解生成器中的产量分配

这是一个无限循环程序,我添加了行号打印以方便跟踪程序执行。

def infinite_looper(objects):
    count = 0
    print("row 35")
    while True:
        print("row 37")
        if count >= len(objects):
            count = 0
        print("Row 40")
        message = yield objects[count]
        print("row 42")
        print("The message is "+str(message))
        print("row 44")
        if message != None:
            count = 0 if message < 0 else message
            print("row 47, count = "+str(count))
        else:
            count += 1
            print("row 50")
        print("Row 51")

x = infinite_looper("abcdefghijkl")

print("executing next 1st time")
print(next(x))

print("executing next 2nd time")
print(next(x))

print("executing send 1st time")
print(x.send(10))
Run Code Online (Sandbox Code Playgroud)

输出是:

executing next …
Run Code Online (Sandbox Code Playgroud)

python yield generator

0
推荐指数
1
解决办法
831
查看次数

Ruby on Rails 6 脚手架模板位于哪里?

我正在开始开发新的 Ruby on Rails 6 应用程序,我需要找到默认的scaffold_controller 模板以及默认的视图文件:_form.html.erb、index.hmtl.erb、edit.html.erb 等。 .这样我就可以通过将它们放在 /lib/templates 文件夹中来自定义它们。

默认模板位于哪里,以便我可以将它们复制到 /lib/templates 文件夹并修改它们?

谢谢 !

templates ruby-on-rails generator scaffold

0
推荐指数
1
解决办法
1180
查看次数

如何在php中制作一个每次至少包含一个大写字母、小写字母、特殊字符和数字的随机密码生成器

我正在尝试做标题所说的事情,这就是我能弄清楚如何在 php 中做的所有事情。

<?php 
    $random = substr(md5(mt_rand()), 0, 8
    echo $random;
?>
Run Code Online (Sandbox Code Playgroud)

php random passwords generator

0
推荐指数
1
解决办法
4705
查看次数

生成两个列表的交替值的生成器函数

乍一看,这个问题似乎非常基本且简单,但我在编写有效的解决方案时仍然遇到了一些困难。这个想法是编写一个函数,该函数将两个生成器作为输入并生成每个列表的一项。如果任一列表为空,它将生成剩余列表的每个项目。例子:

 list(alternate("abcdefg", [1, 2, 3, 4])) == ["a", 1, "b",2, "c", 3, "d", 4, "e", "f", "g"]
Run Code Online (Sandbox Code Playgroud)

什么样的工作,但看起来很丑:

def alternate(xs1, xs2):
    xs1 = iter(xs1)
    xs2 = iter(xs2)
    while xs1 and xs2:
        try:
            yield next(xs1), next(xs2)
        except StopIteration:
                for x1 in xs1:
                    yield x1
                for x2 in xs2:
                    yield x2
Run Code Online (Sandbox Code Playgroud)

特别是我想避免在一开始就将输入转换为迭代器。我尝试使用 2 个简单的 for 循环,但这显然只返回每个列表的最后一个值,因为一个 for 循环在另一个循环开始之前完成。这不是一个解决我的问题的问题,我而是在寻找一些代码来提高编写代码的技能!

python generator

0
推荐指数
1
解决办法
580
查看次数

斐波那契与生成器

我正在尝试使用生成器进行斐波那契继承,但我的代码返回 2**a...

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a = b
        b = a + b
n = int(input("How long? "))
fib = fibonacci()

for i in range(n):
    print(next(fib))
Run Code Online (Sandbox Code Playgroud)

python generator fibonacci

0
推荐指数
1
解决办法
102
查看次数

如何将漂亮的打印模块扩展到表格?

我有漂亮的打印模块,我准备,因为我不高兴pprint模块生成zillion行的数字列表有一个列表列表.以下是我的模块的示例用法.

    >>> a=range(10)
    >>> a.insert(5,[range(i) for i in range(10)])
    >>> a
    [0, 1, 2, 3, 4, [[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7, 8]], 5, 6, 7, 8, 9]
    >>> import pretty
    >>> pretty.ppr(a,indent=6)

    [0, 1, 2, 3, 4, 
          [
            [], 
            [0], …
Run Code Online (Sandbox Code Playgroud)

python formatting generator

-1
推荐指数
1
解决办法
1272
查看次数

Python:为什么列表理解会产生一个生成器?

a=[['1','3','2'],['11','22','33']]
k = [(float(a[i][j]) for j in range(0,3)) for i in range(0,2)]
>>> print k
[<generator object <genexpr> at 0x7f1a9d568f50>, <generator object <genexpr> at 0x7f1a9d568fa0>]
Run Code Online (Sandbox Code Playgroud)

但我想得到[(1,3,2),(11,22,33)]为什么列表理解产生一个发电机?

python list-comprehension generator

-1
推荐指数
2
解决办法
478
查看次数

如何将子列表的所有元素更改为类型?

假设我有一份清单清单.子列表本身可以包含子列表.将所有子列表的所有元素转换为特定类型的有效方法是什么?

让我们说它像这样凌乱:

a = [
    1,
    2,
    3,
        [
        "a",
        "b"
        ],
        [
        10,
        20,
            [
            "hello",
            "world"
            ]
        ],
    4,
    5,
    "hi",
    "there"
]
Run Code Online (Sandbox Code Playgroud)

我的想法是将类似的内容转换为:

a = [
    "1",
    "2",
    "3",
        [
        "a",
        "b"
        ],
        [
        "10",
        "20",
            [
            "hello",
            "world"
            ]
        ],
    "4",
    "5",
    "hi",
    "there"
]
Run Code Online (Sandbox Code Playgroud)

请注意,我正在寻找处理任意深度的子列表的方法.我有一种感觉,可以使用发电机,但我不知道如何处理这个问题.

python types list generator sublist

-1
推荐指数
1
解决办法
63
查看次数