Видео ролики бесплатно онлайн

Смотреть русское видео

Официальный сайт ruskorinfo 24/7/365

Смотреть видео бесплатно

bobry 29.10.2009 05:50

Pythonrlcompleter: дополнение на месте


Все кто хоть чуть-чуть знаком с python, знают как удобно бывает, время от времени, проверить работоспособность чего-нибудь в интерпритаторе. Лично у меня постоянно вылетают из головы названия методов/функций итп, посему частенько приходится писать чтонибудь а ля:
1
2
3
>>> import sys
>>> dir(sys)
<'__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions'>



И все еще достаточно терпимо, когда список, возвращаемый dir сравнительно небольшой, как выше, но когда он в два, а то и три, раза больше - найти нужный пункт становится проблемматично. На помощь, в таком случае, приходит модуль rlcompleter. Чтобы проиллюстрировать, как это работает приведу пример из официальной документации:
1
2
3
4
5
6
7
&gt;&gt;&gt; import rlcompleter
&gt;&gt;&gt; import readline
&gt;&gt;&gt; readline.parse_and_bind("tab: complete")
&gt;&gt;&gt; readline.
readline.__doc__ readline.get_line_buffer( readline.read_init_file(
readline.__file__ readline.insert_text( readline.set_completer(
readline.__name__ readline.parse_and_bind(



К слову, упомянутый выше модуль readline помимо дополнения, имеет еще одну полезную функцию - восстановление истории предыдущих сеансов работы с интерпритатором, в виде функций read_history_file и write_history_file.

Чтобы заставить интерпритатор автоматически загружать все эти вкусности делаем следующее:
создаем в домашнем каталоге файл .pystartup (вообще говоря, выбор местоположения и имени этого файла не критичен, так что файл может находиться где угодно и назывться как вам хочется)
добавляем в этот файл строчки:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# -*- coding: utf-8 -*-

# Если Вы планируете использовать переменные окружения или `~`,
# то нужно обернуть строку в os.path.expandvars или os.path.expanduser
#
# Замечание: в случае, если значение перменной - пустая строка, readline
# будет использовать стандартный путь: ~/.history
HISTORY_FILE = 'path/to/history/file'
# Количество элементов истории, которые будут сохраняться, или -1, если
# Вы хотите сохранять все элементы.
HISTORY_FILE_SIZE = 20


import atexit
import rlcompleter
import readline


def validate_file(history_file):
"Function checks if the filename for the history file is valid."
import os.path
return not history_file or os.path.exists(history_file)


def save_history_file():
"Function saves input history to HISTORY_FILE."
import readline
readline.write_history_file(HISTORY_FILE)


# Инициализируем дополнение по
readline.parse_and_bind("tab: complete")
# Устанавливаем размер файла истории
readline.set_history_length(HISTORY_FILE_SIZE)
# Загружаем историю из файла
if validate_file(HISTORY_FILE):
readline.read_history_file(HISTORY_FILE)

# Регистрируем функцию для сохранения истории, при выходе из интерпритатора
atexit.register(save_history_file)

# Удаляем импортированные модули
del atexit
del rlcompleter
del readline


устанавливаем в ~/.bashrc (.zshrc, .cshrc w\e) значение переменной PYTHONSTARTUP
1
export PYTHONSTARTUP ~/.pystartup


наслаждаемся готовым результатом :)
ЗЫ: хочется заранее разочаровать пользователей Windows, модуль , используемый в этом решении, имеет только Unix реализацию.


Тэги: python tips
+ 9 -
Похожие Поделиться

tipit 29.10.2009 08:34 #
+ 5 -
попробуйте ipython
bobry 29.10.2009 08:57 #
+ 0 -
как то до него все руки не дотянутся, если честно
nobodyzzz 29.10.2009 08:43 #
+ 0 -
хочется заранее разочаровать пользователей Windows, модуль , используемый в этом решении, имеет только Unix реализацию

а это что такое тогда? =)
bobry 29.10.2009 08:53 #
+ 0 -
я имел ввиду стандартную библиотеку, видимо неудачно выразился :)
snowemo 29.10.2009 09:24 #
+ 0 -
Питон замечательный язык. А его возможности для интроспекции просто поражают :)
Kane 29.10.2009 09:58 #
+ 2 -
Чтобы не расслаблялись. Тоже самое можно сделать и в консоли Ruby — irb с помощью библиотеки Wirble. Кроме того wirble умеет красиво подсвечивать вывод.
Для этого в файл ~/.irbrc нужно добавить строки

%w{rubygems wirble}.each do |lib|
begin
require lib
rescue LoadError => err
$stderr.puts "Couldn't load #{lib}: #{err}"
end
end

Wirble.init
Wirble.colorize
bobry 29.10.2009 10:12 #
+ 1 -
лаконичность поражает :)
Astral 29.10.2009 10:15 #
+ 1 -
Кстати, раз уж речь зашла о питоне не могу не вспомнить об IDE Spyder... построена по принципу Матлаба, но для питона. Ну и чтоб совсем не оффтопить там есть закладочка Doc для просмотра информации об объектах. И интерпретатор опять же под рукой :)

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн