相关疑难解决方法(0)

这两个班级有什么区别?

class SortedDict(dict):
    def __init__(self, data=None):
        if data is None:
            data = {}
        super(SortedDict, self).__init__(data)
Run Code Online (Sandbox Code Playgroud)

class SortedDict(dict):
    def __init__(self, data={}):
        dict(data)
Run Code Online (Sandbox Code Playgroud)

我认为他们是一样的.

python

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

为什么python关联映射成员变量在对象之间共享

对于A类,为什么在对象和对象b之间共享aMap成员变量?

>>> class A:
...     aMap = {}

>>> a = A()
>>> a.aMap["hello"] = 1

>>> b = A()
>>> b.aMap["world"] = 2

>>> c = []
>>> c.append(a)
>>> c.append(b)

>>> for i in c:
...     for j in i.aMap.items():
...         print j
('world', 2)  
('hello', 1)  
('world', 2)  
('hello', 1)  
Run Code Online (Sandbox Code Playgroud)

python

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

在python中,将child附加到root.children(list),并将child.children(list)更改?

码:

class Node:
    def __init__(self, key, children=[]):
        self.key = key
        self.children = children

    def __repr__(self):
        return self.key
Run Code Online (Sandbox Code Playgroud)

执行:

root = Node("root")
child = Node("child")
root.children.append(child)
print child.children
print root.children[0].children
Run Code Online (Sandbox Code Playgroud)

结果:

[child]
[child]
Run Code Online (Sandbox Code Playgroud)

这真的很奇怪,为什么?

Python的版本是2.7.2.

python

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

这两种初始化数组的方法有什么区别?

matrix = [[0]*1005]*1005
Run Code Online (Sandbox Code Playgroud)

matrix = [[0 for _ in range(1005)] for _ in range(1005)]
Run Code Online (Sandbox Code Playgroud)

我发现如果我使用前者初始数组,并运行matrix[1][1] = 1它将每行中的第二列设置为1.第二列按照我的意愿执行.我想不通为什么?

python initialization list

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

创建一个包含n个整数后跟整数的列表

我需要创建一个n个索引为1的列表,然后在一行代码中创建一个10(它必须在一行上在线提交).我试过:(n*[1]).append(10)但是返回一个None类型.这可行吗?谢谢.

python

1
推荐指数
2
解决办法
79
查看次数

与可变对象的默认参数相关的意外python行为

#! /usr/bin/python

class my_class:
    # 1. __init__
    def __init__(self):
        self.my_set = set()

    # 2. __init__
    #def __init__(self, arg_set = set()):
    #    self.my_set = arg_set 

c1 = my_class()
c1.my_set.add('a')

print c1.my_set

c2 = my_class()
c2.my_set.add('b')

print c1.my_set
Run Code Online (Sandbox Code Playgroud)

my_class有两种定义方式__init__:

如果我使用第一种方式,输出是预期的:
set(['a'])
set(['a'])

如果我使用第二种方式,输出是意外的:
set(['a'])
set(['a', 'b'])

第二种方式出了什么问题?如何修改C2(一个单独的对象),导致修改c1?

Edit: Updated the question title to reflect specific area of concern

python

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

递归函数返回值保留先前运行的结果

我有以下递归函数

def collatz(n,seq=[]):
    seq.append(n)
    if n == 1:
        return seq
    if n%2 == 0:
        return collatz(n/2, seq)
    else:
        return collatz((3*n)+1, seq)
Run Code Online (Sandbox Code Playgroud)

当我多次运行此函数时,seq仍然包含先前运行的值:

>>> collatz(1)
[1]                # correct
>>> collatz(2)
[1, 2, 1]          # should be [2,1]
>>> collatz(3)
[1, 2, 1, 3, 10, 5, 16, 8, 4, 2, 1]  # should be [3, 10, 5, 16, 8, 4, 2, 1]
Run Code Online (Sandbox Code Playgroud)

防止这种情况的方法是seq在调用时给出一个空列表collatz:

>>> collatz(3,seq=[])
[3, 10, 5, 16, 8, 4, 2, 1]
Run Code Online (Sandbox Code Playgroud)

有没有办法以collatz不同的方式写,以便我可以collatz(3)代替 …

python recursion return

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

是否可以创建具有相同输入的唯一实例?

我正在研究Python中的代码,它创建了由Bond和Element对象组成的Compound对象(如化合物).这些Element对象是通过一些关于它们的输入(名称,符号,原子序数,原子质量等)创建的.如果我想用Element对象填充数组,并且我希望Element对象是唯一的,那么我可以做一些事情并保持其余部分不变,但是它们都应该具有与'Hydrogen'元素相关的信息.

这个问题Python为单个对象/类创建多个实例让我相信我应该为Element创建子类 - 即Hydrogen对象和Carbon对象等.

这是否可以在不创建子类的情况下实现,如果是这样,怎么办?

python class object instance python-2.7

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

我的 eval 实现是完全安全的吗?

我有一个代码,其中我想,让用户通过标准输入三个值,每种类型的floatFraction或者int,所以我不能申请ast.literal_eval输入得到结果,我想要的。

我读到Eval 真的很危险,显示

  • eval提供意见的人如何利用弱点,以及
  • 一些如何使eval调用更安全的方法。

我应用了作者的建议并编写了此代码,替换了默认值eval

import builtins

class DoubleUnderscoreInEval(ValueError):
    pass

def eval(expression, globals={}, locals=None):
    if '__' in expression:
        raise DoubleUnderscoreInEval('Using __ in eval is not allowed for safety reasons.')
    else:
        if '__builtins__' not in globals:
            globals['__builtins__']={}
        return builtins.eval(expression, globals, locals)
Run Code Online (Sandbox Code Playgroud)

builtins.eval通过我的代码使用是否完全安全?
如果不是,我可以使eval调用完全安全吗?(鼓励绕过我的限制的字符串)
如果是,如何?如果不是,我可以用什么代替?

我是 Python 的初学者,所以鼓励任何告诉我如何改进我的代码的评论。

我在在线编译器中的整个代码

python eval python-3.x

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

Python方法只能工作一次

我正在编写一种计算2到8个时间序列变量的协方差的方法.我打算在将变量传递给此方法时将变量包含在列表对象中.该方法应返回1个数字,而不是协方差矩阵.

该方法在第一次调用时工作正常.在此之后调用它时,它返回0.示例附加在我的代码下方的底部.关于可变范围问题的任何建议/反馈都将非常感激.谢谢!

p = [3,4,4,654]
o = [4,67,4,1]

class Toolkit():
    def CovarianceScalar(self, column1, column2 = [], column3 = [], column4 = [],column5 = [],column6  = [],column7  = [],column8 = []):
    """Assumes all columns have length equal to Len(column1)"""
    #If only the first column is passed, this will act as a variance function
    import numpy as npObject
    #This is a binary-style number that is assigned a value of 1 if one of the input vectors/lists has zero length.  This way, the …
Run Code Online (Sandbox Code Playgroud)

python methods scope

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