好的簡單的問題,請不要殺了我。獲取列表的長度作爲字符串
要登錄列表我做的長度:
logger.info("the length of my list is: " + str(len(mylist)));
有沒有更好的辦法做到這一點在Python?
好的簡單的問題,請不要殺了我。獲取列表的長度作爲字符串
要登錄列表我做的長度:
logger.info("the length of my list is: " + str(len(mylist)));
有沒有更好的辦法做到這一點在Python?
你也可以這樣做:
logger.info('the length of my list is %d' % len(mylist))
謝謝,但爲什麼更好?你已經擺脫了這個str,但是你已經引入了一個varibale%d,所以它更容易清潔嗎? – dublintech 2012-02-03 23:39:28
我喜歡這種格式,因爲它更容易將其他信息添加到字符串並保持可讀性。我也花大部分時間在C. – RussS 2012-02-03 23:40:31
我想你使用%d來表示數字而不是%d?是啊。 – dublintech 2012-02-03 23:47:05
我會做這樣的事情:
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。
謝謝,但爲什麼更好? – dublintech 2012-02-03 23:38:38
你也可以這樣做:
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()
可能會更好。
如果您要反覆添加特定類型的信息,則可以提供自定義格式並使用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
定義 「好」。你現在這樣做的方式有什麼問題? – 2012-02-03 23:33:39
我想他的意思是'更pythonic' – Hubro 2012-02-03 23:38:02
更好 - 更易於閱讀和更好的實踐。是更pythonic。 – dublintech 2012-02-03 23:40:54