Найти - Пользователи
Полная версия: запуск функции из переменной
Начало » Python для новичков » запуск функции из переменной
1 2 3 4 5
Genabox
есть переменная global_command в ней название функции которую нужно запустить
как это прописать?

 тоесть global_command = "start 1"
нужно start 1()
xam1816
как вариант
  
def start():
    print('func start')
 
commands = {
    'start 1': start
}
 
commands['start 1']()
Genabox
а если я запускаю из модуля функцию
 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>
xam1816
скинь минимально рабочий код модуля, и скажи, что нужно сделать в основном модуле.
xam1816
Genabox
commands = {runnprogram: voice_commands.start(global_command)}
запомни, если определена функция, то скобки после названия означают - вызвать функцию. У тебя при создании словаря функция сразу же вызвалась
Genabox
там пустой модуль с тестовыми командами
вот код модуля 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
ааа
 все заработало
    test11=global_command
    commands = {test11: voice_commands.start}
 
    commands[test11](global_command)
сипасибо большое
с новым годом!
Genabox
финальный код

     #================= 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 ===============================#
xam1816
вот функция, она принимает на вход аргумент, внутри работает с ним, на выходе у нее 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
Genabox
global global_command
а вот с global лучше переосмыслить подход к написанию программы, мне в свое время сказали не нужно global, с ними бывает побочка, когда в каком то месте он изменится по ошибке, и ладно если рухнет прога, может просто неправильно работать и понять в каком месте этот global изменился бывает непросто
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB