GVKun编程网logo

我可以防止在Python中修改对象吗?(我可以防止在python中修改对象吗英语)

26

关于我可以防止在Python中修改对象吗?和我可以防止在python中修改对象吗英语的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Java在Python中修改了UTF-8字符串、Pyth

关于我可以防止在Python中修改对象吗?我可以防止在python中修改对象吗英语的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Java在Python中修改了UTF-8字符串、Python-我可以访问调用我的对象吗?、Python中的所有对象都是像Ruby这样的对象吗?、不允许在Python中修改列表迭代器?等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

我可以防止在Python中修改对象吗?(我可以防止在python中修改对象吗英语)

我可以防止在Python中修改对象吗?(我可以防止在python中修改对象吗英语)

我想控制全局变量(或全局范围的变量),使其在程序初始化代码中仅设置一次,然后将其锁定。

我对全局变量使用UPPER_CASE_VARIABLES,但是我想有一种确定的方法,无论如何不要更改变量。

  • python是否提供(或类似)功能?
  • 您如何控制全局范围的变量?

答案1

小编典典

Activestate有一个由古老的Alex
Martelli撰写的题为“ Constants in
Python
”的食谱

用于创建具有创建后无法反弹的属性的模块。听起来像您在寻找什么,除了大写字母-
但这可以通过检查属性名称是否全部大写来添加。const

当然,这可以由有决心的人规避,但这就是Python的方式—并被大多数人视为“好事”。但是,要使其变得更困难一点,我建议您不要去添加所谓的显而易见的__delattr__方法,因为人们可以随后删除名称,然后将其重新添加回不同的值。

这就是我要采取的措施:

# Put in const.py...# from http://code.activestate.com/recipes/65207-constants-in-pythonclass _const:    class ConstError(TypeError): pass  # Base exception class.    class ConstCaseError(ConstError): pass    def __setattr__(self, name, value):        if name in self.__dict__:            raise self.ConstError("Can''t change const.%s" % name)        if not name.isupper():            raise self.ConstCaseError(''const name %r is not all uppercase'' % name)        self.__dict__[name] = value# Replace module entry in sys.modules[__name__] with instance of _const# (and create additional reference to it to prevent its deletion -- see#  https://stackoverflow.com/questions/5365562/why-is-the-value-of-name-changing-after-assignment-to-sys-modules-name)import sys_ref, sys.modules[__name__] = sys.modules[__name__], _const()if __name__ == ''__main__'':    import __main__  as const  # Test this module...    try:        const.Answer = 42  # Not OK to create mixed-case attribute name.    except const.ConstCaseError as exc:        print(exc)    else:  # Test failed - no ConstCaseError exception generated.        raise RuntimeError("Mixed-case const names should''t be allowed!")    try:        const.ANSWER = 42  # Should be OK, all uppercase.    except Exception as exc:        raise RuntimeError("Defining a valid const attribute should be allowed!")    else:  # Test succeeded - no exception generated.        print(''const.ANSWER set to %d raised no exception'' % const.ANSWER)    try:        const.ANSWER = 17  # Not OK, attempt to change defined constant.    except const.ConstError as exc:        print(exc)    else:  # Test failed - no ConstError exception generated.        raise RuntimeError("Shouldn''t be able to change const attribute!")

输出:

const name ''Answer'' is not all uppercaseconst.ANSWER set to 42 raised no exceptionCan''t change const.ANSWER

Java在Python中修改了UTF-8字符串

Java在Python中修改了UTF-8字符串

我通过 Python与Java应用程序连接.我需要能够构造包含utf-8字符串的字节序列. Java在DataInputStream.readUTF()中使用修改后的utf-8编码,python( yet at least)不支持

有人能指出我在python中构造java修改的utf-8字符串的正确方向吗?

更新#1:要了解有关java修改的utf-8的更多信息,请查看来自550 here或here in the Java SE docs行的DataInput接口的readUTF方法.

