Собственно Сабж.
Если у кого есть Вопросы, Задачки по Программированию на Python постим сюда - Ответы и Решения будут.
И для почина - чтобы разогреть Многоуважаемую Аудиторию - Первый Вопрос от меня про Интересные Shared
К примеру есть такая Программа
import sys class ParseResult: errors_list= [] parse_ok= False def Parse(): result= ParseResult() result.errors_list.append( "something" ) return result def main(): print( Parse().errors_list ) print( Parse().errors_list ) print( Parse().errors_list ) print( Parse().errors_list ) if __name__ == "__main__": sys.exit(main())
Выполнить код он-лайн см. http://rextester.com/PXL1357
Т.е. при выполнении программа на выводе дает вот что
$ python test.py ['something'] ['something', 'something'] ['something', 'something', 'something'] ['something', 'something', 'something', 'something']
Почему? Т.е. откуда возникают Shared состояния?
Кто даст правильный Ответ - получит Плюсик в Репутацию
Сообщение отредактировал T-800 Danya: 27.08.2018, 15:40:06
От нечего делать, вот написал код на python, алгоритм пузырчатой сортировки, возможно её как-то можно упростить...
def bubble_sort(l): for i in range(0, len(l)): for j in range(i, len(l)): if l[i] > l[j]: l[j],l[i] = l[i],l[j] l = [100, 5, 1, 7, 20, 10000] print(l) bubble_sort(l) print(l)
Где можно пройти курсы Python в Алматы?
Я лично научился языку Python просмотрев видеоролики Тимофея Хирьянова на ютубе, он очень хорошо, просто и понятно объясняет. А когда базовые знания получили, потом нужно будет читать онлайн документацию по языку, установить Python на комп, и закреплять теоретические знания практикой.
питон коварен еще эликсир вот хорошая вещь, похож на питон, похож на руби, базирован на Erlang https://habr.com/ru/post/50028/
вацапы, чаты фейсбука, телеграм - это всё джаббер, xml-потоки, можно и protobuf, протокол xmpp
И для почина - чтобы разогреть Многоуважаемую Аудиторию - Первый Вопрос от меня про Интересные Shared
К примеру есть такая Программа
import sys class ParseResult: errors_list= [] parse_ok= False def Parse(): result= ParseResult() result.errors_list.append( "something" ) return result def main(): print( Parse().errors_list ) print( Parse().errors_list ) print( Parse().errors_list ) print( Parse().errors_list ) if __name__ == "__main__": sys.exit(main())Выполнить код он-лайн см. http://rextester.com/PXL1357
Т.е. при выполнении программа на выводе дает вот что
$ python test.py ['something'] ['something', 'something'] ['something', 'something', 'something'] ['something', 'something', 'something', 'something']Почему? Т.е. откуда возникают Shared состояния?
Кто даст правильный Ответ - получит Плюсик в Репутацию
Интересный вопрос. Попробую на него ответить. Мне думается, это происходит по следующим причинам.
В объявлении класса ParseResult используется атрибут error_list с изменяемым типом данных (list), который является переменной класса (class variable), а не его экземпляра. Другими словами, список error_list используется совместно всеми экземплярами данного класса, потому что каждый из них хранит ссылку на один и тот же список. Дальше в функции main() несколько раз вызывается функция Parse(), которая каждый раз создает новый экземпляр класса ParseResult и сразу же изменяет атрибут error_list, когда добавляет новый элемент в список при помощи метода append(). Поскольку атрибут совместно используется всеми экземплярами, он автоматически изменяется во всех остальных уже созданных экземплярах этого класса. Чтобы каждый экземпляр класса имел собственное значение атрибута error_list, надо переписать класс примерно так:
class ParseResult: def __init__(self, parse_ok): self.parse_ok = False self.errors_list = [] # создает новый пустой список для каждого экземпляра ParseResult def add_error(self, error): self.errors_list.append(error)
Правильный ли мой ответ? Будет ли у меня плюсик в репутацию?
Интересный вопрос. Попробую на него ответить. Мне думается, это происходит по следующим причинам.
В объявлении класса ParseResult используется атрибут error_list с изменяемым типом данных (list), который является переменной класса (class variable), а не его экземпляра. Другими словами, список error_list используется совместно всеми экземплярами данного класса, потому что каждый из них хранит ссылку на один и тот же список. Дальше в функции main() несколько раз вызывается функция Parse(), которая каждый раз создает новый экземпляр класса ParseResult и сразу же изменяет атрибут error_list, когда добавляет новый элемент в список при помощи метода append(). Поскольку атрибут совместно используется всеми экземплярами, он автоматически изменяется во всех остальных уже созданных экземплярах этого класса. Чтобы каждый экземпляр класса имел собственное значение атрибута error_list, надо переписать класс примерно так:class ParseResult: def __init__(self, parse_ok): self.parse_ok = False self.errors_list = [] # создает новый пустой список для каждого экземпляра ParseResult def add_error(self, error): self.errors_list.append(error)Правильный ли мой ответ? Будет ли у меня плюсик в репутацию?![]()
Плюсик будет
Суть в том, что в Python поля класса - это именно поля класса, а не инстанса. Инстансы работают за счёт того, что, когда происходит обращаение к полю, которого у инстанса нет, запрос перенаправляется классу.
print('look carefully for object identities') print('\ndefine Inner') class Inner: def __init__(self): print('Inner.__init__(', self, ')') def __del__(self): print('Inner.__del__(', self, ')') print('\ndefine Outer') class Outer: class_attribute = Inner() def __init__(self): print('Outer.__init__(', self, ')') self.instance_attribute = Inner() def __del__(self): print('Outer.__del__(', self, ')') print('\ncreate OuterInstanceA') OuterInstanceA = Outer() print('\ncreate OuterInstanceB') OuterInstanceB = Outer() print('\nOuterInstanceA.class_attribute ::', OuterInstanceA.class_attribute) print('OuterInstanceA.instance_attribute ::', OuterInstanceA.instance_attribute) print('OuterInstanceB.class_attribute ::', OuterInstanceB.class_attribute) print('OuterInstanceB.instance_attribute ::', OuterInstanceB.instance_attribute) print('Outer.class_attribute ::', Outer.class_attribute) try: print('Outer.instance_attribute ::', Outer.instance_attribute) except Exception as e: print('Outer.instance_attribute !', e) print('\ndelete OuterInstanceA') del OuterInstanceA print('\ndelete OuterInstanceB') del OuterInstanceB print('\ndelete Outer') del Outer print('\nend')
См. результат выполнения кода https://rextester.com/SJOH58595
Таким образом если необходимо, чтобы каждый инстанс при появлении получал свою собственную копию list() - надо прописать создание этой копии в __init__.
Сообщение отредактировал T-800 Danya: 08.02.2019, 23:05:42
Суть в том, что в Python поля класса - это именно поля класса, а не инстанса.
А я разве не то же самое сказал?
Таким образом если необходимо, чтобы каждый инстанс при появлении получал свою собственную копию list() - надо прописать создание этой копии в __init__.
И об этом в моем ответе то же самое сказано, с примером кода.
Инстансы работают за счёт того, что, когда происходит обращаение к полю, которого у инстанса нет, запрос перенаправляется классу.
А вот тут интересный момент. Вот пример класса с двумя полями, которых тоже вроде бы не будет у "инстанса" (по-русски говоря, у экземпляра класса).
#python 3.5.2 class MyClass: year = 1900 words = ['spam', 'test'] var1 = MyClass() var2 = MyClass() var3 = MyClass() var2.year = 1999 var3.year = 2019 var2.words[0] = 'Hello' var3.words[1] = 'world' print(var1.year, var1.words) print (var2.year, var2.words) print(var3.year, var3.words)
При выполнении этого кода через тот же самый сервис https://rextester.co...online_compiler получим:
1900 ['Hello', 'world'] 1999 ['Hello', 'world'] 2019 ['Hello', 'world']
Видим, что атрибут words, как и прежде, это атрибут класса. Он общий (совместно используемый). Изменения этого атрибута в любом "инстансе", как и раньше, приводят к его изменению во всех остальных. Атрибут year в MyClass тоже является атрибутом класса, а не "инстанса". А вот значение атрибута year при его изменении в каждом "инстансе" получилось свое! Причем прописывать его в классе через self не потребовалось.
Кто сможет это правильно объяснить, получит от меня плюсик в репутацию.
Буду очень благодарен если хотя-бы подскажите куда копать...
Итак:
есть два массива, скажем таких:
u1=[1,4,2,6,7,3]
x1=[20,43,21,45,32,87]
Количество элементов в двух массивах равное, это важно. Проще говоря каждый n элемент первого массива соотносится к каждому n элементу второго массива.
Далее задаем значение u, например 5.
Задача вычислить значение x.
ТО есть: нужно понять где в первом массиве находится значение u, интерполировать его и на основе этого значения вычислить значение x из второго массива.
Рыл в сторону интерполяции, регрессии, но пока безрезультатно.
Спасибо.
ИМХО если каждый n-й элемент массива Х соотвествует одному и только одному n-ому элементу массива U то Вам надо сделать перебор элементов массива U c n=0 дл n=N, определить индекс n для которого будет минимум модуля разности Un и 5 и выбрать из массива X элемент с определенным Вами индексом n, а потом просто взять да и прибавить к нему (Un-5)*[Xn+1 - Xn]/[Un+1 -Un]Буду очень благодарен если хотя-бы подскажите куда копать...
Итак:
есть два массива, скажем таких:
u1=[1,4,2,6,7,3]
x1=[20,43,21,45,32,87]
Количество элементов в двух массивах равное, это важно. Проще говоря каждый n элемент первого массива соотносится к каждому n элементу второго массива.
Далее задаем значение u, например 5.
Задача вычислить значение x.
ТО есть: нужно понять где в первом массиве находится значение u, интерполировать его и на основе этого значения вычислить значение x из второго массива.
Рыл в сторону интерполяции, регрессии, но пока безрезультатно.
Спасибо.
Сообщение отредактировал T-800 Danya: 12.02.2019, 00:10:59
![]() |
Барахолка →
Вакансии →
Поиск работы →
Telegram-botсоздание и хостинг телеграм-ботов Автор: Lindwurm, 02.02.2019, 14:36 ![]() |
|
![]() |
|
![]() |
Барахолка →
Продам →
Услуги →
WEB-дизайн и создание мобильных приложенийСоздание сайтов и приложений разного уровня сложности. Автор: tElore, 24.01.2019, 22:53 ![]() |
|
![]() |
|
![]() |
Барахолка →
Продам →
Услуги →
Индивидуальная консультация (без глубинной работы)Автор: Любава Г., 21.09.2018, 14:28 ![]() |
|
![]() |
|
![]() |
Барахолка →
Продам →
Услуги →
Текстовая консультация-работа через личные сообщенияАвтор: Любава Г., 21.09.2018, 14:23 ![]() |
|
![]() |
|
![]() |
Барахолка →
Продам →
Услуги →
Совместимость 2 союзов+отчёт по личностиАвтор: Любава Г., 20.09.2018, 17:14 ![]() |
|
![]() |
пользователей: 0, неизвестных прохожих: 2, скрытых пользователей: 0
Размещение рекламы на сайте Предложения о сотрудничестве Служба поддержки пользователей
© 2011-2019 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.