0

我准备了以下文件 ( 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. 显然,我不想手动定义它。

4

2 回答 2

1

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

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

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

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

于 2013-10-17T10:08:38.690 回答
0

它应该工作:

ALL_UNICODE = ' '.join([item for item in dir(unicode_strings) if not item.startswith("__")])
于 2013-10-17T10:19:06.993 回答