Я переводил программу из perl в python, и я действительно не знаю, как перевести скалярную переменную в python. Моя проблема заключается в том, что я хочу вызвать первое значение, которое приходит на основе всех скалярных переменных, используемых в коде, скалярной переменной, когда упоминается, что это относится к присвоенному ему значению.
конкретная область была
my $min = $_[0]
my $max = $_[1]
Таким образом, этим двум переменным присваивалось значение перед рукой, теперь то, что я пытаюсь сделать, это вызвать мой min и позволить ему быть первым значением, которое приходит, тогда я хочу, чтобы мой max был вызван вторым значением, которое приходит. В принципе, пытаясь собрать информацию, которая была сгенерирована до min и max, и теперь приведу ее сюда. Не понимаю, как это сделать в python.
Дело в том, что у меня есть 3-5 различных значений, назначенных min, а также max, я не знаю, как ввести значение.
Я тот, кто поставил вопрос, но я вошел в систему, поскольку я думаю, что временный пользователь и его удалили. Благодарю!
Да, я уверен, что вы говорите о подпрограммах! В Python вы не получаете аргументы в одном списке "@_", как в Perl. вместо этого самый простой способ сделать это:
def func(arg1, arg2):
min = arg1
max = arg2
#do your stuff
Это примерно эквивалентно:
sub func{
my($min, $max) = @_;
#your stuff
}
Теперь, если вы должны получить свои аргументы как список или как кортеж (оба являются коллекциями), это должно делать:
def func(args):
min, max = args[0], args[1]
#your stuff
Вы можете заменить "args" на что угодно, оставаясь в правилах именования переменных Python.
Я рекомендую вам прочитать книгу, связанную с предыдущим ответом, и особенно о функциях, поскольку у Python есть множество возможностей, когда дело доходит до функций - позиционных и ключевых аргументов и т.д.
def func(min, max):
Это функционально эквивалентно, но стилистически лучше, потому что аргументы имеют более описательные имена, а также вы не используете ненужные локальные переменные.
Я не совсем уверен, что вы просите, но только FYI Python не прикрепляет типы к именам в скрипте. Тип - это объект, к которому относится имя. Таким образом, не существует различия "скалярной" переменной или "контекста списка" или чего-то подобного.
Так что, похоже, у вас есть список. ты можешь сделать:
mymin = mylist[0]
mymax = mylist[1]
Предполагая, что mylist
содержит ссылку на объект списка (в Python каждое имя является ссылкой).
min
и max
и будут маскировать их.
Я думаю, вы говорите о подпрограммах. Большой diff между perl и python с вызовами функций (в python они больше похожи на методы..) заключается в том, что python может передавать разные вещи как один аргумент, как обычную операцию, и, хотя perl может это сделать, это редко. Поэтому, если вы вызываете "функцию" в python, вам нужно знать, что аргумент "есть". Является ли это "массивом" (списком или типом или кортежем) или скалярной переменной или строкой или байтом. Если это строка или байт, то python 3.x вводит много строгой проверки типов и синтаксиса, из-за чего изначально возникает много головных болей; в то время как perl легко конвертирует строки и байты, python этого не делает (потому что python хочет форсировать типы данных для строк unicode).
Результатом является ссылка только на имя (no $ name, как в perl), и вручную отслеживать тип аргумента:
arg1 = 50
arg2 = 70
myPythonFunc(arg1, arg2)
....
def myPythonFunc(arg1, arg2):
if (arg1 > arg2):
return arg2
...
Если вам действительно суждено использовать массивы (есть больше преимуществ для использования отдельных аргументов из-за значений по умолчанию и названных аргументов и т.д.), Тогда:
args = [ 50, 70 ]
myPythonFunc(args)
....
def myPythonFunc(args):
if (args[0] > args[1]):
return args[1]
...
Прочтите это: http://diveintopython.net/native_data_types/lists.html
$_[0]
и$_[1]
являются (первыми двумя) элементами@_
, который является переменной массива, которая содержит аргументы функции. В Python вы просто объявляете параметры.