РОМАН СУЗИ
FAQ Python
ВОПРОС:
Python распространяется по лицензии программного обеспечения с открытым исходным кодом, а можно ли для него писать коммерческие программы?
ОТВЕТ:
Лицензия на Python не ограничивает его использования в каких-либо проектах. Если в вашем продукте использован Python, достаточно указать этот факт как в самом продукте, так и в сопровождающей его документации. Подробности в лицензии.
ВОПРОС:
Как превратить шестнадцатеричное представление IP-адреса в строку байт? В «точечное» представление?
ОТВЕТ:
import binascii
binascii.a2b_hex("E786AA80")
".".join(map(str, map(ord, binascii.a2b_hex("E786AA80"))))
Примечание: функция map(f, s) применяет функцию f к каждому элементу последовательности s.
ВОПРОС:
Как из Python узнать IP-адрес хоста?
ОТВЕТ:
import socket
socket.gethostbyname("www.host.ru")
ВОПРОС:
С помощью какой функции можно проверить существование файла или каталога?
ОТВЕТ:
import os
if os.access("/path/to/file", os.F_OK): # файл доступен
ВОПРОС:
Как убрать проценты из записи URL?
ОТВЕТ:
import urllib
urllib.unquote(«http://www.host.ru/%61%62%63»)
ВОПРОС:
Как в Python 2.x изменить кодировку текста в строке?
ОТВЕТ:
Например, перекодировку из KOI8-R в CP1251 можно сделать посредством Unicode:
unicode("ВОПРОС", "koi8-r").encode("cp1251")
ВОПРОС:
Почему получается такой результат?
>>> l = [[0]*2]*2
>>> l
[[0, 0], [0, 0]]
>>> l[0][0] = 1
>>> l
[[1, 0], [1, 0]]
|
ОТВЕТ:
Объекты списка, участвующие в репликации, копируются поверхностно. Таким образом, список l состоит из двух «ссылок» на один и тот же объект. Соответственно, изменение этого объекта дает такой неожиданный результат.
ВОПРОС:
Есть ли в Python тип данных массив?
ОТВЕТ:
Обычно в Python используется более гибкая встроенная структура данных – список. Если вам действительно нужны массивы, в стандартной библиотеке Python есть модуль array для работы с массивами чисел и символов. Для эффективной работы с массивами данных лучше использовать пакет Numeric Python. Его можно найти на http://numpy.sourceforge.net.
ВОПРОС:
В Python нет встроенного типа данных для множеств. Чем можно его заменить?
ОТВЕТ:
Множества можно легко эмулировать с помощью словарей:
# Инициализируем два множества(повторы будут автоматически убраны,
# так как одному ключу может соответствовать только одно значение)
set = {}
for e in [1,2,3,4,1,5,6,1,4]:set[e] = 1
set1 = {}
for e in [3,4,5,6]:set1[e] = 1
set.keys() # Список элементов множества
set.has_key(5) # Проверка принадлежности множеству
set.update(set1) # Объединение множеств (результат в set)
# Пересечение множеств:
set2 = {}
for e in set.keys():
if set1.has_key(e):
set2[e] = 1
Кроме того, класс множество с различными операциями можно легко запрограммировать. См., например, рецепт на http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/106469.
ВОПРОС:
Как вставить в строку значения переменных по аналогии с «$var» в Perl или sh?
ОТВЕТ:
Можно использовать операцию форматирования и словарь переменных vars() следующим образом (для иллюстрации команды выполнены в диалоговом режиме интерпретатора Python):
>>> a, b, c = 2, «text», 12.4
>>> print «»»a: %(a)05i, b: %(b)s, c: %(c)8.2f»»» % vars()
a: 00002, b: text, c: 12.40
|
Для строкового литерала были использованы утроенные кавычки: это позволяет использовать внутри строки одиночные кавычки и апострофы без дополнительного экранирования, а также задавать текст на нескольких строках.