Python.03

March 12, 2015, 3:45 p.m.

Материалы третьей лекции.

Комментарии

  1. В примере из лекции был приведен следующий код:

    if re.search(...) is not None:
        ...
    

    Он правильный и подробный, но не идиоматичный, вместо него в Python достаточно написать

    if re.search(...):
        ...
    

    Это будет работать, поскольку

    bool(None) == False
    bool(match_object) == True
    
  2. В видео-лекции представлен не полный набор возможностей регулярных выражений, а лишь самое основное. Недостающую информацию вы всегда можете почерпнуть в документации. Однако одна из возможностей стоит отдельного упоминания о ней. В Python можно делать так:

    mo = re.search(r"(?P<user>\S+)@(?P<domain>\S+)", "d.v.kornev@gmail.com")
    print(mo.groupdict())
    

    В результате будет выведен словарь

    {'domain': 'gmail.com', 'user': 'd.v.kornev'}
    
  3. В замерах производительности регулярных выражений внутри циклов есть неточность. На самом деле Python кеширует построенные автоматы. Поэтому повторного построения автомата на очередной итерации цикла не происходит, вместо этого из кеша извлекается уже построенный ранее автомат. Поэтому, строго говоря, в видео-лекции показан замер производительности кеша, а не построения автоматов. Замерить последнее позволяет этот бенчмарк.

  4. Символ ? после, например, {1,} тоже отключает жадность.

comments powered by Disqus