Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 4, 2023 18:23:56

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

запуск функции из переменной

есть переменная global_command в ней название функции которую нужно запустить
как это прописать?

 тоесть global_command = "start 1"
нужно start 1()

Офлайн

#2 Янв. 4, 2023 18:37:14

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1355
Репутация: +  119  -
Профиль   Отправить e-mail  

запуск функции из переменной

как вариант

  
def start():
    print('func start')
 
commands = {
    'start 1': start
}
 
commands['start 1']()

Офлайн

#3 Янв. 4, 2023 19:18:21

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

запуск функции из переменной

а если я запускаю из модуля функцию

 voice_commands
def start(w):
	print('TEST*********' + w)
	print(global_command)
	pass

   global_command = 'test' 
    commands = {runnprogram: voice_commands.start(global_command)}
 
    commands[runnprogram]()

Traceback (most recent call last):
File “d:\discord\sql\sqlquerty.py”, line 409, in <module>
DATABASEASK()
File “d:\discord\sql\sqlquerty.py”, line 385, in DATABASEASK
commands = {runnprogram: voice_commands.start('1')}
NameError: name ‘runnprogram’ is not defined. Did you mean: ‘run_programm’?
(discord) PS D:\discord>

Офлайн

#4 Янв. 4, 2023 19:39:40

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1355
Репутация: +  119  -
Профиль   Отправить e-mail  

запуск функции из переменной

скинь минимально рабочий код модуля, и скажи, что нужно сделать в основном модуле.

Офлайн

#5 Янв. 4, 2023 19:46:02

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1355
Репутация: +  119  -
Профиль   Отправить e-mail  

запуск функции из переменной

Genabox
commands = {runnprogram: voice_commands.start(global_command)}
запомни, если определена функция, то скобки после названия означают - вызвать функцию. У тебя при создании словаря функция сразу же вызвалась

Офлайн

#6 Янв. 4, 2023 19:46:16

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

запуск функции из переменной

там пустой модуль с тестовыми командами
вот код модуля voice_commands

 def start(w):
	print('TEST*********' + w)

 global_command = start-X
test11=global_command
   
    commands = {test11: voice_commands.start(global_command)}
 
    commands[test11]()

ага так зупастилось но пишет
TEST*********start-X
Traceback (most recent call last):
File “d:\discord\sql\sqlquerty.py”, line 409, in <module>
DATABASEASK()
File “d:\discord\sql\sqlquerty.py”, line 387, in DATABASEASK
commands()
TypeError: ‘NoneType’ object is not callable
(discord) PS D:\discord>

Отредактировано Genabox (Янв. 4, 2023 19:47:31)

Офлайн

#7 Янв. 4, 2023 19:52:31

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

запуск функции из переменной

ааа

 все заработало
    test11=global_command
    commands = {test11: voice_commands.start}
 
    commands[test11](global_command)
сипасибо большое
с новым годом!

Офлайн

#8 Янв. 4, 2023 19:56:02

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

запуск функции из переменной

финальный код

     #================= R U N  P R O G R A M M ===============================#
    def run_programm():
        global global_command
        dictcommand=global_command
        commands = {dictcommand: voice_commands.start}
 
        commands[dictcommand](global_command)
        
    run_programm()
 
    #================= R U N  P R O G R A M M ===============================#

Офлайн

#9 Янв. 4, 2023 20:01:54

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1355
Репутация: +  119  -
Профиль   Отправить e-mail  

запуск функции из переменной

вот функция, она принимает на вход аргумент, внутри работает с ним, на выходе у нее None (если return не указан возвращается по умолчанию None)

  
def start(w):
	print('TEST*********' + w)
var = start('my_arg')
print('var == ', var)

>>>
 
TEST*********my_arg
var == None

Process finished with exit code 0

что это за…
  
global_command = start-X
test11=global_command

так можно проще написать
  
test11 = start-X
Что за start-X - это не строка, это какая - то переменная, где она определена в коде, что в ней хранится?

Отредактировано xam1816 (Янв. 4, 2023 20:06:40)

Офлайн

#10 Янв. 4, 2023 20:06:11

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1355
Репутация: +  119  -
Профиль   Отправить e-mail  

запуск функции из переменной

Genabox
global global_command
а вот с global лучше переосмыслить подход к написанию программы, мне в свое время сказали не нужно global, с ними бывает побочка, когда в каком то месте он изменится по ошибке, и ладно если рухнет прога, может просто неправильно работать и понять в каком месте этот global изменился бывает непросто

Отредактировано xam1816 (Янв. 4, 2023 20:06:59)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version