Zsh: совпадений не найдено: MulticateLists(np.array([1,3,5,6,4,6,7,1,2,7]))

Я хотел бы импортировать список в функцию Python и запустить эту функцию из терминала кода Visual Studio. Моя функция, которую я назвал «MyFunction.py» и временно сохранил на рабочем столе, выглядит следующим образом:

def MultiplicateLists(a):
    import numpy as np
    import random
    rand_list=[]
    for i in range(10):
        rand_list.append(random.randint(3,9))
    b = np.array(rand_list)
    result = a * b
    print(a)
    print(b)
    print(result)

Однако когда я пытаюсь вызвать и запустить функцию из терминала кода Visual Studio, я получаю следующую ошибку, т. е. «zsh: совпадений не найдено»:

(anaconda3) (base) xxxyyyzzz@xxx Desktop % python3 MyFunction.py MultiplicateLists(np.array([1,3,5,6,4,6,7,1,2,7]))
zsh: no matches found: MultiplicateLists(np.array([1,3,5,6,4,6,7,1,2,7]))

Ниже приведен снимок экрана из кода Visual Studio.

введите сюда описание изображения

Может быть, команда «python3 MyFunction.py MulticateLists()» неверна? Как я могу это исправить?

🤔 А знаете ли вы, что...
С Python можно создавать настольные приложения с использованием библиотеки Tkinter.


50
3

Ответы:

Вы не можете выполнить программу Python таким образом. Вам нужна основная часть драйвера, которая считывает входные данные, создает массив и передает их функции MultiplicateLists. Поэтому добавьте следующее в конец вашего файла:

if __name__ == "__main__":
    numbers = []
    for x in map(int, sys.argv[1].split(',')):
        numbers.append(x)

    print(numbers)
    MultiplicateLists(np.array(numbers))

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

python Myfunction.py 1,3,5,6,4,6,7,1,2,7

Решено

Несколько вещей, которые следует отметить: -

  1. Однако вызов импорта внутри функции в Python обычно не рекомендуется, поскольку импорт модулей — относительно дорогостоящая операция.

  2. То, что вы пытаетесь сделать, это передать аргумент в файл MyFunction.py, который должен обрабатываться самим кодом как системные аргументы. Следовательно, чтобы вызвать функцию из файла Python из терминала, вам нужно изменить свой файл, чтобы он принимал команду. -линейные аргументы или для определения основной функции, которая вызывает нужную функцию.

    if __name__ == "__main__":
        input_list = list(map(int, sys.argv[1].strip('[]').split(',')))
        a = np.array(input_list)
        MultiplicateLists(a)
    

Теперь вы можете легко вызвать его с помощью следующей команды: -

python Myfunction.py 1,3,5,6,4,6,7,1,2,7

Специально для будущих читателей я записываю здесь код, который сработал у меня. В этом коде используются решения @Prateekshit Jaiswal и @OldBoy, которым я большое спасибо!

def MultiplicateLists(a):
    import random
    rand_list=[]
    for i in range(10):
        rand_list.append(random.randint(3,9))
    b = np.array(rand_list)
    result = a * b
    print(a)
    print(b)
    print(result)
    
if __name__ == "__main__":
    import sys
    import numpy as np
    input_list = list(map(int, sys.argv[1].strip('[]').split(',')))
    a = np.array(input_list)
    MultiplicateLists(a)

Затем в терминале набираю следующее:

% python3 MyFunction.py 1,3,5,6,4,6,7,1,2,7

И я получаю такой результат:

[1 3 5 6 4 6 7 1 2 7]
[7 4 6 9 6 4 5 7 7 6]
[ 7 12 30 54 24 24 35  7 14 42]