相关疑难解决方法(0)

在Python的列表中对__str__感到困惑

来自Java背景,我明白__str__这就像是toString的Python版本(虽然我确实认识到Python是较旧的语言).

所以,我已经定义了一个小类以及__str__如下方法:

class Node:

    def __init__(self, id):
        self.id = id
        self.neighbours = []
        self.distance = 0


    def __str__(self):
        return str(self.id)
Run Code Online (Sandbox Code Playgroud)

然后我创建了一些它的实例:

uno = Node(1)    
due = Node(2)    
tri = Node(3)    
qua = Node(4)
Run Code Online (Sandbox Code Playgroud)

现在,尝试打印其中一个对象时的预期行为是打印相关值.这也发生了.

print uno
Run Code Online (Sandbox Code Playgroud)

产量

1
Run Code Online (Sandbox Code Playgroud)

但是当我做以下事情时:

uno.neighbours.append([[due, 4], [tri, 5]])
Run Code Online (Sandbox Code Playgroud)

然后

print uno.neighbours
Run Code Online (Sandbox Code Playgroud)

我明白了

[[[<__main__.Node instance at 0x00000000023A6C48>, 4], [<__main__.Node instance at 0x00000000023A6D08>, 5]]]
Run Code Online (Sandbox Code Playgroud)

在哪里我期待

[[2, 4], [3, 5]]
Run Code Online (Sandbox Code Playgroud)

我错过了什么?还有什么其他令人讨厌的东西我在做什么?:)

python printing string list tostring

113
推荐指数
5
解决办法
18万
查看次数

为什么Pylint不喜欢内置函数?

我有这样一条线:

filter(lambda x: x == 1, [1, 1, 2])
Run Code Online (Sandbox Code Playgroud)

Pylint正在显示警告:

W:  3: Used builtin function 'filter'
Run Code Online (Sandbox Code Playgroud)

这是为什么?列表理解推荐的方法是什么?

当然我可以像这样重写:

[x for x in [1, 1, 2] if x == 1]
Run Code Online (Sandbox Code Playgroud)

而且我没有收到任何警告,但我想知道是否有这样的PEP?

python list-comprehension pylint

73
推荐指数
3
解决办法
2万
查看次数

在python中使用str.join和生成器表达式

当我在对象数组而不是字符串数组上读取Python string.join(list)的问题时,我找到以下句子:

', '.join(str(x) for x in list)
Run Code Online (Sandbox Code Playgroud)

我已经知道(str(x) for x in list)是一个生成器表达式,我也知道生成器是一个可迭代的.以下代码验证了我的视图的正确性.

>>> gen = (x for x in [1,2,3])
<generator object <genexpr> at 0x104349b40>
>>> from collections import Iterable
>>> isinstance(gen, Iterable)
True
Run Code Online (Sandbox Code Playgroud)

同时,str.join(iterable)返回一个字符串,该字符串是iterable中字符串的串联.所以以下工作正常,我希望如此.

>>> ",".join((str(x) for x in [1,2,3]))
'123'
Run Code Online (Sandbox Code Playgroud)

接下来是问题,为什么代码在下面工作得很好,为什么在函数调用中不需要括号.

', '.join(str(x) for x in [1,2,3])
Run Code Online (Sandbox Code Playgroud)

毕竟, str(x) for x in [1,2,3]它本身不是发电机.

>>> tmp = str(x) for x in [1,2,3]
  File "<stdin>", line 1
    tmp = str(x) …
Run Code Online (Sandbox Code Playgroud)

python generator call

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