的好,而不是使用Python的模板字符串(這是強大的,但有限的),我建議你使用Jinja2模板。
此模板引擎以開發Web應用程序而聞名。
要實現您的自定義語言,您可以使用過濾器。下面是一個例子:
首先導入所需的模塊:
import random
from jinja2.environment import Environment
定義一個過濾器,以計算一個隨機數,這樣的:
def random_int(value, x, y):
return "{0}".format(random.randint(x, y))
注:值參數是這裏不使用。
定義神社的環境,並添加自定義過濾器:
env = Environment()
env.filters["RANDOM_INT"] = random_int
然後,您可以使用它像這樣(你需要稍微改變用戶輸入符合神社模板語法):
user_input = 'file write hi.txt {{ "" | RANDOM_INT(1, 10) }}'
template = env.from_string(user_input)
result = template.render()
其結果是:
print(result)
# file write hi.txt 9
Avantages:金賈可以CHEC k您的語法和缺失格式。
編輯:更多的例子
可以改變環境配置爲使用 單花括號代替雙:
env = Environment(variable_start_string="{", variable_end_string="}")
而不是創建一個自定義過濾器,你可以使用內置的功能和過濾器。 例如:使用range()
功能與random
過濾器:
user_input = 'file write hi.txt { range(10) | random }'
template = env.from_string(user_input)
result = template.render()
print(result)
最後,你可以用自己的功能擴展了全球範圍內
env = Environment(variable_start_string="{", variable_end_string="}")
env.globals["RANDOM_INT"] = random.randint
user_input = 'file write hi.txt { RANDOM_INT(1, 10) }'
template = env.from_string(user_input)
result = template.render()
print(result)
請可以在downvoter解釋爲什麼他/她給我的帖子downvote?我將不勝感激他們的幫助,以改善我的帖子:) –