我已经创建了几个函数
#generate .h file template for class
def generateHeaderClassTemplate(name):
template = open('header.template', 'r')
code = parseHeaderTemplate(template.read(), name)
template.close()
return code
#generate .cpp file template for class
def generateImplClassTemplate(name):
template = open('class.template', 'r')
code = parseImplTemplate(template.read(), name)
template.close()
return code
#generate main.cpp file template
def generateMainTemplate():
template = open('main.template', 'r')
code = parseMainTemplate(template.read())
template.close()
return code
但问题是它们基本相同
1. open file
2. write there some function result
3. close file
4. return data
所以我想创建一些通用函数,它将函数作为参数,filename作为参数和函数的参数。然后像generateHeaderClassTemplate
这样的函数就像
def generateHeaderClassTemplate(name):
return generateTemplate(parseHeaderTemplate, 'header.template', name)
基本上我想要这样的功能
def generateTemplate(func, templateFile, name):
template = open(templateFile, 'r')
code = func(template.read(), name) #or code = func(template.read()) if name was not passed
template.close()
return code
但是如何让它像我写的评论一样工作 - 如果我没有通过name
- 执行func(template.read())
,如果我通过它,请执行func(template.read(), name)
?
答案 0 :(得分:1)
使用python可选参数
http://www.diveintopython.net/power_of_introspection/optional_arguments.html
当您声明该函数时,您可以将默认值传递给参数,因此如果您在默认情况下调用它时不将它们传递给函数,它将使用这些参数,如下例所示:
def info(object, spacing=10, collapse=1):
间距默认为10并折叠为1
答案 1 :(得分:1)
您可以使用参数的默认值:
def generateTemplate(func, templateFile, name=None):
这样你可以使用generateTemplate
有或没有第三个参数:
generateTemplate(parseImplTemplate, 'f')
generateTemplate(parseMainTemplate, 'f', 'foo)
在generateTemplate
定义中,您可以执行以下操作:
def generateTemplate(func, templateFile, name=None):
template = open(templateFile, 'r')
if name:
code = func(template.read(), name)
else:
code = func(template.read())
template.close()
return code
答案 2 :(得分:1)
参数名称的默认值可能会对您有所帮助
def test(a, b = ""):
print (a, b)
test ("hello")
test ("hello", "world")
您的模板方法必须始终具有相同的原型generateTemplateFun(name="")
,但在调用它们时,您可以跳过使代码更清晰的名称部分