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

1

Я хочу передать все аргументы 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
  • 0
    Что произойдет, если вы определите свою функцию перед оператором if?
Теги:
arguments
tuples
argv

3 ответа

4

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

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

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

Вы должны изменить порядок, как уже сказано.
И чтобы отобразить переменную длину 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

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

  • 0
    Да. Сначала нужно определить функцию, прежде чем я смогу ее вызвать .. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню