我已经碰到过好几次了.我正在处理许多可以接受字符串列表的方法.有几次我意外地传递了一个字符串,它被分解成一个列表并且每个字符被使用,这不是所希望的行为.
def test(a,b):
x = []
x.extend(a)
x.extend(b)
return x
x = [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
我不想发生什么:
test(x,'test')
[1, 2, 3, 4, 't', 'e', 's', 't']
Run Code Online (Sandbox Code Playgroud)
我不得不求助于一种奇怪的语法:
test(x,['list'])
Run Code Online (Sandbox Code Playgroud)
我希望这些隐含地工作:
test(x,'list')
[1, 2, 3, 4, 'test']
test(x,['one', 'two', 'three'])
[1, 2, 3, 4, 'one', 'two', 'three']
Run Code Online (Sandbox Code Playgroud)
我真的觉得有一个"pythonic"的方式来做这个或涉及鸭子打字的东西,但我没有看到它.我知道我可以使用isinstance()来检查它是否是一个字符串,但我觉得有更好的方法.
编辑:我正在使用python 2.4.3
python是否有向后推进的方法?我希望能够同时执行filter()(或列表推导)并反转列表,这样我就可以避免单独执行(我怀疑它会更慢).我正在使用python 2.4(我不得不),但我也很好奇列表解析解决方案在python 3.0中会是什么.
编辑这两个解决方案看起来都是一样的:
python -m timeit -s 'x=[1,2,3,4,5]*99; filter(lambda x: x == 5, reversed(x))'
100000000 loops, best of 3: 0.0117 usec per loop
python -m timeit -s 'x=[1,2,3,4,5]*99; x.reverse(); filter(lambda x: x == 5, x)'
100000000 loops, best of 3: 0.0117 usec per loop
Run Code Online (Sandbox Code Playgroud) 在doxygen中,标准的"///\todo stuff"用于标记待办事项.我在MSVC中完成了大部分编码,因此能够在任务列表中看到TODO是很方便的.MSVC使用"// TODO stuff"作为标签.有没有办法让它们一起工作?我找到了任务列表的属性窗格,并尝试将"\ todo"添加到列表中,但它不喜欢"\"字符.我可以让这两个一起工作吗?
编辑:我特别感兴趣的是在Visual Studio 10中找到如何执行此操作.
我有一个单元测试,我想为一个将XML作为字符串的函数编写.这是一个doctest,我希望XML与测试一致.由于XML是多行的,我在doctest中尝试了一个字符串文字,但没有成功.这是简化的测试代码:
def test():
"""
>>> config = \"\"\"\
<?xml version="1.0"?>
<test>
<data>d1</data>
<data>d2</data>
</test>\"\"\"
"""
if __name__ == "__main__":
import doctest
doctest.testmod(name='test')
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
File "<doctest test.test[0]>", line 1
config = """ <?xml version="1.0"?>
^
SyntaxError: EOF while scanning triple-quoted string
Run Code Online (Sandbox Code Playgroud)
我尝试了很多组合,似乎无法让它发挥作用.这是我得到的这个或"不一致的领先的whitepsace"错误.有什么建议?我正在使用python 2.4(不,没有升级的可能性).
我正在努力创建一个像博格一样的课程.我希望所有实例共享一个特定的属性,但我希望其他属性对于实例是唯一的.这是我到目前为止:
class SharedFacility:
_facility = None
def __init__(self):
entries = {'facility': self._facility}
self.__dict__.update(entries)
def _getfacility(self):
return self._facility
def _setfacility(self, value):
self._facility = value
facility = property(_getfacility, _setfacility)
class Warning(SharedFacility):
def __init__(self, warnlevel, warntext):
SharedFacility.__init__(self)
print "Warning.__init__()"
self.warntext = warntext
self.warnlevel = warnlevel
def __call__(self):
self.facility(self.warnlevel, self.warntext)
def functionOne(a,b):
print 'functionOne: a=%s, b=%s' % (a,b)
def functionTwo(a,b):
print 'functionTwo: a=%s, b=%s' % (a,b)
####################################################
w1 = Warning(1, 'something bad happened')
w1.facility = functionOne
w2 = Warning(5, 'something else bad happened')
import …Run Code Online (Sandbox Code Playgroud) 处理必须按特定顺序调用方法的模块的最pythonic方法是什么?
例如,我有一个XML配置,在执行任何其他操作之前必须先读取,因为配置会影响行为.在parse_config()必须先调用所提供的配置文件.调用其他支持方法之后query_data()才会parse_config()调用.
我首先将其实现为单例,以确保在初始化时传递配置文件名,但注意到模块实际上是单例,它不再是类,而只是常规模块.
parse_config在模块中强制执行首次调用的最佳方法是什么?
编辑:值得注意的是该功能实际上是parse_config(configfile)
我有一组成对出现的文件:
/var/log/messages-20111001
/var/log/messages-20111001.hash
Run Code Online (Sandbox Code Playgroud)
我已经有几个旋转了,现在我留下了大量/var/log/messages-201110xx.hash没有相关日志的文件.我想清理这些混乱,但我不确定如何删除不属于"对"的文件.我可以使用bash或zsh(或任何LSB工具,真的).我需要删除所有没有关联日志的.hash文件.
例
/var/log/messages-20111001.hash
/var/log/messages-20111002.hash
/var/log/messages-20111003.hash
/var/log/messages-20111004.hash
/var/log/messages-20111005
/var/log/messages-20111005.hash
/var/log/messages-20111006
/var/log/messages-20111006.hash
Run Code Online (Sandbox Code Playgroud)
应该减少到:
/var/log/messages-20111005
/var/log/messages-20111005.hash
/var/log/messages-20111006
/var/log/messages-20111006.hash
Run Code Online (Sandbox Code Playgroud) 我有一个日志记录界面,允许用户子类化Logger并覆盖log()虚函数,以便用户可以创建自己的记录器.有一个管理器跟踪所有已注册的日志记录方法(即控制台,系统日志,小组件等)
我创建了一个显示日志的QListWidget Logger.不幸的是,它由日志记录管理器拥有,因为它是一个QObject,它也是MainWindow的一个孩子.这导致两个对象试图在应用程序关闭时删除它.
第一次QObjects->deleteChildren()调用gets并删除它.然后Loggin gmanager再次尝试和CRASH.
如何防止特定QObject在deleteChildren()?期间被销毁?这是个坏主意吗?
我想扩展__str__()我的对象的方法.在str(obj)当前读取:
<mymodule.Test object at 0x2b1f5098f2d0>
Run Code Online (Sandbox Code Playgroud)
我喜欢地址作为唯一标识符,但我想添加一些属性.在保持地址部分的同时扩展它的最佳方法是什么?我想看起来像这样:
<mymodule.Test object at 0x2b1f5098f2d: name=foo, isValid=true>
Run Code Online (Sandbox Code Playgroud)
我没有看到任何存储地址的属性.我正在使用python 2.4.3.
编辑:很高兴知道如何使用__repr __()
解决方案(适用于python 2.4.3):
def __repr__(self):
return "<%s.%s object at %s, name=%s, isValid=%s>" % (self.__module__,
self.__class__.__name__, hex(id(self)), self.name, self.isValid)
Run Code Online (Sandbox Code Playgroud)