Поддержка баз данных в Cloud 9

Python использует систему, иногда называемую call-by-object . При передаче аргументов функции не копируется. Имена аргументов функции локально связаны внутри тела функции с теми же объектами, что и в вызове функции.

Это отличается от того, что большинство людей думает как «вызов по значению», потому что оно Скопируйте объекты. Но он также отличается от «вызова по ссылке», потому что ссылка на объект --- новое имя связано, но с тем же объектом. Это означает, что вы можете мутировать переданный объект, но переупорядочение имени внутри функции не имеет эффекта вне функции. Простой пример разницы:

>>> def func(x):
...     x[0] = 2 # Mutating the object affects the object outside the function
>>> myList = [1]
>>> func(myList)
>>> myList # myList has changed
[2]
>>> def func(x):
...     x = 2 # rebinding name has no effect outside the function
>>> myList = [1]
>>> func(myList)
>>> myList # myList is unaffected
[1]

. Мой простой способ мышления об этом состоит в том, что назначение нечетному имени --- то есть инструкции формы name = value --- совершенно разные от всего остального в Python. Только способ работать с именами, а не по значениям, это name = value. (Есть исключения из-за этого, например, fucking with globals() и т. Д., Но это опасная территория). В частности name = value отличается от obj.prop = value, obj[0] = value, obj += value и других аналогичных вещи, которые выглядят как присваивание, но фактически работают с объектами, а не с именами.

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

13
задан mithun_daa 16 November 2011 в 21:28
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: