2013-10-17 49 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