繁体   English   中英

SyntaxError:Python中的函数之外的'yield'

[英]SyntaxError: 'yield' outside of function in Python

我读过很多关于这个的帖子,我意识到很多人都问过这个问题,但我不明白我做错了什么。 我正在尝试为我正在处理的项目绘制一个带有坐标的网格,并且我正在尝试一些代码来生成它。 我试过这个,但我一直收到这个错误。 代码有什么问题? 我尝试了不同的缩进,但它不起作用。

stepsize = 0.001

for x in range(0, 10, stepsize):
  for y in range(0, 10, stepsize):
    yield (x,y)

如何使用 python 生成常规地理网格?

^^原来的q+a

感谢所有提供帮助的人,我不确定为什么要发布该代码,因为它无论如何都行不通! 对不起,我的误解,我以前没有使用过生成器。 :)

yield关键字用于从函数“返回”生成器对象

关于 yield 关键字的堆栈溢出问题

它不能在函数之外使用,例如在您的代码中。

如果这是在def语句下,那就没问题了,但是这里没有def语句,所以它会引发错误


此外,与问题无关,但这些行不起作用:

for x in range(0, 10, stepsize):
  for y in range(0, 10, stepsize):

因为stepsize是一个浮点数,并且range函数只处理整数 - 它会说TypeError: 'float' object cannot be interpreted as an integer

为了补充已经说过的内容,您可以通过组合生成器来实现您的代码以产生所需的输出。

def increment(start, end, delta):
    while start < end:
        yield start
        start += delta

def double_increment(start, end, delta):
    for x in increment(start, end, delta):
        for y in increment(start, end, delta):
            yield x, y

例子:

for x, y in double_increment(0, 1, 0.4):
    print(f"{x:.2f} {y:.2f}")
0.00 0.00
0.00 0.40
0.00 0.80
0.40 0.00
0.40 0.40
0.40 0.80
0.80 0.00
0.80 0.40
0.80 0.80

您还可以使用product来产生双增量:

from itertools import product
for x, y in product(increment(0, 1, 0.4), repeat=2):
    print(f"{x:.2f} {y:.2f}")

结合更多的 itertools 你可以做:

from itertools import product, count, takewhile
for x, y in product(takewhile(lambda x: x < 1, count(0, step=0.4)), repeat=2):
    print(f"{x:.2f} {y:.2f}")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM