Как насчет возвращаемых переменных?
Я особенно затрудняюсь при реализации хранимых процедур.
Представьте следующую хранимую процедуру (неверный синтаксис, я знаю, просто чтобы показать пример) :
int procGetIdCompanyByName(string companyName);
Он возвращает идентификатор компании, если он существует в конкретной таблице. В противном случае он возвращает -1. Как-то это волшебное число. Некоторые из рекомендаций, которые я читал до сих пор, говорят, что мне действительно нужно будет сделать что-то подобное:
int procGetIdCompanyByName(string companyName, bool existsCompany);
Кстати, что он должен вернуть, если компания не существует? Ok: он установит existesCompany как false, но также вернет -1.
Функция Antoher состоит в том, чтобы сделать две отдельные функции:
bool procCompanyExists(string companyName);
int procGetIdCompanyByName(string companyName);
So предварительным условием для второй хранимой процедуры является то, что компания существует.
Но я боюсь параллелизма, потому что в этой системе компания может быть создана другим пользователем.
Суть заключается в следующем: что вы думаете об использовании таких «волшебных чисел», которые относительно известны и безопасны, чтобы сказать, что что-то не увенчалось успехом или что-то не существует?
Все в порядке в вашей функции. Вы, кажется, потерялись с позиционными переменными и аргументами ключевых слов.
Позвольте мне объяснить: позиционные аргументы, a
и b
в вашем случае, являются обязательными (и могут иметь значения по умолчанию). Другие аргументы необязательны. Если вы хотите сделать аргумент обязательным или иметь значение по умолчанию, поставьте его перед * args и ** kwargs. Но помните, что вы не можете предоставить аргумент дважды:
def x(a = 1, b = 2, *args, **kwargs):
print a, b, args, kwargs
>>> x(3, 4, 5, b=6)
TypeError: x() got multiple values for keyword argument 'b'
Есть другой способ, но не настолько удобочитаемый, иметь значения по умолчанию для аргументов и не иметь позиционных аргументов:
def x(*args, **kwargs):
kwargs.updae({'a': 1, 'b': 2})
Ваша функция, которая анализирует аргументы, в порядке, хотя я не понимаю, почему вы пишете varargs
и keywords
в _
. Он передает аргументы прозрачно:
def x(a = 1, b = 2, *args, **kwargs):
print a, b, args, kwargs
def y(*args, **kwargs):
x(*args, **kwargs)
>>> y(3, 4, 5, 6)
3 4 (5, 6) {}
>>> y(3, 4, 5, b=6)
TypeError: x() got multiple values for keyword argument 'b'
Единственное, что я заметил, это то, что конструкция dict ((varList [i], v) for i, v in enumerate (argt))
, которую вы использовали дважды, на самом деле dict (zip (varList, argt))
.
Кроме этого, у меня есть только мета-критика: Ничего из вышеперечисленного не помещается в файл журнала.
Вместо того, чтобы просматривать журналы до