как импортируется модуль/функция и как узнать, какие ключевые слова можно передать встроенным функциям

мой первый вопрос: как на самом деле импортируется функция? у меня есть инструкция ниже, но функция show() находится не в bokeh.plotting, а в другой папке/модуле, то есть bokeh.io.showing, тогда как она импортируется с использованием bokeh.plotting?

from bokeh.plotting import figure, output_notebook, show 

Следующий вопрос: есть несколько ключевых слов, используемых в функции ниже:

p = figure(width = 400, height = 400)

как я могу узнать, какие ключевые слова можно использовать здесь? я знаю, что если я использую справочную функцию python, это может дать некоторое представление, но здесь это показано только ниже

figure(**kwargs)
    Create a new Figure for plotting.

ничего не сказано о ключевых словах, которые можно использовать в этой функции.

я открыл исходный код, и я получил ниже:

def __init__(self, *arg, **kw):

        if 'plot_width' in kw and 'width' in kw:
            raise ValueError("Figure called with both 'plot_width' and 'width' supplied, supply only one")
        if 'plot_height' in kw and 'height' in kw:
            raise ValueError("Figure called with both 'plot_height' and 'height' supplied, supply only one")
        if 'height' in kw:
            kw['plot_height'] = kw.pop('height')
        if 'width' in kw:
            kw['plot_width'] = kw.pop('width')

поэтому у меня есть идея, что можно использовать в этом (ширина/высота), но есть ли другой способ?


person Jeet Singh    schedule 25.05.2019    source источник


Ответы (2)


Сам факт того, что она принимает **kwargs, означает, что любые аргументы ключевого слова, которые вы передаете функции, являются действительными аргументами.

Обычно это делается для оболочек реализаций более низкого уровня. Преимущество этого заключается в том, что вам не нужно менять промежуточную функцию (ту, которую вы вызываете, например, bokeh.figure, которая внутренне вызывает функцию matplotlib).

Недостатком является то, что, поскольку он принимает любые аргументы ключевого слова, очень сложно поддерживать для него документацию, поскольку вам придется обновлять документацию при изменении реализации вашей промежуточной функции, а также при изменении реализации базовой функции.

Это очень распространенная практика во многих библиотеках по науке о данных (хотя вы обнаружите, что некоторые очень популярные библиотеки проходят кропотливый процесс ведения документации, например, matplotlib).

В общем, эти промежуточные функции обычно принимают (*args и **kwargs), поскольку фигура боке не принимает ее, вы не можете передать ей что-то вроде фигуры (1, 2, 3).

Если вы впервые сталкиваетесь с **что-то (распаковка списков и словарей в качестве аргументов), возможно, самое время поискать в Google, так как это очень распространенное явление.

Что касается приемлемых аргументов, вот что я нашел:

Аргументы ключевого слова: документация по рисунку

active_drag (Either ( Auto , String , Instance ( Drag ) )) : какой инструмент перетаскивания должен быть изначально активен. (по умолчанию: «авто»)

active_inspect (Either ( Auto , String , Instance ( Inspection ), Seq ( Instance ( Inspection )) )) : Какой инструмент перетаскивания должен быть изначально активен. (по умолчанию: «авто»)

active_scroll (Either ( Auto , String , Instance ( Scroll ) )) : какой инструмент прокрутки должен быть изначально активен. (по умолчанию: «авто»)

active_tap (Either ( Auto , String , Instance ( Tap ) )) : Какой инструмент Tap изначально должен быть активен. (по умолчанию: «авто»)

инструменты (либо ( строка , последовательность ( либо ( строка , экземпляр ( инструмент ) ) )) ): инструменты, с которых должен начинаться график. (по умолчанию: ‘pan,wheel_zoom,box_zoom,save,reset,help’)

tooltips (Either ( String , List ( Tuple ( String , String ) ) )) : необязательный аргумент для настройки всплывающих подсказок для рисунка. Этот аргумент принимает те же значения, что и свойство HoverTool.tooltips. Если в аргументе tools указан инструмент наведения, это значение переопределит значение всплывающих подсказок инструментов наведения. Если в аргументе tools не указан инструмент наведения, то передача всплывающих подсказок приведет к его созданию и добавлению. (по умолчанию: нет)

x_axis_label (String ): метка для оси X. (По умолчанию: '')

x_axis_location (Enum ( VerticalLocation )) : Где должна быть расположена ось X. (по умолчанию: «ниже»)

x_axis_type (Either ( Auto , Enum ( Enumeration (linear, log, datetime, mercator)) )) : тип оси x. (по умолчанию: «авто»)

x_minor_ticks (Either ( Auto , Int )) : количество второстепенных делений между соседними основными делениями по оси X. (по умолчанию: «авто»)

x_range (Any): Настройте x-диапазон графика. (по умолчанию: нет)

y_axis_label (String ): метка для оси Y. (По умолчанию: '')

y_axis_location (Enum ( HorizontalLocation )) : Где должна быть расположена ось Y. (по умолчанию: «левый»)

y_axis_type (Either ( Auto , Enum ( Enumeration (linear, log, datetime, mercator)) )) : Тип оси Y. (по умолчанию: «авто»)

y_minor_ticks (Either ( Auto , Int )) : количество второстепенных делений между соседними основными делениями оси Y. (по умолчанию: «авто»)

y_range (Any): Настройте x-диапазон графика. (по умолчанию: нет)

.

person piyush daga    schedule 25.05.2019
comment
Спасибо за ответ! нет, я не первый раз сталкиваюсь с **. Я очень хорошо знаю эту функцию. «Любой аргумент действителен» — вот что я хочу знать, какой аргумент? - person Jeet Singh; 25.05.2019

единственный способ, которым я узнал, чтобы получить ключевые слова, - это указать неправильное ключевое слово, например. Лен. Это даст нам AttributeError вместе с ожидаемыми значениями. Я запустил это:

p = figure(width = 400, height = 400, background_fill_color='black',len=1)

это дало мне следующее:

AttributeError: unexpected attribute 'len' to Figure, possible attributes are above, align, aspect_ratio, aspect_scale, background, background_fill_alpha, background_fill_color, below, border_
fill_alpha, border_fill_color, center, css_classes, disabled, extra_x_ranges, extra_y_ranges, frame_height, frame_width, height, height_policy, hidpi, inner_height, inner_width, js_event_callb
acks, js_property_callbacks, left, lod_factor, lod_interval, lod_threshold, lod_timeout, margin, match_aspect, max_height, max_width, min_border, min_border_bottom, min_border_left, min_border
_right, min_border_top, min_height, min_width, name, outer_height, outer_width, outline_line_alpha, outline_line_cap, outline_line_color, outline_line_dash, outline_line_dash_offset, outline_l
ine_join, outline_line_width, output_backend, plot_height, plot_width, renderers, right, sizing_mode, subscribed_events, tags, title, title_location, toolbar, toolbar_location, toolbar_sticky,
 visible, width, width_policy, x_range, x_scale, y_range or y_scale

Не уверен в моем другом вопросе

edit: я получил ответ и на другой вопрос. Оператор import проверяет файл init.py, и все объекты, присутствующие в этом файле, становятся доступными для использования. В этом случае функция show() уже была импортирована.

from ..io import show; show
person Jeet Singh    schedule 25.05.2019