Типы в Python
Материал из Xgu.ru
[править] Вопросы и ответы
[править] Как сгенерировать случайную строку?
''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(N))
[править] Длина строки eval в Питоне ограничена?
Да.
Точная длина строки неизвестна, но факт остаётся фактом. Кроме того, это один из немногих известных багов, где Питон гарантировано вылетает с Segmentation fault[1].
[править] Как рекурсивно обработать какую-то сложную структуру данных?
Как рекурсивно обработать сложную структуру данных и перевести её например всю в Unicode или наоборот из Unicode в строку?
def convert(data): if isinstance(data, basestring): return str(data) elif isinstance(data, collections.Mapping): return dict(map(convert, data.iteritems())) elif isinstance(data, collections.Iterable): return type(data)(map(convert, data)) else: return data
Источник: Fastest way to convert a dict's keys & values from `unicode` to `str`?
[править] Какая скорость доступа к элементу словаря в Python?
В принципе, считается что обычно O(1), но в худших случаях может быть и O(n).
Подробнее: [2].
[править] Можно ли в Python сделать статическую типизацию?
Можно, но жалко.
Если серьёзно, то можно. Есть очень интересный проект MyPy, который именно этим и занимается.
[править] Много ли в Python магических методов?
Даже один магический метод это уже много. А в питоне их значительно больше.
Полный список можно посмотреть тут:
[править] Как создавать постоянные (persistent) объекты в Python?
- pickle/cpickle
- marshal
- shelve
- json
- jsonpickle
- xml
- database (like SQLite)
Не такой популярный, но всё равно полезный метод:
- yserial (англ.)
Дополнительная информация:
[править] Как организовать случайный выбор слова из взвешенного словаря?
Если в словаре пары
слово => вес ,
то случайный выбор слова с вероятностью пропорциональной его весу можно сделать так (идея взята отсюда [3], только у них список пар, а у нас словарь):
#!/usr/bin/python import random dict = { 'a' : 50, 'b' : 50, 'c' : 100, } def wrandom(dict): total = sum(dict.values()) n = random.uniform(0, total) for key in sorted(dict.keys()): item = key if n < dict[key]: break n -= dict[key] return item for i in range(20000): print wrandom(dict)
Проверка:
$ python random-dict.py | sort | uniq -c 5098 a 5045 b 9857 c
[править] Можно ли использовать имена переменных в строковой интерполяции?
var1=10 var2=20 print "var1 = %(var1)s; var2 = %(var2)s" % locals()
[править] Как создать пары из списка?
t = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') zip(t[::2], t[1::2])
[править] Что будет если изменить аргумент функции, когда в нём находится значение по умолчанию?
Если это изменяемый объект (в частности, список, словарь), то он изменится.
>>> def function(data=[]): ... data.append(1) ... return data ... >>> function() [1] >>> function() [1, 1] >>> function() [1, 1, 1]
Подробнее: [4].
[править] Примечания
Информация о Python на xgu.ru | ||
---|---|---|
Реализации | Cython • Psyco • PyPy | |
Веб-фреймворки | Django • Flask • Zope | |
IDE | Pydev • NetBeans | |
Курсы | Python для сетевых инженеров | |
Другое | aalib • ctypes • gevent • mpmath • pjsua • Pandas • pyparsing • virtualenv • GMPY • IPython • Jinja2 • Python и Vim • Работа с модулями в Python • SWIG • Scapy • SciPy • Работа с датой и временем в Python • Python как shell • Web и Python • Алгоритмы, сложные структуры данных и дискретная математика в Python • Анализ кода Python • Интеграция Python с другими языками • Объекты и классы в Python • Оформление кода Python • Параллелизм и конкурентное исполнение в Python • Профайлинг в Python • Работа с базами данных в Python • Работа с операционной системой в Python • Работа с сетью в Python • Работа с текстами в Python • Работа с файлами в Python • Сравнение Python с другими языками • Тестирование в Python • Типы в Python • Элементы функционального программирования в Python • Элементы языка Python |