Я пытаюсь перевести эти строки кода:
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
Я хочу перевести его на Python. Мне еще нужно найти эквивалент ошибки (хотя я мог бы просто выбросить здесь исключение?), Nargchk и nargin. Может ли кто-нибудь дать какие-либо данные о том, как можно перевести эту строку кода?
Благодарю вас!
Ничего не эквивалентно 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
- это сообщение, которое вы хотите.
varargin
является*args
, то вnargin
может быть переведен вlen(args)
.