2011-11-01 19 views
23

To jest naprawdę kilka pytań:nazw, argparse i wykorzystanie

  1. Czy istnieje powód argparse używa nazw zamiast słownika?

  2. Zakładając, że mam klasę z __init__(self, init_method, *args). Parametr init_method informuje init_function w ten sposób, w jaki chcę zainicjować klasę, podczas gdy parametr arg podaje wszystkie potrzebne argumenty dla init. Argumenty mogą być różne dla różnych metod. Czy powinienem używać słownika lub przestrzeni nazw?

  3. Zakładając, że używam przestrzeni nazw, w jaki sposób przekazać przestrzeń nazw do __init__()?

Odpowiedz

19
  1. Projektanci arparse widocznie czuł, że byłoby bardziej wygodny dostęp do argumentów

    args.arg_name 
    

    zamiast

    args["arg_name"] 
    

    To może być kwestia gustu, choć . Chętnie bym poszedł ze słownikiem, szczególnie biorąc pod uwagę fakt, że nie ma klasy Namespace w standardowej bibliotece, z wyjątkiem tej w argparse.

  2. Użyj słownika.

  3. Jeśli naprawdę chcesz przestrzeni nazw tutaj, możesz użyć init_function(**args.__dict__) ... ale nie polecam go.

67

Łatwo przekonwertować przestrzeni nazw do słownika za pomocą vars():

>>> vars(args) 
+1

używam tego, więc mogę mieć moduł, który jest albo narzędzie stand-alone lub funkcja . Uzyskując args z argparse, mogę wywołać: my_func (** vars (parser.args)), pod warunkiem, że moje nazwy parametrów pasują do nazw, które zdefiniowałem w argparse –