Как отключить пейджер в git only для diff с опцией только для имени?

Переменные Python содержат указатели или ссылки на объекты. Все значения (даже целые) являются объектами, а присваивание изменяет переменную на другой объект. Он не сохраняет новое значение в переменной , он изменяет переменную для ссылки или указывает на другой объект. По этой причине многие люди говорят, что у Python нет «переменных», у него есть «имена», а операция = не «присваивает значение переменной», а скорее «связывает имя с объектом». "

В plusOne вы изменяете (или« мутируете ») содержимое в y, но никогда не меняете то, что относится к самому y. Он остается указывать на тот же список, который вы передали функции. Глобальная переменная y и локальная переменная y относятся к одному и тому же списку, поэтому изменения видны с использованием любой переменной. Поскольку вы изменили содержимое объекта, который был передан, на самом деле нет причин возвращать y (фактически, возвращение None - это то, что сам Python делает для таких операций, которые изменяют список «на месте» - значения возвращаются операциями, которые создают новые объекты, а не мутируют существующие).

В plusOne2 вы меняете локальную переменную a, чтобы ссылаться на другой целочисленный объект, 3. («Связывание имени a с объектом 3.») Глобальная переменная a не изменяется этим и продолжает указывать на 2.

Если вы не хотите изменить список, пройденный, сделать копию и изменить его. Затем ваша функция должна возвращать новый список, так как это одна из тех операций, которая создает новый объект, и новый объект будет потерян, если вы его не вернете. Вы можете сделать это как первую строку функции: x = x[:], например (как указывали другие). Или, если было бы полезно, чтобы функция называлась в любом случае, вы можете иметь вызывающего абонента в x[:], если он хочет сделать копию.

0
задан halfelf 17 January 2019 в 04:45
поделиться

1 ответ

Вы можете создать псевдоним:

[alias]
    ndiff = !git --no-pager diff --name-only

и затем запустить git ndiff вместо git diff --name-only. Или оставьте часть --no-pager вне псевдонима и запустите git ndiff --name-only, где ndiff означает no-pager-diff.

Или вместо git diff вы можете запустить git diff-tree или git diff-files или git diff-index. Эти три команды являются бэкэндами сантехнических команд , которые git diff использует (для большинства своих) различных режимов работы. Ни один из них не использует пейджер, и большинству из них требуются дополнительные опции (например, -r), которые будут использоваться таким же образом, как git diff их запускает, но они существуют и являются правильным способом написания скриптов [ 1115]. Для ваших собственных псевдонимов нет необходимости использовать сантехнические команды; Ваш собственный псевдоним может просто вызвать git --no-pager diff <options>.

0
ответ дан torek 17 January 2019 в 04:45
поделиться
Другие вопросы по тегам:

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