2017-08-03 1 views
1

Ist es in Python möglich, ein Zeichenfolgenargument auf ein definiertes Objekt im Skript zu legen?Python, Verwenden Sie ein Zeichenfolgenargument, um auf ein definiertes Listen-/Arrayobjekt zu zeigen

Zum Beispiel Nehmen wir unser Argument ist -Schichten und ich habe eine Liste convloop definiert im Skript als

convloop = ['conv2/3x3', 'conv2/3x3_reduce', 'conv2/3x3'] 

und ich pass ‚Python example.py -Schichten convloop‘ genannt

ich brauche es, dass arg Zeichenfolge zu nehmen (convloop) und verweisen auf die tatsächlichen convloop Liste (Array) nicht nur die Zeichenfolge ‚convloop

Ich weiß, ich

if args.layers == 'convloop': 
    #loop over layers as set in convloop array 
    endparam = convloop[frame_i % len(convloop)] 

tun können, und das wird die Liste (Array) ‚convloop‘ nennen, wenn die argstring ist ‚convloop‘ und durch die Liste

Jedoch habe ich mehrere Listen haben in meinem Skript, und stattdessen für jede Liste diesem Code jedes Mal von rewritting ich den argstring und verweisen auf die passende Liste Objekt lesen möchten, so dass ich zum Beispiel passieren kann:

python example.py -layers pooploop‘ und ‚python example.py‘ -Schichten fartloop und habe th em Punkt auf die pooploop und fartloop Listen entsprechend

Ich verwende Python 2.7 btw

+2

Warum nicht einfach ein Wörterbuch von Arrays verwenden? Dann können Sie 'my_loop = loop_for [args.layers]' tun. – melpomene

+2

Halten Sie Ihre Daten aus Ihren Variablennamen heraus. Wenn Sie so etwas machen möchten, sollten Sie Ihre Listen in ein Diktat einfügen, indem Sie den gewünschten Listennamen als Schlüssel verwenden. –

Antwort

2

Sie nutzen könnten globals() oder locals() das entsprechende Objekt zu erhalten:

>>> oneloop = [1,2,3] 
>>> globals()["oneloop"] 
[1, 2, 3] 

Sie wahrscheinlich sollte nicht, wenn: es könnte gefährlich sein. Es ist auch ein Hinweis darauf, dass Sie die Architektur Ihres Skripts überdenken sollten.

wäre ein dict eine bessere Idee:

>>> possible_loops = {"oneloop": [1,2,3], "twoloop": [4,5,6]} 
>>> possible_loops 
{'oneloop': [1, 2, 3], 'twoloop': [4, 5, 6]} 
>>> possible_loops['oneloop'] 
[1, 2, 3] 
+0

Oder ['locals()'] (https://docs.python.org/2/library/functions.html#locals), wenn Sie auf lokale Variablen einer Funktion zugreifen wollen. – jdehesa

+0

Vielen Dank! Ein Wörterbuch war der Weg für mein Skript! – Queef

Verwandte Themen