如何在python中获取宏功能?

时间:2017-10-31 14:24:22

标签: python macros

我是python的新手,我需要创建一个列表并用数据填充它。 等。

list = [  {  1: "first",2:"second"} , { i:"first",ii:"second" } ]

考虑创建用于优化的宏。 等。

#define english { 1: "first",2:"second"}
#define roman { i:"first",ii:"second" }
list = [ english, roman ] 

无论如何都要在这里创建类似宏的功能吗?

函数没有解决问题,因为它会调用函数但我需要代码替换。

3 个答案:

答案 0 :(得分:0)

足够简单:

english = { 1: "first",2:"second"}
roman = {"i": "first","ii":" second"}
# NB : don't use "list" as variable name, 
# it would shadow the builtin `list` type
langs = [english, roman]

答案 1 :(得分:0)

在您的情况下,您应该只创建2个单独的词典并将它们放在列表中

english = {1: "first",2: "second"}
roman = {"i": "first","ii": "second"}
li = [english, roman]

我使用li因为list是python中的保留字 罗马数字周围的引号是因为我和ii都没有定义变量,所以最好使用字符串

答案 2 :(得分:0)

以python模块cogapp模块的形式存在一个非常好的解决方案。

下面是一个示例macro_test.py

#define english { 1: "first",2:"second"}
#define roman { i:"first",ii:"second" }
#[[[cog
#   import cog
#   english = { 1   : "first",  2   : "second" }
#   roman   = { "i" : "first", "ii" : "second" }
#   cog.outl("mylist = [ {0!r}, {1!r} ]".format(english, roman))
#   
#   ## something actually usefull:
#   import os
#   git_command         = "git log --pretty=format:'%H' -n 1"
#   release_git_version = os.popen(git_command).read()
#   ## Note how release_git_version string contains quote char at start and at the end
#   cog.outl("release_git_version = {}".format(release_git_version))
#]]]
#[[[end]]]

print("mylist = {}".format(mylist))
print("release_git_version = {}".format(release_git_version))

然后您像这样运行预处理器:

python -m cogapp -r macro_test.py

由于-r选项macro_test.py,源被重写为:

#define english { 1: "first",2:"second"}
#define roman { i:"first",ii:"second" }
#[[[cog
#   import cog
#   english = { 1   : "first",  2   : "second" }
#   roman   = { "i" : "first", "ii" : "second" }
#   cog.outl("mylist = [ {0!r}, {1!r} ]".format(english, roman))
#   
#   ## something actually usefull:
#   import os
#   git_command         = "git log --pretty=format:'%H' -n 1"
#   release_git_version = os.popen(git_command).read()
#   ## Note how release_git_version string contains quote char at start and at the end
#   cog.outl("release_git_version = {}".format(release_git_version))
#]]]
mylist = [ {1: 'first', 2: 'second'}, {'i': 'first', 'ii': 'second'} ]
release_git_version = '340b5c2f85c7070f236161d14db07a74ab9abdcb'
#[[[end]]]

print("mylist = {}".format(mylist))
print("release_git_version = {}".format(release_git_version))

对于代码生成非常有用。现在,当您运行macro_test.py脚本时,将显示正确的输出:

>python macro_test.py
mylist = [{1: 'first', 2: 'second'}, {'i': 'first', 'ii': 'second'}]
release_git_version = 340b5c2f85c7070f236161d14db07a74ab9abdcb

我添加了release_git_version代码位以显示有用性,因为其他答案试图将这个问题视作废话。

请注意,生成这样的代码不是优化性能的正确方法。 Python解释器仍然需要解析生成的代码。如果您使用的是CPython,那么通常可以通过在C / C ++中重新实现瓶颈代码来实现优化。

cogapp也可以与其他语言(XML或JSON)的代码配合使用。更多详细信息,请参见here