相关疑难解决方法(0)

迭代器,迭代和迭代究竟是什么?

Python中"iterable","iterator"和"iteration"的最基本定义是什么?

我已阅读多个定义,但我无法确定其确切含义,因为它仍然不会沉入其中.

有人可以帮助我解释外行人的3个定义吗?

python iteration iterator iterable terminology

408
推荐指数
10
解决办法
29万
查看次数

为什么 dataclasses.astuple 返回类属性的深层副本?

在下面的代码中,该astuple函数正在执行数据类的类属性的深层复制。为什么它产生的结果与函数不同my_tuple

import copy
import dataclasses


@dataclasses.dataclass
class Demo:
    a_number: int
    a_bool: bool
    classy: 'YOhY'

    def my_tuple(self):
        return self.a_number, self.a_bool, self.classy

class YOhY:
    def __repr__(self):
        return (self.__class__.__qualname__ + f" id={id(self)}")


why = YOhY()
print(why)  # YOhY id=4369078368

demo = Demo(1, True, why)
print(demo)  # Demo(a_number=1, a_bool=True, classy=YOhY id=4369078368)

untrupled = demo.my_tuple()
print(untrupled)  # YOhY id=4369078368

trupled = dataclasses.astuple(demo)
print(trupled)  # YOhY id=4374460064

trupled2 = trupled
print(trupled2)  # YOhY id=4374460064

trupled3 = copy.copy(trupled)
print(trupled3)  # YOhY id=4374460064

trupled4 …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-dataclasses

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

拆开一个类

我想创建一个类来像字典一样解压它的对象。

例如,使用字典,您可以这样做

foo = {
  "a" : 1
  "b" : 2
}

def bar(a,b):
   return a + b

bar(**foo)
Run Code Online (Sandbox Code Playgroud)

输出3

我希望能够做到这一点

class FooClass:
    def __init__(self):
        self.a = a
        self.b = b

f = FooClass()
bar(**f)
Run Code Online (Sandbox Code Playgroud)

并让它输出3

是我能找到的最相关的问题,但它没有解决这个问题,所以我认为这可能是不可能的。


目前我的解决方案是这样的:

class FooClass:
    def __init__(self):
        self.a = a
        self.b = b

    def to_dict(self):
        return {
          "a" : self.a,
          "b" : self.b
        }
Run Code Online (Sandbox Code Playgroud)
f = FooClass()
bar(**f.to_dict())
Run Code Online (Sandbox Code Playgroud)

python argument-unpacking

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