Sto cercando di eliminare un sacco di codice ripetitivo nel mio Python e questa funzione si ripete in varie forme. Non c'è un modo più semplice per passare una variabile (usando una lista o qualcosa di simile) alla funzione "Create_me" e poi portarla a:
- Crea la variabile globale "var1".
- Prendi la variabile globale e usala al posto di "var1"
Ho provato a scrivere del codice e semplicemente non fa riferimento alle variabili corrette. Sto cercando di fare qualcosa che non può essere fatto? Si prega di vedere le 2 sezioni del codice qui sotto, la prima mostra la funzione che funziona con variabili statiche e la seconda mostra il codice che sto cercando di ottenere.
Ho anche fatto uno screenshot di ciò che è nella memoria in modo da vedere cosa sto affrontando.
Grazie in anticipo!
def CLASS_POLICY_DEF_C350():
global var1
var1 = defaultdict(list)
worksheet = workbook.sheet_by_name('maps-C350')
headers = worksheet.row(0)
for index in range(worksheet.nrows)[1:]:
try:
for header, col in zip(headers, worksheet.row(index)):
if col.value != "":
var1[header.value].append(col.value)
except:
print sys.exc_info()
def main():
CLASS_POLICY_DEF_C350()
Il codice che ho scritto è:
#!/usr/bin/python
from collections import defaultdict
import sys,xlrd
def Create_me(test_var):
workbook = xlrd.open_workbook("""templates.xls""")
for dynamic_list in test_var:
globals()[dynamic_list] = 0
dynamic_list = defaultdict(list)
worksheet = workbook.sheet_by_name('maps-C350')
headers = worksheet.row(0)
for index in range(worksheet.nrows)[1:]:
try:
for header, col in zip(headers, worksheet.row(index)):
if col.value != "":
dynamic_list[header.value].append(col.value)
except:
print sys.exc_info()
print 'var1 = ',var1
print 'dynamic_list =',dynamic_list
print '\nlocal var = ',locals()
print '\nglobal var = ',globals()
def main():
test_var = ('var1','var2','var3')
Create_me(test_var)
if __name__ == "__main__":
main()
Frankus $ ./test-var.py
local var = {'index': 1, 'header': text: u'class-map B2 ',' worksheet ':,' dynamic_list ': defaultdict (, {u'class-map A1': [u 'match A2'], u'class-map B2 ': [u' match B2 ']}),' header ': [testo: u'class-map A1', testo: u'class-map B2 '], 'test_var': ('var1', 'var2', 'var3'), 'cartella di lavoro':, 'col': text: u 'match B2'}
global var = {'defaultdict':, 'var1': 0, 'var3': 0, 'var2': 0, ' builtins ':, ' file ':' ./test-var.py ',' pacchetto ': Nessuno,' sys ':,' Create_me ':,' name ':' main ',' xlrd ':,' main ':,' doc ': None}
Frankus $