2013-10-17 47 views
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中定义的所有字符串(所有变量)的并置。我不想明确地手动定义它。

回答

1

如果所有的变量都是大写的名字,而你没有进口来自其他地方的任何其他这样的字符串,你可以使用:

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

这将串连势必大写名称的所有Unicode字符串在当前模块中全局命名空间。

我转而使用dir()这里,因为这比在list(globals())上循环少一些;由于列表理解变量在循环期间被注入全局命名空间,因此在迭代过程中更改globals()字典的大小时,您无法循环使用globals()本身的列表理解。

+0

不幸的是不能保证:我用大写名称为常量各地我的代码(希望被接受的做法)。我们知道的是,我想连接来自该文件的所有*变量 – dangonfast

+0

@gonvaled:这只能连接该文件中的变量*。 'globals()'只适用于一个模块。 –

+0

啊哈!我以前误解了你。这可能是!让我尝试。 – dangonfast

0

它应该工作:

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

正如马丁所建议的,我更喜欢模块本身。 – dangonfast