Установка параметра функции как глобальной переменной

Возможно с помощью mysqli_multi_query () .

Пример:

Ключ в том, что вы должны используйте mysqli_multi_query, если вы хотите выполнить несколько запросов в одном вызове. По соображениям безопасности mysqli_query не будет выполнять несколько запросов для предотвращения инъекций SQL.

Также следует учитывать поведение mysqli_store_result. Он возвращает FALSE, если запрос не имеет набора результатов (какие INSERT запросы не выполняются), поэтому вы также должны проверить mysqli_error, чтобы увидеть, что он возвращает пустую строку, означающую, что INSERT был успешным.

См. mysqli_multi_query mysqli_more_results mysqli_next_result mysqli_store_result

0
задан Alexandre Nixon 13 July 2018 в 10:39
поделиться

2 ответа

Если вы хотите назначить глобальную переменную verbose внутри вашей функции, вы можете сделать это:

def add(a,b, verbose_value):
    global verbose
    verbose = verbose_value
    return a + b

result = add(2,3, False)
print(verbose)
2
ответ дан khelwood 17 August 2018 в 13:07
поделиться
  • 1
    Ну, это было достаточно просто ... спасибо! – Alexandre Nixon 13 July 2018 в 10:55
  • 2
    Это влияет только на пространство имен текущего модуля и на самом деле является очень плохим решением. – bruno desthuilliers 13 July 2018 в 11:02
  • 3
    @brunodesthuilliers yes true, чего достаточно для моего случая, так как мне понадобится эта переменная только в этом модуле – Alexandre Nixon 13 July 2018 в 11:53

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

Вторая точка: в Python, «global» на самом деле означает «уровень модуля» - нет глобальных «уровней процесса» (обратите внимание, что это запроектированный выбор, основанный на первом пункте выше)

Третья точка: для вашего общего прецедента ( настройки приложения), «менее злые» способы состоят в том, чтобы все ваши модули использовали систему настроек, вместо того, чтобы «передать параметр функции, которая устанавливает ее как глобальную, поэтому вам не нужно ее передавать», ваши модули просто импортируйте настройки и прочитайте значение параметра (см. параметры django для примера).

Недостатки в том, что 1 / только ваш собственный код может использовать эти настройки, а 2 / делает ваш код зависимым от этих настроек (иногда это может быть PITA).

И, наконец, , учитывая «подробное» имя, я предполагаю, что вы хотите настроить уровень детализации вывода отладки / ошибки вашей программы. Правильный способ сделать это стандартным, переносным и хорошо развязанным способом (который устранит оба недостатка выше для этой функции) состоит в том, что использует пакет регистрации stdlib . Этот пакет предназначен для развязки использования журнала (в коде «library», используя logger.log(level, msg, ...) или один из его ярлыков) из конфигурации ведения журнала (которая является специфичной для приложения / установки). Сначала требуется немного обучения, но из опыта это хорошо проведенное время и на самом деле очень быстро экономит время .

1
ответ дан bruno desthuilliers 17 August 2018 в 13:07
поделиться
  • 1
    Спасибо @bruno правда, я хотел действительно простое решение этого. Как вы говорите, идея состоит в том, чтобы контролировать уровень детализации уже определенной модели, в которой уже есть много отпечатков. Наконец, я решил использовать полученный подробный параметр, чтобы определить функцию, «verboseprints» и т. Д. который печатает свои аргументы или не зависит от этого подробного параметра и устанавливает эту функцию как глобальную. Затем просто замените все отпечатки на «verboseprints». Вероятно, это нехорошее решение, но простое и практичное для этого случая. Спасибо, что предложили пакет регистрации. – Alexandre Nixon 13 July 2018 в 11:46
Другие вопросы по тегам:

Похожие вопросы: