我准备了以下文件(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
中定义的所有字符串(所有变量)的串联。我显然不想手动定义它。
答案 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("__")])