Скалярные переменные от Perl до Python? - PullRequest
1 голос
/ 18 августа 2011

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

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

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

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


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

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

Ответы [ 3 ]

3 голосов
/ 18 августа 2011

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

3 голосов
/ 18 августа 2011

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

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

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

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

1 голос
/ 18 августа 2011

Я думаю, что вы говорите о подпрограммах аргументов.Большая разница между perl и python с вызовами функций (в python они больше похожи на методы ...) заключается в том, что python может передавать разные вещи как один аргумент, как обычную операцию, и хотя perl может это делать, это редко.Поэтому, если вы вызываете «функцию» в python, вам нужно знать, что такое аргумент «есть».Является ли это «массивом» (списком, диктом или кортежем), или скалярной переменной, или строкой, или байтом.Если это строка или байт, тогда Python 3.x вводит много строгой типизации и проверки синтаксиса, что поначалу вызывает много головной боли;в то время как perl конвертирует между строками и байтами довольно легко, Python этого не делает (потому что python хочет принудительно устанавливать типы данных для строк Unicode).

В результате нужно ссылаться только на имя (без $ 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...