Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2021 18:30:25

@_s_o_r_s
Зарегистрирован: 2021-04-13
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Подскажите пожалуйста как обойтись без глобальных переменных!

# Программа в бесконечном цикле проверяет буфер обмена каждую минуту и записывает данные в файл !!!

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()

Отредактировано @_s_o_r_s (Апрель 13, 2021 18:30:47)

Офлайн

#2 Апрель 13, 2021 22:25:34

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1394
Репутация: +  124  -
Профиль   Отправить e-mail  

Подскажите пожалуйста как обойтись без глобальных переменных!

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

P.S код форматировать по правилам,каждому зарегистрировавшемуся нужно указывать на список тегов рядом со смайлом,между которыми вставлять код.

Офлайн

#3 Апрель 14, 2021 21:12:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Подскажите пожалуйста как обойтись без глобальных переменных!

@_s_o_r_s
Подскажите пожалуйста как обойтись без глобальных переменных!
Общий принцип такой
  
>>> def f1():
...     data = 1
...     return data
... 
>>> def f2(data):
...     print(data)
... 
>>> data = f1()
>>> f2(data)
1
>>>



Офлайн

#4 Апрель 15, 2021 09:13:01

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Подскажите пожалуйста как обойтись без глобальных переменных!

Чисто формально без них нельзя обойтись. Всегда есть “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      



Офлайн

#5 Апрель 15, 2021 12:48:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Подскажите пожалуйста как обойтись без глобальных переменных!

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



Отредактировано py.user.next (Апрель 15, 2021 12:51:18)

Офлайн

#6 Апрель 15, 2021 19:04:34

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Подскажите пожалуйста как обойтись без глобальных переменных!

py.user.next
Очень просто - он не знает, как передавать переменные из функции в функцию.
Посмотрел. Похоже на то :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version