Мне кажется, вы неправильно поняли, что *args
делает в объявлении функции.
Когда вы пишете def ExecuteCode(*args):
, вы остаетесь, что хотите разрешить вызов ExecuteCode
с переменным числом аргументов. Например, другой код может вызвать ExecuteCode("foo", "bar", "baz")
(три аргумента) или ExecuteCode()
(ноль аргументов). Переменная args
в функции будет списком значений этих аргументов (поэтому ["foo", "bar", "baz"]
или []
для моих двух примеров вызовов).
В вашем коде вы вызываете функцию с одним аргументом ExecuteCode(command)
. Если command
является списком ['hi']
, то внутри ExecuteCode
, args
будет [['hi']]
, поскольку он всегда помещает аргументы в список, поскольку их может быть несколько.
Вам, вероятно, не нужно использовать *args
здесь. Вместо этого просто используйте:
def ExecuteCode(lists):
if lists[0] == "hi":
...
Обратите внимание, что есть несколько других стилевых проблем с вашим кодом (это не помешает его запуску, но сделает его более сложным или запутанным, чем должно быть). Одной из проблем является наименование. Общепринятым соглашением Python является использование lowercase_names_with_underscores
для большинства функций и резервирование CapitalizedNames
для классов. Другая проблема заключается в выборе имен, которые ясно знают, что они делают. Переменная lists
в ExecuteCode
является примером этого. В вашем текущем коде ошибки это список списков, так что имя может иметь некоторый смысл (если это было то, что вы хотели), но если вы измените его, как я предлагаю выше, чтобы быть списком строк, вы следует переименовать его как-нибудь еще, так как это больше не список списков.