Обновление логической переменной из импортированного файла

#python #import #boolean #python-multithreading

Вопрос:

Я новичок в программировании и столкнулся с проблемой. Импортированная функция, bonnie_movement , должна перестать выполняться, когда переменная game_end имеет значение True, теперь, когда я пытаюсь обновить эту переменную (которая также была импортирована) в файле, в который она была импортирована, она не обновляется. Пример:

 import os 
import random 
import threading 
import time 
from movement_testing import * 

def p(): 
    global game_end 
    a = input("> ") 
    if a == "end": 
        game_end = True 
        time.sleep(0.5) 
        print(str(game_end)) 

threading.Thread(target=p).start() 
threading.Thread(target=bonnie_movement).start() 
 

Отпечаток, который вы видите там, хотя и выдает, True но bonnie_movement просто продолжает идти. Кто-нибудь знает, что я могу сделать?

Заранее спасибо!

Правка: Переменная не a имеет никакого отношения к вопросу, у нее нет никакой реальной цели, кроме как немедленно остановить функцию при объявлении game_end = True . Печать также предназначена для того, чтобы узнать, game_end обновляется ли функция p и не служит ли она какой-либо реальной цели.

Комментарии:

1. Вам следует прочитать больше о потоковой передаче и программировании в целом из документации python.

Ответ №1:

добро пожаловать в StackOverflow!

Если вы хотите печатать True в зависимости от значения a , то вам даже не нужно использовать game_end переменную. Фактически, вы уже используете a переменную в условии. Теперь, поскольку я не знаю, что game_end на самом movement_testing деле делает этот класс, я попытаюсь помочь вам с информацией, которую вы уже предоставили. Вы можете просто изменить свою def p() функцию следующим образом:

 def p():
    if a == "end": 
        print(True) 
 

Или даже

 def p():
    print(a=="end")
 

Лучшим подходом было бы, если бы вы могли объявить game_end переменную в этом файле ИЛИ определить def p() метод внутри movement_testing .

Удачи вам в вашем путешествии!

Комментарии:

1. Спасибо за ответ, но, к сожалению, это было не то, о чем я спрашивал, я отредактировал сообщение, чтобы прояснить это, реальный вопрос заключается в том, как заставить функцию p обновлять переменную game_end в функции bonnie_movement (обе из которых были импортированы через from movement_testing import * ).

Ответ №2:

Я опубликовал тот же вопрос на reddit, и вот ответ:

Глобальные значения в python являются глобальными для модулей, а не для всех модулей. Строка, в которой, как вы утверждаете, импортируется переменная, на самом деле этого не делает.

Если «game_end» является свойством «Movement_testing», попробуйте получить к нему доступ следующим образом

movement_testing.game_end = Верно

и

печать(str(movement_testing.game_end))