Дополнительный вывод отсутствует при печати аргумента командной строки

Это мой день 1 обучения python. поэтому для многих из вас это вопрос noob. См. Следующий код:

#!/usr/bin/env python

import sys

def hello(name):
    name = name + '!!!!'
    print 'hello', name

def main():
    print hello(sys.argv[1])


if __name__ == '__main__':
    main()

когда я запускаю его

$ ./Python-1.py alice
hello alice!!!!
None

Теперь мне трудно понять, откуда взялся этот "None"?

Ответ 1

Подсчитайте количество операторов print в вашем коде. Вы увидите, что вы печатаете "hello alice!!!" в функции hello и печатаете результат функции hello. Поскольку функция hello не возвращает значение (которое вы делаете с оператором return), оно возвращает объект None. Ваш print внутри функции main завершает печать None.

Ответ 2

Измените

def main():
    print hello(sys.argv[1])

to

def main():
    hello(sys.argv[1])

Вы явно печатаете возвращаемое значение из вашего метода hello. Поскольку у вас нет указанного значения возвращаемого значения, он возвращает None, что вы видите на выходе.