Python中"iterable","iterator"和"iteration"的最基本定义是什么?
我已阅读多个定义,但我无法确定其确切含义,因为它仍然不会沉入其中.
有人可以帮助我解释外行人的3个定义吗?
在下面的代码中,该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) 我想创建一个类来像字典一样解压它的对象。
例如,使用字典,您可以这样做
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)