Python: назначить несколько значений одновременно: передать все аргументы argv в функцию - PullRequest
1 голос
/ 26 августа 2011

Я хочу передать все аргументы argv в функцию. Я создал этот код, но он дает мне ошибку. Как знает, как это сделать? Большое спасибо за вашу помощь.

if __name__ == "__main__":
    import sys
    createP(sys.argv[1:])

def createP( a, b, c):
    print a + b + c

Я запускаю это приложение с помощью командной строки:

python filename.py d e f

Возвращается:

NameError: name 'createP' is not defined

Ответы [ 3 ]

4 голосов
/ 26 августа 2011

Вы звоните createP, прежде чем определить это.Вы также передаете неверное количество аргументов;вам нужно расширить массив:

def createP( a, b, c):
    print a + b + c

if __name__ == "__main__":
    import sys
    createP(*sys.argv[1:])
1 голос
/ 26 августа 2011

Вы должны изменить порядок, как уже сказано.
И чтобы отобразить переменные длины argv , вы должны написать:

def createP(*x):
    print '\n'.join(x)
    # or ' '.join(x) if you prefer

if __name__ == "__main__":
    import sys
    createP(*sys.argv[1:])

Я предполагаю, что все элементы sys.argv являются строками. Я прав?

Обновление

Ну, мой ответ немного глупый; почему следующий код (без * для передачи аргументов и определения параметров) не будет удобен? :

def createP(x):
    print '\n'.join(x)
    # or ' '.join(x) if you prefer

if __name__ == "__main__":
    import sys
    createP(sys.argv[1:])
1 голос
/ 26 августа 2011

Попробуйте переключить порядок между определением и if.

...