Найти - Пользователи
Полная версия: Подскажите пожалуйста как обойтись без глобальных переменных!
Начало » Python для новичков » Подскажите пожалуйста как обойтись без глобальных переменных!
1
@_s_o_r_s
# Программа в бесконечном цикле проверяет буфер обмена каждую минуту и записывает данные в файл !!!

import pyperclip
import time

def check_buffer():

while True:
global data
data = pyperclip.paste()
time.sleep(60)



def write_in_file():

with open('log.txt','w') as logg:
logg = logg.write(data)

write_in_file()
xam1816
@_s_o_r_s
Подскажите пожалуйста как обойтись без глобальных переменных!
в функции в которой цикл,после того как в data придут данные выполнить функцию записи в лог,которая принимает data

P.S код форматировать по правилам,каждому зарегистрировавшемуся нужно указывать на список тегов рядом со смайлом,между которыми вставлять код.
py.user.next
@_s_o_r_s
Подскажите пожалуйста как обойтись без глобальных переменных!
Общий принцип такой
  
>>> def f1():
...     data = 1
...     return data
... 
>>> def f2(data):
...     print(data)
... 
>>> data = f1()
>>> f2(data)
1
>>>
doza_and
Чисто формально без них нельзя обойтись. Всегда есть “buildins”. Любая непустая программа создает глобальные объекты.

Пример выше несколько неудачен. Он создает В пространстве имен текущего модуля 3 переменные f1,f2,data. Поэтому в таком случае надо создавать один объект data и не плодить бесполезные функции.

Задача заключается в том чтобы уменьшить число одновременно рассматриваемых объектов. Уменьшение достигается созданием части объектов внутри пространств имен, что исключает их рассмотрение в других местах (полностью или для этого требуется специальный синтаксис или интроспекция).

 def f1(v1):
   v2=1        # v2,v3 спрятаны внутри функции - самое надежное. Достать их снаружи проблематично, но тоже можно.
   v3=2
   return v1+v2+v3
 class Tx:
      __v1=3  # завернули переменную внутри класса, но при желании ее можно добыть
   def __init__(self):
       self.__v2=4     # засунули переменную в объект
# это тоже заворачивание переменной, но теперь в модуль. Доступ снаружи  
# from mymodule import v1
v1=55      

py.user.next
doza_and
Пример выше несколько неудачен. Он создает В пространстве имен текущего модуля 3 переменные f1,f2,data. Поэтому в таком случае надо создавать один объект data и не плодить бесполезные функции.
Ты не въехал просто, что это за пример. Прочитай его исходное сообщение и проанализируй, нахера ему вообще понадобилась глобальная переменная там. Очень просто - он не знает, как передавать переменные из функции в функцию. И я ему просто продемонстрировал это. Это пишут обычно в книжках всё, которых он не читал, естественно. То есть он базовых вещей вообще не знает, а ты ему какие-то классы даёшь, пространства имён и прочее. Ему не классы нужно изучить и не пространства имён, ему нужно изучить для начала, что такое аргументы функции и возвращаемые значения из функций, потому что он вот на таком уровне находится.
doza_and
py.user.next
Очень просто - он не знает, как передавать переменные из функции в функцию.
Посмотрел. Похоже на то :)
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