相关疑难解决方法(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万
查看次数

在Python中通过引用传递整数

如何在Python中通过引用传递整数?

我想修改我传递给函数的变量的值.我已经读过Python中的所有内容都是按值传递的,但必须有一个简单的技巧.例如,在Java中,你可以通过引用类型的Integer,Long等等.

  1. 如何通过引用将整数传递给函数?
  2. 什么是最佳做法?

python function pass-by-reference pass-by-value

70
推荐指数
8
解决办法
9万
查看次数

在python中创建一个匿名类实例

有时候我需要在python中创建一个匿名类实例,就像c#一样:

var o= new {attr1="somehing", attr2=344};
Run Code Online (Sandbox Code Playgroud)

但是在python中我这样做:

class Dummy: pass
o = Dummy()
o.attr1 = 'something'
o.attr2 = 344
#EDIT 1
print o.attr1, o.attr2
Run Code Online (Sandbox Code Playgroud)

如何在单一语句中以pythonic方式做到这一点?

python anonymous-types instance

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

增加int对象

有没有办法在python中增加int对象,int似乎没有实现,__iadd__所以+ = 1实际上返回一个新对象

>>> n=1
>>> id(n)
9788024
>>> n+=1
>>> id(n)
9788012
Run Code Online (Sandbox Code Playgroud)

我想要的是保持指向同一个对象.

目的:我有从int派生的类,我想为该类实现C类型'++ n'运算符

结论:好的,因为int是不可变的,没有办法,看起来我将不得不写这样的东西

class Int(object):
    def __init__(self, value):
        self._decr = False
        self.value = value

    def __neg__(self):
        if self._decr:
            self.value -= 1
        self._decr = not self._decr
        return self

    def __str__(self):
        return str(self.value)

    def __cmp__(self, n):
        return cmp(self.value, n)

    def __nonzero__(self):
        return self.value

n = Int(10)
while --n:
    print n
Run Code Online (Sandbox Code Playgroud)

python int

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

SimpleNamespace 是否有类型提示?

假设我正在定义一个返回types.SimpleNamespace 的函数。我想输入提示结果:

from types import SimpleNamespace

def func() -> SimpleNamespace(x: int, y: str):  # SyntaxError! What should be used instead?
    return SimpleNamespace(x=3, y='abc')
Run Code Online (Sandbox Code Playgroud)

请注意,通常用作数据成员命名SimpleNamespace的替代方法。tuple对于元组,存在相应的类型提示:

from typing import Tuple

def func() -> Tuple[int, str]:  # OK
    return 3, 'abc'
Run Code Online (Sandbox Code Playgroud)

顺便说一句,今天我使用以下内容作为文档:

from types import SimpleNamespace

def func() -> SimpleNamespace(x=int, y=str):  # Seems to work fine
    return SimpleNamespace(x=3, y='abc')
Run Code Online (Sandbox Code Playgroud)

但这不是标准的(因此类型检查器不支持它),并且可能不是正确的Python(或者是吗?)。

python type-hinting

8
推荐指数
0
解决办法
2367
查看次数

在Jython中,我可以创建一个实现Java接口的内联匿名类吗?

在Java中,我可以说

Thread t = new Thread(){
    public void run(){ // do stuff }
}
Run Code Online (Sandbox Code Playgroud)

(或类似的东西)声明一个内联的匿名类.这对于制作事件处理程序或其他回调类型的东西非常有用,在任何合理的语言中,首先不需要对象拥有它们.

我在Jython中面临同样的问题 - 我想定义一个事件处理程序,但我不想构建一个完整的独立类来执行此操作.

理想情况下,我只能传递一个lambda并完成它,但如果这是可能的,我无法在文档中的任何地方找到它.

java jython anonymous-class

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

从python中的java代码重现uuid

在Java应用程序中,创建文件,其中文件名是从使用该函数创建的蛋白质序列(例如TTCCPSIVARSNFNVCRLPGTPEAICATYTGCIIIPGATCPGDYAN)生成的UUID UUID.nameUUIDFromBytes.这导致UUID c6a0deb5-0c4f-3961-9d19-3f0fde0517c2.

UUID.namedUUIDFromBytes不将名称空间作为参数,而在python uuid.uuid3中则不行.根据JDK使用什么命名空间来生成名称为UUIDFromBytes的UUID?,命名空间应该作为名称的一部分传递,但是不再可能更改java代码.

有没有办法在python代码中创建自定义命名空间,以便它将生成与Java代码相同的UUID?

python java uuid

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