簡體   English   中英

以另一個函數作為參數

[英]function with another function as parameter

我創建了幾個功能

#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)

使用python可選參數

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

聲明函數時,可以將默認值傳遞給參數,因此,如果在默認調用時未將其傳遞給函數,它將使用這些參數,例如以下示例:

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

間隔默認為10,折疊為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

參數名稱的默認值可能會幫助您

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

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

您的模板方法必須始終具有相同的原型, generateTemplateFun(name="")但是在調用它們時,您可以跳過名稱部分,從而使代碼更簡潔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM