• Какая разница между строковыми методами в Python с двойным подчеркиванием и без?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Говоря о специальных методах, нужно все время помнить, что они предназначены для вызова интерпретатором, а не вами. Вы пишете не my_object.__len__ (), а len(my_object), и, если my_object - экземпляр определенного пользователем класса, то Python вызовет реализованный вами метод экземпляра __len__. Однако для встроенных классов, например list, str, bytearray и т. д., интерпретатор поступает проще: реализация функции len() в CPython возвращает значение поля ob_size C-структуры PyVarObject, которой представляется любой встроенный объект в памяти. Это гораздо быстрее, чем вызов метода.
    Как правило, специальный метод вызывается неявно. Например, предложение
    for i in х: подразумевает вызов функции iter(х), которая, в свою очередь, может
    вызывать метод х.__iter__ ( ), если он реализован.

    Лучано Рамальо "Fluent Python"
    Ответ написан
    Комментировать
  • Какие существуют легкие IDE (или текстовые редакторы) для JS-фронтеда?

    @kidar2
    Idea, очень хорошо справляется с объёмом клиентского кода в 200тыс строк.
    Раньше сидели на VS2015. В idea инлисенс и переход к определению в js однозначно лучше.
    Ответ написан
    Комментировать
  • Каким образом можно собрать базу "паразитных" IP адресов?

    Jump
    @Jump
    Системный администратор со стажем.
    Мда..
    А зачем все это?
    Не проще ли заблокировать всех, и разрешить только тех кому можно?
    Ответ написан
    1 комментарий
  • Что за страности в Stream в.NET?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    ReadByte возвращает тип int, т.к. при достижении конца будет возвращено значение минус один. А тип byte может иметь значение в диапазоне от нуля до 255. То есть, считывая байты, сообщить о достижении конца потока при помощи типа byte невозможно (байт, имеющий значение ноль может быть полезным байтом), поэтому используется тип int.

    Метод Read принимает буфер, в который будут помещены считанные данные. Буфер - это массив байт. Изначально он должен быть пустым. Размер массива - по своему смотрению. Чем больше размер буфера, тем больше данных будет помещено в память, меньше проделано операций.

    Метод Read возвращает число помещенных в буфер байт. Ноль - достигнут конец потока.

    FileInfo f = new FileInfo(@"C:\example.dat");
    using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
     using (BinaryReader br = new BinaryReader(fs))
     {
       int bytesRead = 0;
       byte[] buffer = new byte[256]; // размер буфера 256 единиц байт
       StringBuilder result = new StringBuilder();
       while ((bytesRead = br.Read(buffer, 0, buffer.Length)) != 0) // читаем не более 256 единиц байт в buffer
       {
         // из buffer следует извлекать не более bytesRead (в конце это число может быть меньше 255)
       }
     }
    }

    Массивы являются ссылочными типами и нет необходимости использовать out.
    Ответ написан
    3 комментария
  • Как передать изменить параметр контрола из внешнего класса в потоке в C# 4.0?

    equand прав. До конца может не понимаю, что конкретно требуется, написал небольшой пример и с него должно, в принципе, быть понятно как в потоке запустить метод и вызывать другой из Form1.cs

    Form1.cs:
    public Form1()
    {
      InitializeComponent();
      var counter = new Counter(Log);    
      var thread = new Thread(counter.Start);
      thread.Start();
    }

    public void Log(int a)
    {
      if (InvokeRequired)
      {
        Invoke(new MethodInvoker(() => Log(a)));
        return;
      }
      Text = a.ToString();
    }


    * This source code was highlighted with Source Code Highlighter.


    Counter.cs:
    public class Counter
    {
      private readonly Action<int> _logger;

      public Counter(Action<int> logger)
      {
        _logger = logger;
      }

      public void Start()
      {
        for(var i =0;;i++)
        {
          _logger(i);
          Thread.Sleep(1000);
        }
      }
    }


    * This source code was highlighted with Source Code Highlighter.
    Ответ написан
    1 комментарий
  • Как передать изменить параметр контрола из внешнего класса в потоке в C# 4.0?

    @equand
    разве ему не instance нужен? Вы же метод статически вызываете, а ему нужен уже инициализированный объект
    Ответ написан
    Комментировать
  • Авторизация без возможности передать логин / пароль другому

    @binom248
    Может достаточно запретить одновременную работу нескольких пользователей под одним логином? Тогда «умники», отдающие доступ, могут оказаться без доступа сами. Часто такого хватает.
    Ответ написан
    Комментировать