2012-02-03 76 views
0

好的簡單的問題,請不要殺了我。獲取列表的長度作爲字符串

要登錄列表我做的長度:

logger.info("the length of my list is: " + str(len(mylist))); 

有沒有更好的辦法做到這一點在Python?

+2

定義 「好」。你現在這樣做的方式有什麼問題? – 2012-02-03 23:33:39

+2

我想他的意思是'更pythonic' – Hubro 2012-02-03 23:38:02

+1

更好 - 更易於閱讀和更好的實踐。是更pythonic。 – dublintech 2012-02-03 23:40:54

回答

4

你也可以這樣做:

logger.info('the length of my list is %d' % len(mylist)) 
+0

謝謝,但爲什麼更好?你已經擺脫了這個str,但是你已經引入了一個varibale%d,所以它更容易清潔嗎? – dublintech 2012-02-03 23:39:28

+0

我喜歡這種格式,因爲它更容易將其他信息添加到字符串並保持可讀性。我也花大部分時間在C. – RussS 2012-02-03 23:40:31

+0

我想你使用%d來表示數字而不是%d?是啊。 – dublintech 2012-02-03 23:47:05

8

我會做這樣的事情:

logger.info('the length of my list is: {0}'.format(len(mylist))) 

編輯:有關爲何format應該是比%更好的更多信息,請看看PEP 3101

的「 %'運算符主要受限於它是一個 二元運算符,因此最多可以接受兩個參數。 其中一個參數已經專用於格式字符串, 將所有其他變量壓縮到剩餘的 參數中。目前的做法是使用詞典或 元組作爲第二個參數,但很多人已經評論 [3],這缺乏靈活性。 「全部或全部」方法 (意味着只能在位置參數之間進行選擇, 或僅命名參數)被認爲是過度約束。

另請注意,您甚至可以將自己的自定義格式添加到對象中。因此,您不是限制一組已定義的轉換字符,但可以根據需要定義自己的迷你語言來格式化對象。這是非常強大的功能,通過%不可用。

documentation解釋:

格式(值[,format_spec])

的值轉換爲「格式化」表示,由作爲format_spec控制。 format_spec的解釋將取決於value參數的類型,但是存在大多數內置類型使用的標準格式化語法:Format Specification Mini-Language。

+0

謝謝,但爲什麼更好? – dublintech 2012-02-03 23:38:38

1

你也可以這樣做:

logger.info('the length of my list is: %s', len(mylist)) 

將執行只有當記錄器是爲INFO級別啓用替代。因此,這使得它比在記錄器未啓用時記錄之前在消息中進行替換要快一些。

你也可以傳遞更多的參數或dict代替:

>>> logging.info('%s %s %s', 1,2,3) 
INFO:root:1 2 3 
>>> logging.info('%(foo)s %(bar)s', {'foo': 'FOO', 'bar': 'BAR'}) 
INFO:root:FOO BAR 

logging使用字符串格式化操作。出於其他目的,format()可能會更好。

0

如果您要反覆添加特定類型的信息,則可以提供自定義格式並使用extra關鍵字。

例如:

FORMAT = "'%(message)s' is long: %(length)d" 
logging.basicConfig(format=FORMAT) 
logger = logging.getLogger() 
d = {'length': 30} 
logger.info('my message', extra=d) 

會給你這樣的:

'my message' is long: 30