2012-03-04 31 views
-2

python中的上下文是什麼,特別是**context是什麼意思?這是一種在當前上下文中傳遞變量的方法嗎?代碼示例將非常感謝。Mako中的「背景」是什麼?

from mako.template import Template 
template = Template('var1 = ${var1}') 
for v in range(1, 5): 
    context = {'var1': v} 
    print template.render(**context) 
+4

「context」這個詞在Python中有多種用法(例如'decimal' context和context manager)。您需要提供更多,更好的問題背景。 – interjay 2012-03-04 15:24:19

+1

在任何情況下,所有這些都與'**'操作符沒有任何關係,這只是將字典作爲關鍵字提供給函數的語法。 – 2012-03-04 15:28:38

+0

好確定感謝,這個怎麼樣 – 2012-03-04 15:35:28

回答

0

你的情況,任何你傳遞給render作爲kwarg是爲了呈現爲Context傳遞到您的模板。

上下文表示渲染時可用於頁面/模板的數據字典。所以,當你做這樣的事情

context = {'var1': v} 

和你的模板有一個像

$(var1) 

代碼這將打印v

Mako的解決了這個由放眼Context,這僅僅是包裝一個_data與kwargs通過render傳遞給它。

+0

應該指出的是,這不是特定於模板的。這是一個使用了很多的Python特性,在這種特殊情況下,明確提供關鍵字而不是爲它構造一個單獨的字典會更合理。 – 2012-03-04 15:39:08

+0

正確的kwargs /'**'不是模板,但是'context'是。 – Nix 2012-03-04 15:40:09

0

**運算符在出現在函數調用中時將字典轉換爲函數的一組關鍵字參數。當它出現在一個函數定義中時,它將一組關鍵字參數轉換成一個函數到一個字典中。例如:

>>> d = {'a':0, 'b':1, 'c':2} 
>>> def print_my_arguments(**my_arguments): 
...  print my_arguments 
... 
>>> print_my_arguments(a=0, b=1, c=2) 
{'a': 0, 'c': 2, 'b': 1} 
>>> print_my_arguments(**d) 
{'a': 0, 'c': 2, 'b': 1} 
+0

@ user1247384,這有幫助嗎?還是尼克斯的答案?很高興知道這個問題是否得到解答。 – senderle 2012-03-05 12:39:11

相關問題