小编the*_*Dog的帖子

python:lambda,yield-statement/expression和loops(Clarify)

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

python lambda loops generator python-3.x

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

Dataclass:如何创建一个不需要初始化且自动生成的字段?

我使用 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)

python python-3.x python-dataclasses

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

生成器和迭代器中的__next__以及什么是方法包装器?

我正在阅读关于生成器和迭代器以及它的作用__next__().

'__next__' in dir(mygen).是真的

'__next__' in dir(mylist),是假的

当我深入研究它时,

'__next__' in dir (mylist.__iter__()) 是真的

  1. 为什么__next__只适用于列表中,但只有__iter__()mygen,但不会mylist.当我们使用list-comprehension踩到列表时,如何__iter__()调用__next__

    我打电话试图手动步进(+1)发电机mygen.__next__().它不存在.它只存在于mygen.__next__被称为method-wrapper的地方.

  2. 什么是方法包装器,它做什么?它是如何应用的:inmygen() and __iter__() ?

  3. 如果__next__是生成器和迭代器提供的(以及它们的唯一属性)那么生成器和迭代器之间有什么区别?*

    答案3:解决,如mod /编辑所述:

    Python的生成器和迭代器之间的区别

更新:生成器和迭代器都有__next__().我的错.看着日志,某种程度上mygen.__next__()测试给了我停止异常错误.但我无法再次复制该错误.

谢谢大家回答!

python iterator generator wrapper python-3.x

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

Angular 4,httpClient和HttpClientModule之间的区别

在这篇文章在这里和其他人:看起来你需要导入app.module.ts HttpClientModule和HttpClient的在app.component.ts做一个HTTP请求.为什么?他们是如何工作的?

asynchronous behaviorsubject angular angular4-httpclient

4
推荐指数
1
解决办法
1600
查看次数

我应该使用哪种数据类型?

我有一组数据,让我们称它们为形状.

有三种形状:

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或屏幕宽度.但它们不是那么重要的细节.

java data-structures

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

Python:空字符串计算为'false'

我可能在一个独特的情况下,将空字符串评估为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)

这显然不起作用,因为 …

python base

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