Необходимо ли явно передавать общую переменную в функцию потоковой передачи, как я показал ниже (первый пример) в Python 3.10+?
ОС — Windows 10, интерпретатор Python — CPython.
или
Можно ли напрямую получить доступ к общей переменной из функции, как показано во втором примере кода.
# First example
# passing Arguments to the threading function using args
import time
import threading
def update_list_A(var_list):
var_list.append('A')
shared_list =[]
t1 = threading.Thread(target = update_list_A, args = (shared_list,)) #usings args to send shared variable
t1.start()
t1.join()
print(shared_list)
+-----------------------------+
#second example
#directly accessing the shared variable from the threading function
import time
import threading
def update_list_A():
shared_list.append('A')
shared_list =[] #shared List
t1 = threading.Thread(target = update_list_A, )
t1.start()
t1.join()
print(shared_list)
Каков правильный способ доступа к общей переменной: через аргументы или напрямую?
Я бы сказал, что это зависит от контекста:
Для короткого кода, в котором мало общих переменных, и они объявлены и используются в небольшом разделе, вам следует обращаться к нему напрямую. Это делает код проще.
Для более длинного кода или сложного потока передача общей переменной через аргументы потока позволяет формализовать, к каким значениям будет обращаться поток. Это помогает гарантировать, что вы не получите доступ к значениям, которые вы не хотели использовать, упрощает тестирование и подталкивает вас к минимизации количества общих переменных.
Это аналогичный аргумент для глобальных переменных.
В вашем первом примере нет общей переменной. Есть только общий объект. Переменная Python и объект, на который она ссылается, — это всегда две разные вещи. Это может сбить с толку, если вы переходите на Python с C++. В C++ переменная может быть объектом, но в Python это никогда не происходит.