передача в Python параметра функции - PullRequest
2 голосов
/ 09 июля 2011

Мне не совсем понятна концепция передачи списков в качестве аргументов функций в python.

Я сам пытался исследовать это, не нашел адекватных ресурсов.

Я хочу реализовать вспомогательную функцию, которая возвращает количество случайных элементов из заданного списка.(в наборе запросов django)

Однако список может содержать несколько строк, и передача его по значению в функцию может привести к нехватке памяти, исправьте меня, если я ошибаюсь.

Как тогда передать список функции?

Ответы [ 4 ]

6 голосов
/ 09 июля 2011

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

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

3 голосов
/ 09 июля 2011

Нет.Передача списка в функцию не влияет на объем памяти.Python не копирует список.

3 голосов
/ 09 июля 2011

Все в Python является идентификатором.Для списков вы можете рассматривать стратегию оценки как «вызов по ссылке».На самом деле он называется "позвонить, поделившись" .

2 голосов
/ 09 июля 2011

Полное объяснение того, что Нед Бэтчелдер сказал:

http://docs.python.org/tutorial/classes.html#python-scopes-and-namespaces

...