Скалярные переменные от Perl до Python?

1

Я переводил программу из perl в python, и я действительно не знаю, как перевести скалярную переменную в python. Моя проблема заключается в том, что я хочу вызвать первое значение, которое приходит на основе всех скалярных переменных, используемых в коде, скалярной переменной, когда упоминается, что это относится к присвоенному ему значению.

конкретная область была

my $min = $_[0]
my $max = $_[1]

Таким образом, этим двум переменным присваивалось значение перед рукой, теперь то, что я пытаюсь сделать, это вызвать мой min и позволить ему быть первым значением, которое приходит, тогда я хочу, чтобы мой max был вызван вторым значением, которое приходит. В принципе, пытаясь собрать информацию, которая была сгенерирована до min и max, и теперь приведу ее сюда. Не понимаю, как это сделать в python.


Дело в том, что у меня есть 3-5 различных значений, назначенных min, а также max, я не знаю, как ввести значение.

Я тот, кто поставил вопрос, но я вошел в систему, поскольку я думаю, что временный пользователь и его удалили. Благодарю!

  • 2
    Можете ли вы объяснить, что вы имеете в виду под "позвони мне мин"? Обычно слово «вызов» относится к вызову подпрограммы или функции; не имеет смысла говорить о «вызове» значения. И обратите внимание, что $_[0] и $_[1] являются (первыми двумя) элементами @_ , который является переменной массива, которая содержит аргументы функции. В Python вы просто объявляете параметры.
  • 0
    @mit - вы можете зайти в свой аккаунт на Программистов: programmers.stackexchange.com/users/34534/mit и зарегистрировать аккаунт. Связать его с переполнением стека. Таким образом, мы можем объединить ваш аккаунт SO с этим вопросом. Благодарю.
Теги:
variables

3 ответа

3

Да, я уверен, что вы говорите о подпрограммах! В 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 есть множество возможностей, когда дело доходит до функций - позиционных и ключевых аргументов и т.д.

  • 0
    В вашем первом фрагменте кода я бы просто написал def func(min, max): Это функционально эквивалентно, но стилистически лучше, потому что аргументы имеют более описательные имена, а также вы не используете ненужные локальные переменные.
  • 0
    Да, ты прав. Даже я бы сделал это :) Я включил этот дополнительный шаг, чтобы прояснить, как Python обрабатывает аргументы функций, и то, что звучит очень естественно для нас, Pythonics, довольно неудобно в начале, если вы пришли прямо из школы Ларри Уолла. , Спасибо за комментарий :)
3

Я не совсем уверен, что вы просите, но только FYI Python не прикрепляет типы к именам в скрипте. Тип - это объект, к которому относится имя. Таким образом, не существует различия "скалярной" переменной или "контекста списка" или чего-то подобного.

Так что, похоже, у вас есть список. ты можешь сделать:

mymin = mylist[0]
mymax = mylist[1]

Предполагая, что mylist содержит ссылку на объект списка (в Python каждое имя является ссылкой).

  • 0
    Или вы можете назвать их «min» и «max» вместо «mymin» и «mymax».
  • 1
    @compman Эти имена не приветствуются в Python, поскольку они совпадают с глобальными функциями min и max и будут маскировать их.
Показать ещё 1 комментарий
1

Я думаю, вы говорите о подпрограммах. Большой 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

Ещё вопросы

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