如何在python中循环列表以将字符串传递给函数名

如何在python中循环列表以将字符串传递给函数名,python,function,Python,Function,我正试图找到最有效的方法来创建不同的函数名myfunction\u a,。。代码略有不同的b、c(输入文件名'app/data/mydata_a.csv'),下面是我得到的a函数 def myfunction_a(request): os.getcwd() # Should get this Django project root (where manage.py is) fn = os.path.abspath(os.path.join(os.getcwd(),'app/d

我正试图找到最有效的方法来创建不同的函数名myfunction\u a,。。代码略有不同的b、c(输入文件名'app/data/mydata_a.csv'),下面是我得到的a函数

def myfunction_a(request):

    os.getcwd()  # Should get this Django project root (where manage.py is)
    fn = os.path.abspath(os.path.join(os.getcwd(),'app/data/mydata_a.csv'))
    # TODO: Move to helper module
    response_data = {}
    data_format = 'tsv'
    if data_format == 'json':
        with open(fn, 'rb') as tsvin:
            tsvin = csv.reader(tsvin, delimiter='\t')

            for row in tsvin:
                print 'col1 = %s  col2 = %s' % (row[0], row[1])
                response_data[row[0]] = row[1]
        result = HttpResponse(json.dumps(response_data), content_type = 'application/json')
    else:
        with open(fn, 'rb') as tsvin:
            buff = tsvin.read()
        result = HttpResponse(buff, content_type = 'text/tsv')
    return result
我希望能够在列表中循环并创建多个函数名:

mylist = ['a','b','c' ... 'z' ]
def myfunction_a(请求): ... ('app/data/mydata_a.csv') 退货申请

要获得最终结果,请执行以下操作:

  • def myfunction_a=>获取“app/data/mydata_a.csv”
  • def myfunction_b=>获取“app/data/mydata_b.csv”
  • def myfunction_c=>获取“app/data/mydata_c.csv”

现在我只是复制过去并改变它。有没有更好的办法?如有任何建议,将不胜感激。谢谢。

您可以使用

"app/data/mydata_%s.csv" % (character)
所以

每次都应在
%s

因此,由于您希望为每个函数使用另一个字符串来获取另一个文件,因此您可以 这样做:

def myfunction(label, request):
    return "app/data/mydata_%s.csv" % (label) 
因此,您可以在documentpath的末尾获得函数标签。既然你说你
如果只想更改名称,使其与函数标签相等,则只需要另一个参数,而不需要新的函数名称

您可以使用

"app/data/mydata_%s.csv" % (character)
所以

每次都应在
%s

因此,由于您希望为每个函数使用另一个字符串来获取另一个文件,因此您可以 这样做:

def myfunction(label, request):
    return "app/data/mydata_%s.csv" % (label) 
因此,您可以在documentpath的末尾获得函数标签。既然你说你
如果只想更改名称,使其与函数标签相等,则只需要另一个参数,而不需要新的函数名称

如果必须具有特殊的函数名称,则可以执行此操作。虽然我不知道你为什么要这么做

import functools, sys
namespace = sys._getframe(0).f_globals

def myfunction(label, request):
    print request
    return "app/data/mydata_%s.csv" % (label)

my_labels = ['a','b','c']
for label in my_labels:
    namespace['myfunction_%s'%label] = functools.partial(myfunction, label)

print myfunction_a('request1')
print myfunction_b('request2')
输出如下:

request1
app/data/mydata_a.csv
request2
app/data/mydata_b.csv
request3
app/data/mydata_c.csv
或者更好的实施方式可能是:

class MyClass(object):
    def __init__(self, labels):
        for label in labels:
            setattr(self, label, functools.partial(self._myfunction, label))
    def _myfunction(self, label, request):
        print request
        return "app/data/mydata_%s.csv" % (label)

myfunction = MyClass(['a','b','c'])
print myfunction.c('request3')
输出如下:

request1
app/data/mydata_a.csv
request2
app/data/mydata_b.csv
request3
app/data/mydata_c.csv

如果必须有一个特殊的函数名,可以这样做。虽然我不知道你为什么要这么做

import functools, sys
namespace = sys._getframe(0).f_globals

def myfunction(label, request):
    print request
    return "app/data/mydata_%s.csv" % (label)

my_labels = ['a','b','c']
for label in my_labels:
    namespace['myfunction_%s'%label] = functools.partial(myfunction, label)

print myfunction_a('request1')
print myfunction_b('request2')
输出如下:

request1
app/data/mydata_a.csv
request2
app/data/mydata_b.csv
request3
app/data/mydata_c.csv
或者更好的实施方式可能是:

class MyClass(object):
    def __init__(self, labels):
        for label in labels:
            setattr(self, label, functools.partial(self._myfunction, label))
    def _myfunction(self, label, request):
        print request
        return "app/data/mydata_%s.csv" % (label)

myfunction = MyClass(['a','b','c'])
print myfunction.c('request3')
输出如下:

request1
app/data/mydata_a.csv
request2
app/data/mydata_b.csv
request3
app/data/mydata_c.csv

您好@muthan,这是它的一部分,但我也在寻找创建函数名def“myfunction\u a”“myfunction\u b”。。同样,对于函数,您可以将a、b、c放入一个参数中,这样您就有了一个函数调用,比如
def myfunction(character,request)
,函数每次都会执行相同的操作,除了不同的命名之外,这应该是可行的。我将把它添加到我的答案中。Hi@muthan这是它的一部分,但我也在寻找创建函数名def“myfunction\u a”“myfunction\u b”。。同样,对于函数,您可以将a、b、c放入一个参数中,这样您就有了一个函数调用,比如
def myfunction(character,request)
,函数每次都会执行相同的操作,除了不同的命名之外,这应该是可行的。我会在我的回答中加上这个。你为什么要这样做@gnibbler我使用这个函数名作为Django中views.py的一部分,并使用url根据需要提取每个函数,从Django模板调用views app。为什么需要这样做@gnibbler我使用这个函数名作为Django中views.py的一部分,并使用url根据需要提取每个函数,从Django模板调用views应用程序。