Обращение к переменной функции 1 в функции 2 находясь в функции 1
Как можно обратиться к переменной "l" в функции S() из функции V() находясь в функции S()?
Если переменная не находится в функции, то функция V() исправно работает. Предполагается что готовая функция V() будет использоваться для посимвольного вывода текста, имитируя печать с клавиатуры.
import os
from time import sleep
import random
def V(): # Посимвольный вывод
global l
q = len(l)
i = 0
tim = random.choice([0.1, 0.3, 0.2])
while i < q:
i += 1
os.system('cls')
ql = l[0:i]
print(ql); sleep(tim)
input()
os.system('cls')
def S():
l = 'Салам пополам'
V()
S()
Traceback (most recent call last): File "C:\Users\Емынэжъ\PycharmProjects\pythonProject5\test.py", line 23, in S() File "C:\Users\Емынэжъ\PycharmProjects\pythonProject5\test.py", line 21, in S V() File "C:\Users\Емынэжъ\PycharmProjects\pythonProject5\test.py", line 7, in V q = len(l) ^ NameError: name 'l' is not defined. Did you mean: 'ql'?
Ответы (3 шт):
global в целом нужно прописывать там, где идет запись в глобальную переменную.
Спасибо insolor
Если нужно обьявить переменную l внутри функции S, ее можно сделать атрибутом этой функции, тогда она будет доступна и внутри функции V. Но с точки зрения логики программ так делать неправильно.
import os
from time import sleep
import random
def V(): # Посимвольный вывод
q = len(S.l)
i = 0
tim = random.choice([0.1, 0.3, 0.2])
while i < q:
i += 1
os.system('cls')
ql = S.l[0:i]
print(ql); sleep(tim)
input()
os.system('cls')
def S():
S.l = 'Салам пополам'
V()
S()
Когда одна функция вызывает другую, имеет смысл использовать передачу значения через параметр, а не через глобальную переменную:
import os
from time import sleep
import random
def V(l): # Посимвольный вывод
q = len(l)
i = 0
tim = random.choice([0.1, 0.3, 0.2])
while i < q:
i += 1
os.system('cls')
ql = l[0:i]
print(ql); sleep(tim)
input()
os.system('cls')
def S():
V('Салам пополам') # текст попадет в параметр l функции V
S()