параметры: передается по ссылке против переданного по имени

1

какая разница между режимами передачи параметров, переданными по ссылке и переданными по имени, вот пример в Python, но предположим, что мы не используем никаких правил Python:

def P(x,y)
   global i
   y=1
   print(x)
   i=2
   print(x,y)
i=0
a = [7,11,13]
P(a[i],i)
P(i,a[i])

поэтому здесь передача параметров по ссылке даст результат:

  • 7
  • 7, 2
  • 2
  • 2, 1

Я сожалею заранее, если есть какая-либо ошибка.

Прохождение по имени говорит о том, что мы просто применяем текстовую подстановку, но я все еще запутался в том, как получать выходы, используя вызов по имени. Любая помощь?

вот что я получил, используя пропуски по имени:

  • 7
  • 11, 2
  • 2
  • 2, 1

Правильно ли это?

  • 1
    Я не понимаю, о чем ты спрашиваешь. Вы спрашиваете о том, как или почему все работает в Python?
  • 0
    @ Нет, на самом деле я просто использовал синтаксис Python, и я действительно хочу знать разницу между передачей по ссылке и передачей по имени.
Показать ещё 3 комментария
Теги:
parameter-passing
pass-by-reference

3 ответа

1
Лучший ответ

Они почти одинаковы. Но иногда они работают по-другому. Вот пример.

Effect of the call swap (x, y):
  temp := x;
  x := y;
  y := temp
Effect of the call swap (i, x[i]):
  temp := i;
  i := x[i];
  x[i] := temp
It does not work! For example:
Before call: i = 2, x[2] = 5
After call: i = 5, x[2] = 5, x[5] = 2

Подробное описание здесь scope-binding-papameter-passing-techniques. Проверьте этот шарфтер "Методы прохождения параметров", и вы найдете ответ.

5

В Python у вас есть объекты, которые являются изменяемыми или неизменяемыми. Все имена являются ссылками на объект. Другими словами, все является ссылкой. Вы не "проходите по значению" в Python. Проходит только по ссылке. Если вы попытаетесь изменить неизменяемый объект (например, число или строку), вы автоматически получаете новую копию. Вы можете вернуть это новое значение. Если вы передаете изменяемый объект (например, список или dict), объект будет изменен, вам не нужно его возвращать. Если вы не хотите, чтобы вы сначала скопировали свой объект. Для этого можно использовать синтаксис dict.copy() или list[:].

  • 0
    Пример Python был просто для иллюстрации проблемы, с которой я столкнулся, предположим, что нет правил Python?
  • 0
    Вы предполагаете, что используете другой язык?
Показать ещё 3 комментария
-2

Я не уверен, что это то, о чем вы просили, но я могу объяснить разницу между call-by-reference и call-by-name. Если вы вызываете функцию с параметром по ссылке, любая модификация этой переменной будет изменять ее в вызываемой функции. В качестве примера, если следующая функция получила х по ссылке:

def foo(x):
    x = x+1

def main():
    x = 5
    foo(x)
    print x

Это будет печатать 6. Если вы назвали его по имени, оно вместо этого напечатало бы.

Это имеет смысл?

  • 0
    Нет, печать 5 будет проходить по значению. не по имени.

Ещё вопросы

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