
Captain
18.12.2018
22:23:01
почитай про изменяемые и неизменяемые типы данных в питоне
кажется, это про то
https://devpractice.ru/python-lesson-3-data-model/

Oleksandr
18.12.2018
22:24:04

Google

Oleksandr
18.12.2018
22:25:01
аааа
понял, спасибо за ссылку
то есть, я, переназначаня, по сути, не меняю переменную, я создаю новую, в то время как со словарём именно меняю

Captain
18.12.2018
22:26:00
ага
ну тут ещё считаю своим долгом сказать, что в питоне бывают эксплицитно глобальные переменные

Nikolay
18.12.2018
22:26:56
а почему кстати со словарём так работает, а с переменной нет? ну то есть, по логике, он и то и то хранит, но одно разрешает изменять, а другое нет. особенности декораторов?
или декоратор во wrapper передает, по сути, не словарь, а ссылку на словарь в decorator, потому можно изменять, а в случае с переменной передает именно объект?
ну ты же хочешь декоратор использовать не только лишь раз

Captain
18.12.2018
22:27:01
хотя это скорее считается плохим вариантом и вообще unpythonic

Nikolay
18.12.2018
22:27:02
не с одной функцией

Oleksandr
18.12.2018
22:27:25

Captain
18.12.2018
22:28:11
но в целом будет работать код вида
VAR = None
def decorator()
global VAR
def wrapper()
…
и эта самая module-level переменная будет честно меняться
но это весьма некрасиво и в целом достаточно ненадёжно

Oleksandr
18.12.2018
22:29:47
ну, в рамках конкретно этой задачи (это не рабочая задача, а из области "а как это сделать?") проще таки создать кеширующий дикт внутри декоратора. то есть, с внешней переменной понятно, непонятно было именно как внутри декоратора :)

Google

Captain
18.12.2018
22:30:12
а, ну тогда да
но если переменных разведётся много, лучше классом
class MyDecorator(object):
def init(self):
self.var = 0
def decorate(self, var):
self.var = var
def real_decorator(function):
........
return real_decorator
my_decorator = MyDecorator()
@my_decorator.decorate(3)
def smth(x)
print(x)

Oleksandr
18.12.2018
22:37:49
логика понятна, а в чем преимущество по сравнению с cache=dict() в decorator? и как сюда аргументы передать? смысл же разные аргументы для разных функций.

Captain
18.12.2018
22:38:12
а, ой
во, исправил
ну короче суть та же, что и с нормальным декоратором
просто теперь это метод
и условно говоря можно создать разных инстансов для разных функций, если аргументы должны меняться независимо

Oleksandr
18.12.2018
22:40:06
чот как-то велосипедно :) но очевидно сработает, да.

Captain
18.12.2018
22:40:29
ну на практике обычно там куча всего ещё в классе есть
для примитивного декоратора так-то действительно достаточно словаря

Oleksandr
18.12.2018
22:43:35
хотя правильнее, как мне кажется, сделать это не через метод, если уж делать класс декоратором, а через def call(self, *args, **kw)

Captain
18.12.2018
22:44:08
ну, вопрос вкуса, на самом деле, бывает по-разному

Oleksandr
18.12.2018
22:44:10
а то использовать метод и синтаксически некрасиво и незачем, при наличии call

Captain
18.12.2018
22:44:22
у одного класса может быть несколько декораторов, например
как в условной библиотеке telebot, скажем

Oleksandr
18.12.2018
22:44:49
аргумент, но это уже совсем unpythonic, ну чисто интуитивно :)
хотя вопрос задачи, да.

Captain
18.12.2018
22:45:00
где у одного бота есть разные декораторы на добавление хендлеров

Google

?
18.12.2018
22:45:41
Which python library do you use?
public poll
pyTelegramBotApi – 5
??????? 29%
@craboo, Vladimir, @eggpriest, @cutwater, @fireofchaos
python-telegram-bot – 5
??????? 29%
@c0x6A, @LEE_SUNG, @kuvam, @Sortafreel, @Ardillita_qwerty
Other – 3
???? 18%
@alexmadd, @SergAHell, @amir_foreverornever
Telepot – 2
??? 12%
@vovkd, @lisiniaa
aioGram – 2
??? 12%
@svinerus, @Lorkes
twx.botapi
▫️ 0%
? 17 people voted so far.

