相关疑难解决方法(0)

列表更改意外地反映在子列表中

我需要在Python中创建一个列表列表,所以我输入以下内容:

myList = [[1] * 4] * 3
Run Code Online (Sandbox Code Playgroud)

列表看起来像这样:

[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]  
Run Code Online (Sandbox Code Playgroud)

然后我改变了最里面的一个值:

myList[0][0] = 5
Run Code Online (Sandbox Code Playgroud)

现在我的列表看起来像这样:

[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]  
Run Code Online (Sandbox Code Playgroud)

这不是我想要或期望的.有人可以解释一下发生了什么,以及如何解决这个问题?

python list mutable nested-lists

576
推荐指数
10
解决办法
3万
查看次数

Python 2.x陷阱和地雷

我的问题的目的是通过Python加强我的知识库并更好地了解它,包括了解它的错误和意外.为了保持特定的内容,我只对CPython解释器感兴趣.

我正在寻找类似于从我的PHP地雷 问题中学到的东西,其中一些答案对我来说是众所周知的但是一对夫妇的边界恐怖.

更新:显然有一两个人感到不安,我问了一个已经在Stack Overflow之外部分回答的问题.这里的某些妥协是URL http://www.ferg.org/projects/python_gotchas.html

请注意,此处的一个或两个答案已经是上面引用的网站上的原始答案.

python

61
推荐指数
16
解决办法
1万
查看次数

用于Perl程序员的Python

我是一位经验丰富的Perl开发人员,具有一定程度的经验和/或熟悉其他语言(C/C++的工作经验,Java和Scheme的学校经验,以及熟悉其他许多人).

我可能需要在Python中完成一些Web工作(最直接的,与Google App Engine相关).因此,我想问一下如何为那些来自Perl背景的人最好地学习Python提供很好的参考(例如,重点是两者之间的差异以及如何将perl idiomatics翻译成Python惯用语,而不是通用Python参考).以Web开发为中心的东西甚至更好.我会接受任何东西 - 文章,教程,书籍,示例应用程序?

谢谢!

python perl

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

Python中函数的默认值

我注意到以下几点:

class c:
  def __init__(self, data=[]):
    self._data=data
a=c()
b=c()
a._data.append(1)
print b._data
[1]
Run Code Online (Sandbox Code Playgroud)

这是正确的行为吗?

python default-value

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

如果从不同的路径导入,则重新导入模块

在我正在工作的大型应用程序中,有几个人以不同的方式导入相同的模块,例如导入x或从导入x导致x的副作用被导入两次,如果有人依赖于全局属性,可能会引入非常微妙的错误

例如,假设我有一个包mypakcage,包含三个文件mymodule.py,main.py和init .py

mymodule.py内容

l = []
class A(object): pass
Run Code Online (Sandbox Code Playgroud)

main.py内容

def add(x):
    from mypackage import mymodule
    mymodule.l.append(x)
    print "updated list",mymodule.l

def get():
    import mymodule
    return mymodule.l

add(1)
print "lets check",get()

add(1)
print "lets check again",get()
Run Code Online (Sandbox Code Playgroud)

它打印

updated list [1]
lets check []
updated list [1, 1]
lets check again []
Run Code Online (Sandbox Code Playgroud)

因为现在在两个不同的模块中有两个列表,类似的A类是不同的对我来说它看起来很严重因为类本身将被区别对待,例如下面的代码打印False

def create():
    from mypackage import mymodule
    return mymodule.A()

def check(a):
    import mymodule
    return isinstance(a, mymodule.A)

print check(create())
Run Code Online (Sandbox Code Playgroud)

题:

有什么方法可以避免这种情况吗?除了强制执行该模块应该以单向onyl方式导入.这不能由python导入机制处理,我在django代码和其他地方也看到了与此相关的几个错误.

python python-import

8
推荐指数
2
解决办法
1219
查看次数

Python函数调用正在放弃范围,有状态,无法初始化参数?

在我大胆地提交错误报告之前,我想我会在这里用更聪明的Pythonistas检查我的假设.我今天遇到了一个令人困惑的案例,所以我把它改成了一个玩具示例,如下所示:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

"""
A little script to demonstrate that a function won't re-initialize its
list parameters between calls, but instead allows them to retain state.

"""

def bleedscope(a=[], b=[]):
    """
    On each call, unless explicitly passed, both `a` and `b` should be
    initialized as empty lists.

    """

    c = a
    if b:
        c.extend(b)
    return len(c)


x = bleedscope(b=[1])
print x     # Should be 1, as expected.
x = bleedscope(b=[2])
print x     # Expect also …
Run Code Online (Sandbox Code Playgroud)

python scope

5
推荐指数
3
解决办法
935
查看次数

Python实例和属性:这是一个错误还是我完全错了?

假设你有这样的东西:

class intlist:
        def __init__(self,l = []):
                self.l = l
        def add(self,a):
                self.l.append(a)

def appender(a):
        obj = intlist()
        obj.add(a)
        print obj.l

if __name__ == "__main__":
        for i in range(5):
                appender(i)
Run Code Online (Sandbox Code Playgroud)

函数创建一个intlist实例,并在该新实例上调用该方法附加在实例属性l上.

为什么这段代码的输出是:

[0]

[0,1]

[0,1,2]

[0,1,2,3]

[0,1,2,3,4]

?如果我切换

obj = intlist()
Run Code Online (Sandbox Code Playgroud)

obj = intlist(l=[])
Run Code Online (Sandbox Code Playgroud)

我得到了所需的输出

[0]

[1]

[2]

[3]

[4]

为什么会这样?

谢谢

python attributes class instance

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

Python列表清单

可能重复:
Python列表中的意外功能

我想在Python中列出一个列表,但显然这不起作用,因为更改一个数字会改变几个.为什么会这样,我该如何解决?

>>> a = [[0]*3]*4
>>> a[0][0] = 1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

python list

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

Twisted是否改变了它的依赖关系?

我目前正在开发一个Python/Twisted项目,该项目将在Planetlab上进行分发和测试.由于某些原因,我的代码在周五工作,现在我想测试一个小的改变,它拒绝工作:

Traceback (most recent call last):
  File "acn_a4/src/node.py", line 6, in <module>
    from twisted.internet.protocol import DatagramProtocol
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/__init__.py", line 18, in <module>
    from twisted.python import compat
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/python/compat.py", line 146, in <module>
    import operator
  File "/home/cdecker/dev/acn/acn_a4/src/operator.py", line 7, in <module>
  File "/home/cdecker/acn_a4/src/node.py", line 6, in <module>
    from twisted.internet.protocol import DatagramProtocol
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/internet/protocol.py", line 20, in <module>
    from twisted.python import log, failure, components
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/python/log.py", line 19, in <module>
    from twisted.python import util, context, reflect
  File "/usr/lib/python2.5/site-packages/Twisted-10.0.0-py2.5-linux-i686.egg/twisted/python/util.py", line 5, in <module> …
Run Code Online (Sandbox Code Playgroud)

python twisted

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