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中通过引用传递整数?
我想修改我传递给函数的变量的值.我已经读过Python中的所有内容都是按值传递的,但必须有一个简单的技巧.例如,在Java中,你可以通过引用类型的Integer,Long等等.
有时候我需要在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中增加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) 假设我正在定义一个返回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(或者是吗?)。
在Java中,我可以说
Thread t = new Thread(){
public void run(){ // do stuff }
}
Run Code Online (Sandbox Code Playgroud)
(或类似的东西)声明一个内联的匿名类.这对于制作事件处理程序或其他回调类型的东西非常有用,在任何合理的语言中,首先不需要对象拥有它们.
我在Jython中面临同样的问题 - 我想定义一个事件处理程序,但我不想构建一个完整的独立类来执行此操作.
理想情况下,我只能传递一个lambda并完成它,但如果这是可能的,我无法在文档中的任何地方找到它.
在Java应用程序中,创建文件,其中文件名是从使用该函数创建的蛋白质序列(例如TTCCPSIVARSNFNVCRLPGTPEAICATYTGCIIIPGATCPGDYAN)生成的UUID UUID.nameUUIDFromBytes.这导致UUID c6a0deb5-0c4f-3961-9d19-3f0fde0517c2.
UUID.namedUUIDFromBytes不将名称空间作为参数,而在python uuid.uuid3中则不行.根据JDK使用什么命名空间来生成名称为UUIDFromBytes的UUID?,命名空间应该作为名称的一部分传递,但是不再可能更改java代码.
有没有办法在python代码中创建自定义命名空间,以便它将生成与Java代码相同的UUID?