更新#2:我正在尝试与第三方JBoss Web应用程序进行交互,该应用程序正在使用此修改后的utf8格式通过调用DataInputStream.readUTF来读取字符串中的字符串(对于普通java utf8字符串操作的任何混淆感到抱歉).

提前致谢.

解决方法

您可以忽略修改的UTF-8编码(MUTF-8)并将其视为UTF-8.在Python方面,你可以像这样处理它,

>将字符串转换为普通的UTF-8并将字节存储在缓冲区中.
>在big-endian中将2字节缓冲区长度(不是字符串长度)写为二进制.
>写下整个缓冲区.

我在PHP中完成了这一点,Java根本没有抱怨我的编码(至少在Java 5中).

MUTF-8主要用于JNI和其他具有空终止字符串的系统.与普通UTF-8的唯一区别在于U 0000是如何编码的.普通UTF-8使用1字节编码(0x00),MUTF-8使用2字节(0xC0 0x80).首先,您不应该在任何Unicode文本中使用U 0000(无效的代码点).其次,DataInputStream.readUTF()不强制执行编码,因此它很乐意接受任何一个.

编辑:Python代码应该是这样的,

def writeUTF(data,str):
    utf8 = str.encode('utf-8')
    length = len(utf8)
    data.append(struct.pack('!H',length))
    format = '!' + str(length) + 's'
    data.append(struct.pack(format,utf8))

Python-我可以访问调用我的对象吗?

Python-我可以访问调用我的对象吗?

如果我有这个:

class A:
    def callFunction(self,obj):
        obj.otherFunction()

class B:
    def callFunction(self,obj):
        obj.otherFunction()

class C:
    def otherFunction(self):
        # here I wan't to have acces to the instance of A or B who call me.

...

# in main or other object (not matter where)
a = A()
b = B()
c = C()
a.callFunction(c) # How 'c' know that is called by an instance of A...
b.callFunction(c) # ... or B

尽管有设计或其他问题,但这只是一个有疑问的问题。

注意:必须在不更改 签名的 情况下完成此操作otherFunction __

Python中的所有对象都是像Ruby这样的对象吗?

Python中的所有对象都是像Ruby这样的对象吗?

我在另一个Stack
Overflow问题上读到,Python就像Ruby一样,因为它涉及到“一切都是对象”,而Python中的一切都是对象,就像Ruby一样。

这是真的?Python中的所有对象都是像Ruby这样的对象吗?

两者在这方面有何不同?或者它们真的相同吗?例如,您能拿一个数字来做我所看到的Ruby吗:

y = 5.plus 6

可以在Python中以相同的方式完成吗?

不允许在Python中修改列表迭代器?

不允许在Python中修改列表迭代器?

简单的例子:

myList = [1, 2, 3, 4, 5]for obj in myList:  obj += 1print myList

版画

[1, 2, 3, 4, 5][1, 2, 3, 4, 5]

而:

myList = [1, 2, 3, 4, 5]for index in range(0,len(myList)):  myList[index] += 1print myList

版画

[1, 2, 3, 4, 5][2, 3, 4, 5, 6]

结论:

  1. 可以使用全局列表访问权限在适当位置修改列表
  2. 列表项可以 来代替使用迭代对象修改

我可以找到的所有示例代码都使用全局列表访问器来就地修改列表。修改列表迭代器是如此邪恶吗?

答案1

小编典典

infor obj inmyList:在每次迭代中obj都是in中元素的(浅)副本myList。因此,对的更改对的元素obj没有任何作用myList

这是 不同 与的Perlfor my $obj (@myList) {}

今天的关于我可以防止在Python中修改对象吗?我可以防止在python中修改对象吗英语的分享已经结束,谢谢您的关注,如果想了解更多关于Java在Python中修改了UTF-8字符串、Python-我可以访问调用我的对象吗?、Python中的所有对象都是像Ruby这样的对象吗?、不允许在Python中修改列表迭代器?的相关知识,请在本站进行查询。

本文标签: