Обращение к переменной функции 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

→ Ссылка
Автор решения: CameL

Если нужно обьявить переменную 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()
→ Ссылка
Автор решения: insolor

Когда одна функция вызывает другую, имеет смысл использовать передачу значения через параметр, а не через глобальную переменную:

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()
→ Ссылка