Kodomo

Пользователь

Занятие 10.

Краткое содержание: dict и всё, что с ним связано. Важные частные случаи работы со строками: русский язык, кодировки, специальные типы строк.


План рассказа

  1. Что такое dict
  2. Основные методы работы с dict:

       1 >>> x = { 1: 2, "3": [4, 5] }
       2 >>> x[1]
       3 2
       4 >>> x["3"]
       5 [4, 5]
       6 >>> x["3"][0]
       7 4
       8 >>> x[(1,2,3)] = 4
       9 >>> x
      10 {1: 2, '3': [4, 5], (1, 2, 3): 4}
      11 >>> x.keys()
      12 [1, '3', (1, 2, 3)]
      13 >>> x.values()
      14 [2, [4, 5], 4]
      15 >>> x.items()
      16 [(1, 2), ('3', [4, 5]), ((1, 2, 3), 4)]
      17 >>> 1 in x
      18 True
      19 >>> 2 in x
      20 False
      21 >>> for i in x: print i, x[i]
      22 ... 
      23 1 2
      24 3 [4, 5]
      25 (1, 2, 3) 4
      26 >>> for k, v in x.iteritems(): print k, v
      27 ... 
      28 1 2
      29 3 [4, 5]
      30 (1, 2, 3) 4
    
  3. Один очень важный частный случай операции % над строками или почему не стоит пользоваться string.format:

       1 >>> data = { "title": "Hello, world", "text": "This is my page." }
       2 >>> template = """<html>
       3 ... <head><title>%(title)s</title></head>
       4 ... <body><p>%(text)s</p></body>
       5 ... </html>"""
       6 >>> print template % data
       7 <html>
       8 <head><title>Hello, world</title></head>
       9 <body><p>This is my page.</p></body>
      10 </html>
    
  4. Русский язык
    • Суть проблемы: где могут встречаться кодировки?
      • ввод-вывод программы (например, print, sys.stdin.read, open().read(), optparse, urllib2) – кодировки в разных местах могут быть разные

      • строки в теле программы
      • Существуют настройки кодировок в системе (в UNIX команда locale), они разные на разных системах
      • Как с этим бороться в python:
        • Декларация кодировки в тексте программы, e.g:

             1 #!/usr/bin/python
             2 # coding: cp1251
             3 print u"Привет"
          
      • Добиться, чтобы внутреннее представление строк в интерпретаторе всегда было уникодным
        • Правильно конвертировать строки на вводе-выводе. (Surprize! Это почти всегда делается автоматически! locale, кодировки в протоколе http, etc)
        • И всё-таки, подумайте десять раз, прежде, чем использовать русский язык.
  5. Типы строк в python:
    • уникодные строки: u"Привет"

      • строки, в которых игнорируются \: r">>> print '\n'"

      • короткие строки (требуют \ перед переносом строк): "...", '+'

      • длинные строки: """...""", '''-'''

Задачи