连接模块中的所有字符串

时间:2013-10-17 10:06:55

标签: python

我准备了以下文件(unicode_strings.py),其中包含一些我想用于测试的unicode字符串:

# -*- coding: utf-8 -*-

# Refer to http://ergoemacs.org/emacs/unicode.txt

GREEK    = u'ΑΒΓΔ ΕΖΗΘ ΙΚΛΜ ΝΞΟΠ ΡΣΤΥ ΦΧΨΩ αβγδ εζηθ ικλμ νξοπ ρςτυ φχψω'
ACCENTS  = u'àáâãäåæç èéêë ìíîï ðñòóôõö øùúûüýþÿ ÀÁÂÃÄÅ Ç ÈÉÊË ÌÍÎÏ ÐÑ ÒÓÔÕÖ ØÙÚÛÜÝÞß'
CURRENCY = u'¤ $ ¢ € ₠ £ ¥'
...

所以在我的测试文件中我可以这样做:

from unicode_strings import GREEK

def test1():
    print GREEK

现在我要实现test_all

def test_all():
    print ALL_UNICODE

如何定义ALL_UNICODE,使其成为unicode_strings.py中定义的所有字符串(所有变量)的串联。我显然不想手动定义它。

2 个答案:

答案 0 :(得分:1)

如果所有变量都是大写名称,并且您没有从其他地方导入任何其他此类字符串,则可以使用:

_uppercase = [k for k in dir() if k.isupper()]
ALL_UNICODE = ' '.join(map(globals().get, _uppercase))

这将连接当前模块全局命名空间中绑定到大写名称的所有unicode字符串。

我在这里切换到使用dir(),因为它比循环list(globals())更简洁;因为在循环期间将列表推导变量注入全局命名空间,在迭代期间更改globals()字典的大小,所以不能使用globals()本身的列表推导循环。 / p>

答案 1 :(得分:0)

应该有效:

ALL_UNICODE = ' '.join([item for item in dir(unicode_strings) if not item.startswith("__")])