Nikolay
18.12.2018
22:49:14
Which python library do you use?
public poll
pyTelegramBotApi – 5
??????? 29%
@craboo, Vladimir, @eggpriest, @cutwater, @fireofchaos
python-telegram-bot – 5
??????? 29%
@c0x6A, @LEE_SUNG, @kuvam, @Sortafreel, @Ardillita_qwerty
Other – 3
???? 18%
@alexmadd, @SergAHell, @amir_foreverornever
Telepot – 2
??? 12%
@vovkd, @lisiniaa
aioGram – 2
??? 12%
@svinerus, @Lorkes
twx.botapi
▫️ 0%
? 17 people voted so far.
@aragaer с будущим ботом его бы уже забанили

?
18.12.2018
22:49:52

Gimm
18.12.2018
23:01:04
всем неспящим в сиэтле привет!)
вопрос нубский: file = open('d://python/rosstat.csv').readlines()
inn = str(input('Inn:'))
for i in iter(file):
if inn in i:
print(i)
f = open('result.csv', 'w')
f.write(i)
f.close()
почему то в переменной i сидит совершенно левая строка, а в консоли правильная, в итоге в файле не то что надо

?
18.12.2018
23:04:16
Если это 2, то там есть rawinput()

Gimm
18.12.2018
23:05:02

?
18.12.2018
23:05:19
Еще с csv лучше работать с помощью pandas

Gimm
18.12.2018
23:06:10
эх, если бы это было проще) я с пандой начал, но там споткнулся об размер файла, чанксайз применял, не помогло

?
18.12.2018
23:06:24
file в данном случае это лист, через него можно итерировать просто for i in file

Gimm
18.12.2018
23:07:31

?
18.12.2018
23:07:43
А то что пишется совсем разное, это потому что пишется уже после for петли. То есть, то что самое последнее

Gimm
18.12.2018
23:07:48
поглядите на результат, не удивляйтесь идле, это спайдер, что было в анаконде
я перед запуском все переменные чищу через среду, откуда там левая строка берется не пойму

Nikolay
18.12.2018
23:08:50
?

Gimm
18.12.2018
23:09:25
?
слишком большое разрешение?)

Google

Gimm
18.12.2018
23:11:22

?
18.12.2018
23:11:34

Gimm
18.12.2018
23:15:28

?
18.12.2018
23:15:54

Gimm
18.12.2018
23:16:08
ввожу инн и всё, подвисло
file = open('d://python/rosstat.csv').readlines()
inn = input('Inn:')
with open('result.csv', 'a') as f:
for i in file:
if inn in i:
f.write(i)
print(i)

?
18.12.2018
23:16:52
Ошибок нет?

Gimm
18.12.2018
23:17:05
неа, всё типа ок

Admin
ERROR: S client not available

Gimm
18.12.2018
23:17:19
зато старый код пашет
file = open('d://python/rosstat.csv').readlines()
inn = input('Inn:')
for i in file:
if inn in i:
print(i)
f = open('result.csv', 'w')
f.write(i)
f.close()

?
18.12.2018
23:18:22

Richy
18.12.2018
23:18:50

?
18.12.2018
23:18:53
То есть, если у тебя там несколько подходящих вариантов, у тебя только последний запишется

Richy
18.12.2018
23:19:16
Недавно через "w" делал
Чекну код через 5 мин

?
18.12.2018
23:19:32
Он пишет в for петле

Google

?
18.12.2018
23:19:51
Строка за строкой

Richy
18.12.2018
23:19:51
А
Я делал так
s = open(...,'w')
s.write(...)
s.close()

Gimm
18.12.2018
23:20:46

?
18.12.2018
23:21:30
Если открывать файл с with open() то нет необходимости его закрывать
И открыть вне петли, до начала

Richy
18.12.2018
23:22:30
Ну в петле да
Оикрытт до начала и в конце операций закрытт

$pl01t
18.12.2018
23:23:12
О чём болтаем?

Gimm
18.12.2018
23:23:49
да вот мистер G дал хорошую наводку на решение, но потом запутал меня)))

Vladislav
18.12.2018
23:23:55
Делаю вот такого типа диалоги
'''QInputDialog.getText(self, "text", "text")'''
Дело в том что когда я создаю проект я в вожу название нажимаю энтер и оно работает
А вот когда хочу переименовать,
Энтер нажимаю и он почему то идет в отмену, хотя фокус стоит на кнопке Ок
Подскажите пж в чем проблема?

?
18.12.2018
23:26:21
Даже если там будет много совпадений

Vladislav
18.12.2018
23:27:13