функциональность nargin (от Matlab) в Python

1

Я пытаюсь перевести эти строки кода:

error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end

Я хочу перевести его на Python. Мне еще нужно найти эквивалент ошибки (хотя я мог бы просто выбросить здесь исключение?), Nargchk и nargin. Может ли кто-нибудь дать какие-либо данные о том, как можно перевести эту строку кода?

Благодарю вас!

  • 0
    Вы прочитали документацию MATLAB для функций, в которых вы не уверены? Попробуйте перевести функциональность, а не функции
  • 0
    Если вы считаете, что эквивалентом varargin является *args , то в nargin может быть переведен в len(args) .
Теги:

1 ответ

1
Лучший ответ

Ничего не эквивалентно nargin и nargchk потому что Python ему не нужен. Вы можете определить необязательные аргументы в Python непосредственно в определении функции. Так, например:

def myfunc(a=1, b=3):

В этом случае он позволяет вам устанавливать a и b как вы хотите, но если вы не определяете их, они будут использовать указанные вами значения по умолчанию. Так что, если вы звоните myfunc(), он устанавливает в a 1 и b до 3. Если вы звоните myfunc(5) он устанавливает на a 5 и b на 3. Вы можете также позвонить по названию, например, как myfunc(b=10), который устанавливает к a 1 и b до 10.

Если вы хотите, чтобы аргумент требовался, просто не назначайте им что-либо в определении функции. Таким образом, в следующем случае требуется в то время как a b не является обязательным:

def myfunc(a, b=3):

Если вы хотите, чтобы пользователь мог указать произвольное количество аргументов, вы можете использовать *args (где args может быть любой переменной, которую вы хотите. Таким образом:

def myfunc(a=1, b=3, *args):

Назначит первый аргумент a, второй аргумент b и любые остальные аргументы для args. Вы также можете сделать это с аргументами, определенными по имени, используя **kwargs (опять же, kwargs может быть любым именем переменной). Итак, это:

def myfunc(a=1, b=3, *args, **kwargs):

Делает то же самое, что и предыдущее, но любые аргументы, предоставленные именем, отличным от a и b будут kwargs в kwargs (который является словарем).

Поэтому вам не нужны nargin и nargchk, как правило, вы можете просто определить нужные вам аргументы и установить значения по умолчанию для дополнительных. Затем Python автоматически обработает проверку, чтобы убедиться, что требуемые параметры указаны, и не предусмотрено слишком много аргументов. Если вам нужно записать произвольное количество дополнительных аргументов, просто используйте *args и **kwargs и вы можете проверить, правильно ли len.

Для nargout нет эквивалента python, потому что python требует обработки всех выходов. Поэтому, если вы return a, b, в myfun, a и b должны быть обработаны оба. Вы можете просто игнорировать некоторые, но вы должны явно это сделать. Нет простого способа проверить, игнорируются ли эти аргументы. Так скажите, что у нас это в myfunc:

return a, b, c, d

И вы хотите только, вы можете просто сделать: a

a, *_ = myfunc()

Это ставит первое возвращаемое значение в a и выгружает остаток в переменной throw _ (так же, как *args фиксирует все остальные аргументы, *_ фиксирует все оставшиеся выходы). Для, скажем, a и c, вы можете сделать:

a, _, c, _ = myfunc()

Вы также можете индексировать непосредственно из вызова функции, чего не допускает MATLAB. Так что это также возможно. Итак, чтобы получить первый аргумент, вы можете сделать следующее:

a = myfunc()[0]

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

Что касается ошибок, да, вы просто raise соответствующее исключение. Python имеет разные типы ошибок для разных ситуаций. raise TypeError('blah') - правильный подход для неправильного количества аргументов, где blah - это сообщение, которое вы хотите.

  • 2
    Имея опыт работы с Matlab, но мало знаний Python, я нашел ваш ответ очень информативным, +1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню