2012-11-29 31 views
1

我使用的網站後端有一個選項,允許我在訂購產品時自定義CSV文件中發送的數據。有兩列,左列是您分配標題的位置,右列是您輸入變量的位置。現有變量的語法類似於%(order.random_variable)s%(item.random_variable)s這看起來與Python中的字符串佔位符%s類似,我相當相信它與相關(如果不相同),但我不太瞭解語法。有人能詳細說明這個代碼的目的嗎?這段代碼是什麼:%(var)s? Python可能嗎?

哦,並且爲了記錄,我不打算立即進入並更改變量。只是爲我的研究尋找一個很好的起點。

回答

5

這與%s類似。括號內的部分是可選的。

唯一的區別在於,對於所述第一個,您的值必須是 元組與由格式字符串, 和用於第二一個指定的項目的確切數目,它必須是一個單個映射對象(例如, 字典)

它在String formatting documentation清楚地列出: -

A轉換說明符中包含兩個或多個字符,並且具有 以下組件必須按以下順序發生:

  1. '%'字符,它標記說明符的開始。
  2. 映射鍵(可選),由括號括起來的字符序列組成(對於 示例,(somename))。
    ..並有一些更

另外: -

當右邊的參數是一個字典(或其他映射類型),然後 字符串中的格式都必須包括一個括起來的映射關鍵字 插入到緊跟在'%'字符後面插入的字典中。所述 映射鍵選擇值從映射

從文檔的一個例子的格式: -

>>> print '%(language)s has %(number)03d quote types.' % \ 
...  {"language": "Python", "number": 2} 
Python has 002 quote types. 

所以,%後和s()內的文本是在一個key字典。

+0

太棒了,感謝您的澄清! –

3

是的,這與%s很相似。 ()中的部分引用了python字典的一個鍵。例如:

mydict = {'yay':'boo'} 
print '%(yay)s'%mydict 

# boo 
+0

有道理,謝謝!所以在我上面的例子中,我只使用我無權訪問的字典將代碼輸入到文本框中。該網站提供的示例不包含代碼中的「%mydict」部分。有必要嗎? –

+0

@DrydenLong,'mydict'部分將由評估您配置的字符串的代碼提供。如果你沒有給出有關可用值的文檔,那麼你將不得不猜測。 –

+0

@MarkRansom,謝謝!有幾個「網站範圍」的變量正在使用,所以我認爲我可以弄清楚以滿足我的需求。 –