Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (10)

Наибольший вклад в теги

Все теги (50)

Лучшие ответы пользователя

Все ответы (113)
  • В чем суть self?

    @fireSparrow
    Если кратко и по простому, то дело обстоит так:

    Обычно класс создают для того, чтобы потом создать некоторое количество экземпляров этого класса.
    При написании класса нужно как-то указать, что какие-то манипуляции нужно производить именно над конкретными экземплярами, а не над самим классом.

    Для этого в функциях (кроме некоторых исключений) первым аргументом пишут имя (по традиции это как раз слово "self", хотя на самом деле там можно указать любое корректное имя). В результате, когда в функции интерпретатор видит имя self, он понимает, что речь идёт именно об одном конкретном объекте класса.

    Пример:
    class A:
      
      # У класса есть атрибут "x"
      x = 1
      
      def change_one(self, value):
        # Эта функция меняет атрибут "x" только у того экземпляра класса,
        # для которого она вызвана
        self.x = value
      
      def change_all(self, value):
        # Эта функция меняет атрибут "x" у самого класса
        # Изменение отразится на всех экземплярах, у которых нет своего атрибута "x"
        A.x = value
    
    
    a1 = A()
    a2 = A()
    a3 = A()
    
    print(a1.x, a2.x, a3.x)
    # Выведет: 1 1 1
    # На самом деле, у экземпляров пока нет своего атрибута "x",
    # но они получают его значение из класса
    
    a1.change_one(5)
    
    print(a1.x, a2.x, a3.x)
    # Выведет: 5 1 1
    # Теперь у а1 есть свой атрибут x, потому что функция change_one через self
    # создала его только для того экземпляра, для которого её вызвали
    # a2 и a3 по прежнему не имеют своего атрибута "x" и получают его значение из класса
    
    a2.change_all(2)
    
    print(a1.x, a2.x, a3.x)
    # Выведет: 5 2 2
    # Изменился атрибут класса, и поэтому значение изменилось для всех элементов,
    # которые не имеют своего атрибута "x", а вынуждены брать его из класса
    
    a1.change_all(7)
    
    print(a1.x, a2.x, a3.x)
    # Выведет: 5 7 7
    # Совершенно всё равно, из какого экземпляра вы запускаете change_all.
    # В этой функции не используется self (в отличие от change_one),
    # а значит результат её вызова никак не связан с конкретным экземпляром
    Ответ написан
    1 комментарий
  • Использовать ли Python, когда можно обойтись bash?

    @fireSparrow
    Без кода сложно говорить что-то конкретное.

    Есть подозрение, что вы не вставляете в цикл никаких задержек. А ведь для большинства практических задач не нужно проверять что-то каждую наносекунду, можно делать, например, раз в 100 миллисекунд. А для некоторых задач и одна проверка в минуту может быть вполне адекватной частотой.

    Вот этот код у меня грузит процессор на 99-100%

    while True:
        x = range(3)


    А вот с этим процесс python3 я почти вообще не вижу в выводе команды top. Он там появляется всего несколько раз в минуту с какой-то смешной цифрой вроде 0,2 % загрузки процессора.

    import time
    
    while True:
        x = range(3)
        time.sleep(0.1)


    Так что используйте задержки в цикле и будет вам счастье.
    Ответ написан
    Комментировать
  • Можно ли в функции def задать параметр который может и не быть?

    @fireSparrow
    def send(test, tost=None):
        if tost is None:
            # Выполняем какие-то действия если был указан только первый аргумент
        else:
            # Выполняем какие-то действия, если были указаны оба аргумента
    Ответ написан
    2 комментария
  • Что такое итераторы в python, c#, c++, js? Как их использовать? Для чего они? Читал - пока что не понял их суть?

    @fireSparrow
    Если в двух словах, то итератор - это такой объект, который каждый раз по запросу может выдать либо некоторый элемент, либо сообщение о том, что у него больше нет элементов.

    Самый простой вариант - итератор по списку. Он каждый раз по запросу будет выдавать по одному элементу списка, начиная с первого, и заканчивая последним, после чего выдаст сообщение, что элементы закончились.

    При этом итератор не обязательно выдаёт элементы из заранее существующей коллекции, он может их прямо в момент запроса создавать по определённому правилу. Такие итераторы могут быть и бесконечными, то есть сколько бы запросов они не получили, они всегда готовы выдать ещё и никогда не скажут, что элементы закончились.
    Пример - итератор, который выдаёт 0 или 1, чередуя их.
    Ответ написан
    1 комментарий
  • Хорошая практика для Python?

    @fireSparrow
    Решайте задачи. Начинайте с простых, тщательно разбирайте те конкретные непонятки, которые всплывают по мере решения. Постепенно почувствуете в себе силы переходить к более сложным задачам.

    Зарегистрируйтесь на сайтах:
    checkio.org
    codingame.com
    codewars.com

    Там хорошие подборки задач разного уровня сложности с автоматическим тестированием решений.
    Ответ написан
    2 комментария

Лучшие вопросы пользователя

Все вопросы (7)