我正在开发一个Python应用程序; 它将所有代码放在一个包中,然后在这个内部运行.应用程序的Python包对解释器对用户不感兴趣,它只是一个GUI应用程序.
问题是,在应用程序包中导入模块时,首选哪种样式
from application import settings, utils
Run Code Online (Sandbox Code Playgroud)
要么
from . import settings, utils
Run Code Online (Sandbox Code Playgroud)
那就是我可以指定名称(这里是'application')或者我可以用"."来说"当前包".
这是一个免费软件包,因此有可能有人想要创建我的应用程序的分支并更改其名称.在这种情况下,替代方案1是轻微的麻烦.尽管如此,我仍然一直使用样式1(虽然早期代码在某些地方使用样式2),因为样式1看起来好多了.
我错过了我的风格(1)的争论吗?或者不使用风格2是愚蠢的吗?
问题基本上是这个,在python的gobject和gtk绑定中.假设我们有一个在构造时绑定到信号的类:
class ClipboardMonitor (object):
def __init__(self):
clip = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD)
clip.connect("owner-change", self._clipboard_changed)
Run Code Online (Sandbox Code Playgroud)
现在的问题是,ClipboardMonitor的任何实例都不会消亡.gtk剪贴板是一个应用程序范围的对象,并且连接到它会保留对该对象的引用,因为我们使用回调self._clipboard_changed
.
我正在讨论如何使用弱引用(weakref模块)来解决这个问题,但我还没有想出一个计划.任何人都知道如何将回调传递给信号注册,并使其行为类似于弱引用(如果在ClipboardMonitor实例超出范围时调用信号回调,则应该是无操作).
增加:独立于GObject或GTK +的短语:
如何使用weakref语义为不透明对象提供回调方法?如果连接对象超出范围,则应将其删除,并且回调应作为无操作; 连接器不应该持有对连接器的引用.
澄清一下:我明确地希望避免必须调用"析构函数/终结器"方法
我想模仿Java中的Python功能.在Python中,如果我想要一个字符串中的唯一字符,我可以做到,
text = "i am a string"
print set(text) # o/p is set(['a', ' ', 'g', 'i', 'm', 'n', 's', 'r', 't'])
Run Code Online (Sandbox Code Playgroud)
如何在Java中轻松地或直接地执行此操作?
好的,Python的libxml2绑定的文档确实如此****
.我的问题:
XML文档存储在Python中的字符串变量中.该字符串是Unicode的实例,其中包含非ASCII字符.我想用libxml2解析它,看起来像这样:
# -*- coding: utf-8 -*-
import libxml2
DOC = u"""<?xml version="1.0" encoding="UTF-8"?>
<data>
<something>Bäääh!</something>
</data>
"""
xml_doc = libxml2.parseDoc(DOC)
Run Code Online (Sandbox Code Playgroud)
结果如下:
Traceback (most recent call last):
File "test.py", line 13, in <module>
xml_doc = libxml2.parseDoc(DOC)
File "c:\Python26\lib\site-packages\libxml2.py", line 1237, in parseDoc
ret = libxml2mod.xmlParseDoc(cur)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 46-48:
ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
关键是u"..."
宣言.如果我用简单的替换它".."
,那么一切都很好.不幸的是它在我的设置中不起作用,因为它DOC
肯定是一个Unicode实例.
有谁知道如何使用libxml2来解析UTF-8编码的字符串?