小编Per*_*ous的帖子

在Python中使用+和+ =运算符进行串联

最近,我发现串联列表时出现不一致。

因此,如果我使用+运算符,它不会将list与不同类型的任何对象连接在一起。例如,

l = [1,2,3]
l = l + (4,5)        #TypeError: can only concatenate list (not "tuple") to list
Run Code Online (Sandbox Code Playgroud)

但是,如果使用+ =运算符,它将忽略对象的类型。例如,

l = [1,2,3]
l += "he"            #Here, l becomes [1, 2, 3,"h", "e"]

l += (56, 67)        #Here, l becomes [1, 2, 3,"h", "e", 56, 67]
Run Code Online (Sandbox Code Playgroud)

那么,这仅仅是语言的语义还是其他原因?

python list concatenation python-3.x

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

打印解压缩的列表对象返回空列表

在下面的代码中,我试图解压缩一个 zip 对象。

x = [1, 2, 3]; y = ['a', 'b', 'c']

z = zip(x, y)
#print(list(z))                #2nd print statement returns [] if this line is uncommented

unzip = zip(*z)
print(list(unzip))             #returns [(1, 2, 3), ('a', 'b', 'c')]
Run Code Online (Sandbox Code Playgroud)

如果我保持代码不变,它就可以正常工作。但是在取消注释第一个打印语句时,第二个打印语句返回一个空列表而不是返回解压缩的列表对象。为什么?

python list python-zip

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

__dict__ 终极基类的属性,Python 中的对象

以下代码按排序顺序列出了名为“A”的类的属性:-

>>> class A():
        def __init__(self, i):
            self.at = i

>>> sorted(vars(A))
['__dict__', '__doc__', '__init__', '__module__', '__weakref__']
Run Code Online (Sandbox Code Playgroud)

现在,打印键的值,'__dict__'结果如下:-

>>> vars(A)['__dict__']                 #Value of '__dict__'
<attribute '__dict__' of 'A' objects>
Run Code Online (Sandbox Code Playgroud)

根据文档, vars([object])

返回具有__dict__属性的模块、类、实例或任何其他对象的__dict__属性。


我不明白的是,'__dict__'列表中的属性是用于vars()返回属性的相同属性A还是具有其他目标的不同属性,例如按照建议(根据我的说法)实现 A 的对象命名空间的值其中成立。'__dict__'


编辑:-

问题的第一部分与另一个问题(也由@eliotness 提到)非常相关,但这是第二部分(如下所述),我找不到任何答案或相关问题,因此,更改标题题。


让我们考虑另一个在 Python 中生成最终基类属性列表的代码object:-

>>> sorted(vars(object))
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', ...., '__str__', '__subclasshook__']
>>> hasattr(object, '__dict__')
True …
Run Code Online (Sandbox Code Playgroud)

python dictionary magic-methods

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