小编sha*_*and的帖子

方法中的单个字符串或字符串列表

我已经碰到过好几次了.我正在处理许多可以接受字符串列表的方法.有几次我意外地传递了一个字符串,它被分解成一个列表并且每个字符被使用,这不是所希望的行为.

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

10
推荐指数
3
解决办法
4716
查看次数

Python的预告倒退了

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)

python foreach python-2.4

8
推荐指数
2
解决办法
6422
查看次数

让Doxygen和MSVC TODO标签协同工作

在doxygen中,标准的"///\todo stuff"用于标记待办事项.我在MSVC中完成了大部分编码,因此能够在任务列表中看到TODO是很方便的.MSVC使用"// TODO stuff"作为标签.有没有办法让它们一起工作?我找到了任务列表的属性窗格,并尝试将"\ todo"添加到列表中,但它不喜欢"\"字符.我可以让这两个一起工作吗?

编辑:我特别感兴趣的是在Visual Studio 10中找到如何执行此操作.

doxygen visual-studio-2010 visual-studio visual-c++ todo

7
推荐指数
1
解决办法
2352
查看次数

包含字符串文字的Doctests

我有一个单元测试,我想为一个将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(不,没有升级的可能性).

python doctest comments python-2.4

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

创建一个类似borg的类

我正在努力创建一个像博格一样的课程.我希望所有实例共享一个特定的属性,但我希望其他属性对于实例是唯一的.这是我到目前为止:

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)

python design-patterns

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

在python模块中强制执行方法顺序

处理必须按特定顺序调用方法的模块的最pythonic方法是什么?

例如,我有一个XML配置,在执行任何其他操作之前必须先读取,因为配置会影响行为.在parse_config()必须先调用所提供的配置文件.调用其他支持方法之后query_data()才会parse_config()调用.

我首先将其实现为单例,以确保在初始化时传递配置文件名,但注意到模块实际上是单例,它不再是类,而只是常规模块.

parse_config在模块中强制执行首次调用的最佳方法是什么?

编辑:值得注意的是该功能实际上是parse_config(configfile)

python oop singleton

2
推荐指数
1
解决办法
908
查看次数

Shell脚本删除不在一对中的文件的最佳方法

我有一组成对出现的文件:

/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)

linux bash shell zsh

2
推荐指数
1
解决办法
234
查看次数

如何防止在Qt中的deleteChildren()期间删除子项?

我有一个日志记录界面,允许用户子类化Logger并覆盖log()虚函数,以便用户可以创建自己的记录器.有一个管理器跟踪所有已注册的日志记录方法(即控制台,系统日志,小组件等)

我创建了一个显示日志的QListWidget Logger.不幸的是,它由日志记录管理器拥有,因为它是一个QObject,它也是MainWindow的一个孩子.这导致两个对象试图在应用程序关闭时删除它.

第一次QObjects->deleteChildren()调用gets并删除它.然后Loggin gmanager再次尝试和CRASH.

如何防止特定QObject在deleteChildren()?期间被销毁?这是个坏主意吗?

qt qobject virtual-destructor

2
推荐指数
1
解决办法
1565
查看次数

扩展__str __()而不是替换它

我想扩展__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)

python python-2.4

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