[英]how to loop list to pass string to function name in python
我試圖找到最有效的方法來創建具有稍微不同的代碼(輸入文件名'app / data / mydata_a.csv' )的不同函數名稱myfunction_a ,.. b,c,所以下面是我得到的一個函數
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(request):...('app / data / mydata_a.csv')返回請求
得到最終結果:
現在,我只是復制和更改它。 有更好的辦法嗎? 任何建議,將不勝感激。 謝謝。
您可以使用以下命令向字符串添加變量
"app/data/mydata_%s.csv" % (character)
所以
for character in mylist:
print "app/data/mydata_%s.csv" % (character)
每次都應在%s
處附加另一個字符
因此,由於您要為每個函數使用另一個字符串來獲取另一個文件,因此可以執行以下操作:
def myfunction(label, request):
return "app/data/mydata_%s.csv" % (label)
因此您可以在文檔路徑的末尾獲得功能標簽。 由於您描述了您只想更改名稱以使其等於功能標簽,因此您只需要另一個參數,而不需要新的功能名稱
如果必須具有特殊的函數名稱,則可以執行此操作。 雖然我不確定為什么需要。
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
也許更好的實現是:
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')
輸出是這樣的:
request3
app/data/mydata_c.csv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.