TLDR: 我们可以yield在一个lambda?中实现或生成语句(带循环)?
我的问题是澄清:
是否可以使用yield实现以下简单循环函数
def loopyield():
for x in range(0,15):
yield x
print(*loopyield())
Run Code Online (Sandbox Code Playgroud)
结果有误:
lamyield=lambda x: yield x for x in range(0,15)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
看起来像是,它期待一些东西作为不成文的返回语句的正确操作数,但发现yeild并且变得困惑.
是否有合适的合法方式在循环中实现这一目标?
旁注:yield可以是语句/表达式取决于你问的对象:yield - statement还是expression?
最终答案: yield可以与lambda一起使用,但限制(单行)使它无用. for/while在lambda中不可能,因为它们不是表达式. -user2357112隐式for循环可以使用列表推导,并且yield在列表推导中有效.- wim
判决 -显式循环不可能,因为python中的lambdas只能包含表达式,并且要编写显式循环,您需要使用语句.-wim
我使用 field(init= False) 来禁用初始化 self.ref。那么它就是 post 中的一个值。以下代码引发AttributeError: 'Data' object has no attribute 'ref'
from dataclasses import dataclass, field
def make_list(): return [[0] for k in range(9)]
@dataclass
class Data:
rows: list
cols: list
blocks: list
ref: dict = field(init=False)
def __init__(self, slots=None):
self.rows = make_list()
self.cols = make_list()
self.blocks = make_list()
if slots:
for i in range(9):
for j in range(9):
self.cols[j][i] = self.rows[i][j] = slots[i][j]
def __post_init__(self):
print("post-init executed")
self.ref = {"rows": self.rows, "cols": self.cols, "blocks": self.blocks}
test …Run Code Online (Sandbox Code Playgroud) 我正在阅读关于生成器和迭代器以及它的作用__next__().
'__next__' in dir(mygen).是真的
'__next__' in dir(mylist),是假的
当我深入研究它时,
'__next__' in dir (mylist.__iter__()) 是真的
为什么__next__只适用于列表中,但只有__iter__()和mygen,但不会mylist.当我们使用list-comprehension踩到列表时,如何__iter__()调用__next__
我打电话试图手动步进(+1)发电机mygen.__next__().它不存在.它只存在于mygen.__next__被称为method-wrapper的地方.
什么是方法包装器,它做什么?它是如何应用的:inmygen() and __iter__() ?
如果__next__是生成器和迭代器提供的(以及它们的唯一属性)那么生成器和迭代器之间有什么区别?*
答案3:解决,如mod /编辑所述:
更新:生成器和迭代器都有__next__().我的错.看着日志,某种程度上mygen.__next__()测试给了我停止异常错误.但我无法再次复制该错误.
谢谢大家回答!
在这篇文章在这里和其他人:看起来你需要导入app.module.ts HttpClientModule和HttpClient的在app.component.ts做一个HTTP请求.为什么?他们是如何工作的?
我有一组数据,让我们称它们为形状.
有三种形状:
1) circle :
x-coordinate
y-coordinate
r-radius
c-color
2) square:
x-coordinate
y-coordinate
s-side
c- color
3) line:
x-coordinate
y-coordinate
x1-coordinate
y1-coordinate
c- color
Run Code Online (Sandbox Code Playgroud)
哪种数据类型最适合他们?我应该制作一个形状类,并将圆形,方形和线条作为形状的子类吗?如果我这样做,我可以将它们全部放在一个类文件中吗?
作为旁注:在创建每个形状时,构造函数将仅被赋予maxX和maxY.形状将使用随机数自动生成,其将保持在(0,0,maxX,maxY)内的入站.它们的尺寸也是由用户决定的.我保持它们从1/10到1/3或屏幕宽度.但它们不是那么重要的细节.
我可能在一个独特的情况下,将空字符串评估为true将节省几行代码.(我理解空字符串计算为false.如下)
'' and print ("empty string is true")
'0' and print ("non-empty string is true")
> non-empty string is true
Run Code Online (Sandbox Code Playgroud)
原因如下:
这没问题.但看看输出.
def baseN(num,b):
return (num == 0) and "0" or
(baseN(num // b, b) + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
> baseN(32,16)
> 020
Run Code Online (Sandbox Code Playgroud)
更改最后一个结果(在递归结束时)打印出空字符串,给我错误.
def baseN(num,b):
return (num == 0) and "" or
( baseN(num // b, b) + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
> baseN(32,16)
> File "<stdin>", line 2, in baseN
> RuntimeError: maximum recursion depth exceeded in comparison
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,因为 …