相关疑难解决方法(0)

如何通过引用传递变量?

Python文档似乎不清楚参数是通过引用还是值传递,以下代码生成未更改的值'Original'

class PassByReference:
    def __init__(self):
        self.variable = 'Original'
        self.change(self.variable)
        print(self.variable)

    def change(self, var):
        var = 'Changed'
Run Code Online (Sandbox Code Playgroud)

有什么我可以通过实际参考传递变量吗?

python reference parameter-passing pass-by-reference

2480
推荐指数
22
解决办法
124万
查看次数

不可变与可变类型

我对不可变类型是多么困惑.我知道该float对象被认为是不可变的,我的书中有这种类型的例子:

class RoundFloat(float):
    def __new__(cls, val):
        return float.__new__(cls, round(val, 2))
Run Code Online (Sandbox Code Playgroud)

这是因为类结构/层次结构被认为是不可变的吗?意思float是在类的顶部并且是它自己的方法调用.类似于这种类型的例子(即使我的书说dict是可变的):

class SortedKeyDict(dict):
    def __new__(cls, val):
        return dict.__new__(cls, val.clear())
Run Code Online (Sandbox Code Playgroud)

虽然可变的东西在类中有方法,但是这种类型的例子:

class SortedKeyDict_a(dict):
    def example(self):
        return self.keys()
Run Code Online (Sandbox Code Playgroud)

另外,对于最后一个class(SortedKeyDict_a),如果我将这种类型的集合传递给它:

d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))
Run Code Online (Sandbox Code Playgroud)

在不调用example方法的情况下,它返回一个字典.SortedKeyDictwith 将其__new__标记为错误.我尝试将整数传递给RoundFloat类,__new__并且它没有标记错误.

python mutable immutability

172
推荐指数
11
解决办法
25万
查看次数

numpy数组赋值问题

我在Numpy的Python 2.6.5中遇到了一个奇怪的问题.我分配一个numpy数组,然后将一个新变量等同于它.当我对新数组执行任何操作时,原始值也会更改.这是为什么?请参阅下面的示例.请启发我,因为我对Python很新,而且编程一般.

-Sujan

>>> import numpy as np
>>> a = np.array([[1,2],[3,4]])
>>> b = a
>>> b
array([[1, 2],
       [3, 4]])
>>> c = a
>>> c
array([[1, 2],
       [3, 4]])
>>> c[:,1] = c[:,1] + 5
>>> c

array([[1, 7],
       [3, 9]])
>>> b
array([[1, 7],
       [3, 9]])
>>> a
array([[1, 7],
       [3, 9]])
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

对象和基本类型的分配

有这个代码:

# assignment behaviour for integer
a = b = 0
print a, b # prints 0 0
a = 4
print a, b # prints 4 0 - different!

# assignment behaviour for class object
class Klasa:
    def __init__(self, num):
        self.num = num

a = Klasa(2)
b = a
print a.num, b.num # prints 2 2
a.num = 3
print a.num, b.num # prints 3 3 - the same!
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 为什么赋值运算符对基本类型和类对象的工作方式不同(对于基本类型,它按值复制,对于通过引用复制的类对象)?
  2. 如何只按值复制类对象?
  3. 如何为C++ int&b = a中的基本类型引用?

python

7
推荐指数
2
解决办法
2423
查看次数

Python:两个对象是相同的

可能重复:
对象和基本类型的分配

a = [1,2,3]
b = a
print b is a
Run Code Online (Sandbox Code Playgroud)

此代码打印True.为什么?如果两个变量指向同一个对象,则"is"仅返回True,在这种情况下,它们是具有相同值的不同对象."=="将返回True,但"is"不应该返回True.

但是,自从

b.reverse()
print a,b
Run Code Online (Sandbox Code Playgroud)

打印[3,2,1] [3,2,1],似乎就解释器而言,它们是相同的对象,并且b上的操作将自动在a上执行.再次,为什么?我以前从未见过这样的事情.

python list

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