2017-08-03 1 views
1

Est-il possible en python d'avoir un argument chaîne pointant vers un objet défini dans le script?Python, Utilise un argument chaîne pour pointer vers un objet liste/tableau défini

Par exemple, disons que notre argumentation est -layers et j'ai une liste appelée convloop défini dans le script comme

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

et je passe '-layers example.py python convloop'

J'ai besoin pour prendre cette chaîne arg (de convloop) et le point à la liste des convloop réelle (tableau) non seulement la chaîne « convloop »

Je sais que je peux faire

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

Et qui appellera la liste (tableau) « convloop » si le argstring est « convloop » et faire défiler la liste

Cependant, j'ai plusieurs listes dans mon script, et au lieu de Réécrire ce code à chaque fois pour chaque liste que je veux lire le argstring et le point à l'objet de la liste correspondant afin que je puisse passer par exemple:

« python example.py -layers pooploop » et « python example.py » -layers fartloop 'et avoir em pointent vers les pooploop et les listes fartloop en conséquence

J'utilise Python 2.7 BTW

+2

Pourquoi ne pas simplement utiliser un dictionnaire de tableaux? Ensuite, vous pouvez faire 'my_loop = loop_for [args.layers]'. – melpomene

+2

Gardez vos données hors de vos noms de variables. Si vous voulez faire des choses comme ça, vous devriez mettre vos listes dans un dict, en utilisant le nom de la liste désirée comme clé. –

Répondre

2

Vous pouvez utiliser globals() ou locals() pour obtenir l'objet correspondant:

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

Vous avez probablement ne devrait pas, cependant: ça pourrait être dangereux. C'est aussi une indication que vous devriez repenser l'architecture de votre script.

Un dict serait une meilleure idée:

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

Ou ['locals()'] (https://docs.python.org/2/library/functions.html#locals) si vous voulez accéder aux variables locales d'une fonction. – jdehesa

+0

Merci beaucoup! Un dictionnaire était la voie à suivre pour mon script! – Queef