python - tensorflow - понимание оператора присваивания [duplicate]

Другим решением было бы поставить вызов: SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this) в конструктор MileageFeeCalculator следующим образом:

@Service
public class MileageFeeCalculator {

    @Autowired
    private MileageRateService rateService; // <--- will be autowired when constructor is called

    public MileageFeeCalculator() {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this)
    }

    public float mileageCharge(final int miles) {
        return (miles * rateService.ratePerMile()); 
    }
}
11
задан Hubro 28 May 2011 в 01:36
поделиться

2 ответа

Все значения в Python являются ссылками. Что вам нужно беспокоиться, если тип изменен. Основные числовые и строковые типы, а также tuple и frozenset неизменяемы; имена, привязанные к объекту одного из этих типов, могут быть отскакиваны, а не мутированы.

>>> t = 1, 2, 3
>>> t[1] = 42
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
17
ответ дан Ignacio Vazquez-Abrams 23 August 2018 в 01:28
поделиться
  • 1
    Для полноты следует отметить, что, хотя кортеж неизменен, любые изменяемые объекты, содержащиеся в нем, могут быть мутированы: t = 1, [2], 3 ; t[1].append(42) – Ned Deily 28 May 2011 в 01:58
  • 2
    Для полноты вы могли бы добавить, как я буду делать дублирование / клонирование значения? – Hubro 28 May 2011 в 02:19
  • 3
    Это зависит от типа. Для списков вы можете передать его в list() или нарезать все это (L[:]). Для множеств перейдите к set(). Для других типов см. Соответствующую документацию. Обратите внимание, что являются типами, которые фактически не могут быть клонированы вообще, просто потому, что они представляют внешний ресурс (например, socket). – Ignacio Vazquez-Abrams 28 May 2011 в 02:28
  • 4
    Существует также docs.python.org/library/copy.html#copy.copy – Jochen Ritzel 28 May 2011 в 04:33

Ответ выше правильный, но я возражаю против семантики «ссылки».

C-подобные языки рассматривают переменные как фиксированные ведра, в которые помещаются значения. Когда вы вызываете функцию, создается новый набор ведер, и значения копируются в них. Иногда, ведро является передачей по ссылке и фактически становится псевдонимом для ведра вызывающего.

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

Не имеет смысла упоминать «ссылки» в контексте Python, потому что на каждом другом языке, «Ссылка» подразумевает альтернативу «ценности». У Питона нет такой двойственности; он просто проходит и назначает объекты. Ничто не упоминается - .

Возможно, Nitpicky, но терминология не приводит к путанице для программистов на C ++, которые, например, слышать пропуски Python по ссылкам и не понимать, как переназначить имена вызывающих.

4
ответ дан Eevee 23 August 2018 в 01:28
поделиться
  • 1
    Python проходит по значению, но значения - это ссылки. – Ignacio Vazquez-Abrams 28 May 2011 в 07:08
  • 2
    Это глупо. Пропущенные значения не являются ссылками на объекты; они являются объектами. – Eevee 28 May 2011 в 07:12
  • 3
    Возможно, эта статья ( bit.ly/4Cjmn0 ) и связанный с ней вопрос SO ( bit.ly/3fRXW ) могут пролить свет на это. Я нахожу, что терминология, используемая в статье, помогает сделать вещи немного менее запутанными. Кроме того, пока я вижу вашу мысль о ссылках, я не согласен с этим. Метка или имя является ссылкой в ​​общем смысле слова. Когда я использую ваше имя, я ссылаюсь на на вас. – cledoux 28 May 2011 в 14:53
  • 4
    Я полностью согласен с тобой, и я иногда вхожу в драки об этом на SO;;) Если вы знаете, что такое C-ссылка, вы знаете, что Python не может их передать, поскольку это сделает все объекты изменчивыми. Я называю модус Python «вызовом aliasing», просто чтобы избежать таких вопросов, как этот. С другой стороны, полагая, что Python также передает объекты по ссылке: эта ссылка дается string (имя объекта на виртуальной машине) не числом (адрес памяти на реальном оборудовании ). Оба взгляда имеют смысл и зная, что они оба помогают больше, чем в одиночку :-) – Jochen Ritzel 28 May 2011 в 15:08
Другие вопросы по тегам:

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