函数和另一个函数作为参数

2024-10-02 12:24:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了几个函数

#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

因此,我想创建一些通用函数,它将函数作为参数,文件名作为参数,并为函数指定参数。然后像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)?你知道吗


Tags: 函数namecloseread参数returndefcode
3条回答

可以对参数使用默认值:

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

也许参数名的默认值会对您有所帮助

def test(a, b = ""):
    print (a, b)

test ("hello")
test ("hello", "world")

模板methids必须始终具有相同的原型,generateTemplateFun(name=""),但是在调用它们时,可以跳过名称部分,从而使代码更干净

使用python可选参数

http://www.diveintopython.net/power_of_introspection/optional_arguments.html

声明函数时,可以将默认值传递给参数,因此如果在默认情况下调用函数时不将其传递给函数,则函数将使用这些参数,如以下示例所示:

def info(object, spacing=10, collapse=1):

间距默认为10,折叠为1

相关问题 更多 >

    热门问题