Переключение между различными версиями Python в cmd [duplicate]

Лямбда-выражения обычно используются для инкапсуляции алгоритмов, чтобы они могли быть переданы другой функции. Тем не менее, можно выполнить лямбда сразу после определения:

[&](){ ...your code... }(); // immediately executed lambda expression

функционально эквивалентен

{ ...your code... } // simple code block

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

Аналогичным образом вы можете использовать лямбда-выражения для инициализации переменных на основе результата алгоритма ...

int a = []( int b ){ int r=1; while (b>0) r*=b--; return r; }(5); // 5!

Как способ разбиения вашей логики на программу, вы можете даже счесть полезным передать лямбда-выражение в качестве аргумента другому lambda expression ...

[&]( std::function algorithm ) // wrapper section
   {
   ...your wrapper code...
   algorithm();
   ...your wrapper code...
   }
([&]() // algorithm section
   {
   ...your algorithm code...
   });

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

auto algorithm = [&]( double x, double m, double b ) -> double
   {
   return m*x+b;
   };

int a=algorithm(1,2,3), b=algorithm(4,5,6);

Если последующее профилирование показывает значительные служебные издержки инициализации для объекта функции, вы можете переписать это как нормальная функция.

30
задан Viswanath 8 January 2016 в 21:18
поделиться

8 ответов

Запуск этих в этом порядке связан python с Python 2:

brew install python
brew install python@2

Вы все еще можете использовать pip3 и python3 для Python 3.

-2
ответ дан A T 15 August 2018 в 17:54
поделиться
  • 1
    Это не сработало. Вы должны явно экспортировать путь к python, кажется – Minisha 6 July 2018 в 07:41

Если вы хотите использовать системную установку Apple Python 2.7, имейте в виду, что она не совсем соответствует стандартам именования, изложенным в PEP 394 .

В частности, он включает необязательные символические ссылки с суффиксом 2.7, на которые вам говорят не полагаться, и не включает рекомендуемые символические ссылки с суффиксом 2, о которых вам говорят , если полагается.


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

$ cd <somewhere writable and in your PATH>
$ ln -s /usr/bin/python python2

Или псевдонимы в вашей конфигурации bash:

alias python2 python2.7

И вы можете сделать то же самое для Apple 2to3, easy_install и т. д., если они вам понадобятся.

Вы не должны пытаться помещать эти символические ссылки в /usr/bin и определенно не пытайтесь переименовать то, что уже есть, или изменить настройку distutils на что-то большее, чем PEP-совместимое. Эти файлы являются частью ОС и могут использоваться другими частями ОС, и ваши изменения могут быть перезаписаны даже при незначительном обновлении от 10.13.5 до 10.13.6 или что-то в этом роде, поэтому оставьте их в покое и обходите их как описано выше.


В качестве альтернативы вы могли бы:

  • Просто используйте python2.7 вместо python2 в командной строке и в ваших shbangs и так далее ,
  • Использовать виртуальные среды или среды конда. Глобальные python, python3, python2 и т. Д. Не имеют значения, когда вы всегда используете локальную активированную среду python.
  • Прекратите использование 2,7 Apple и вместо этого установите целое другие 2.7 вместе с ним, как и большинство других ответов. (Я не знаю, почему многие из них также предлагают установить второй 3.6.Это просто добавит еще больше путаницы , без пользы.)
0
ответ дан abarnert 15 August 2018 в 17:54
поделиться

Я просто отслеживаю ответ от @John Wilkey.

Мой псевдоним python, используемый для представления python2.7 (находится в /usr/bin). Однако по умолчанию для python_path предшествует /usr/local/bin для python3; поэтому при вводе python я не получил ни версию python.

Я попытался сделать ссылку в /usr/local/bin для python2:

ln -s /usr/bin/python /usr/local/bin/

Он работает при вызове python для python2.

0
ответ дан Chinh Sutran 15 August 2018 в 17:54
поделиться

У меня уже установлен python3 (через miniconda3) и вам нужно установить python2 рядом, в этом случае brew install python не будет устанавливать python2, поэтому вам понадобится brew install python@2.

Теперь псевдоним python2 относится к python2.x из /usr/bin/python

, а псевдоним python3 относится к python3.x из /Users/ishandutta2007/miniconda3/bin/python

, а псевдоним python по умолчанию относится к python3.

Теперь, чтобы использовать python как псевдоним для python2, я добавил следующее в .bashrc файл

alias python='/usr/bin/python'.

Чтобы вернуться к python3 по умолчанию, просто удалите эту строку, когда это необходимо.

0
ответ дан ishandutta2007 15 August 2018 в 17:54
поделиться

Как установить версию python на 2.7, если вы установили Anaconda3 (Python 3.6) в MacOS High Sierra 10.13.5

Отредактируйте файл .bash_profile в вашем домашнем каталоге.

vi $ HOME / .bash_profile

hash out the line # export PATH = "/ Users / YOURUSERNAME / anaconda3 / bin: $ PATH"

Закройте оболочку снова, вы должны см. 2.7 при запуске python.

Тогда, если вы хотите 3.6, вы можете просто раскомментировать свою строку anaconda3 в своем профиле bash.

Попытка отсоединить python закончится слезами в Mac OSX.

Вы будете что-то вроде этого

unlink: / usr / bin / python: операция не разрешена

Надеюсь, что кто-то поможет !! :):)

1
ответ дан Jace 15 August 2018 в 17:54
поделиться

Бинарный файл Python OSX (версия 2) находится в /usr/bin/python

, если вы используете which python, он скажет вам, к какому решению разрешена команда python. Как правило, происходит то, что третьи стороны переопределяют вещи в /usr/local/bin (что имеет преимущество, по умолчанию по /usr/bin). Чтобы исправить, вы можете либо запустить /usr/bin/python напрямую, чтобы использовать 2.x, либо найти ошибочное переопределение (вероятно, в /usr/local/bin или где-то еще в вашем PATH)

9
ответ дан John Wilkey 15 August 2018 в 17:54
поделиться
  • 1
    Но я ищу способ создать псевдоним, скажем python2, чтобы вызывать Python 2 и python3 для вызова Python 3. Не могли бы вы дать мне некоторую информацию по этому направлению? Thnx. – Viswanath 9 January 2016 в 22:53
  • 2
    Вот как создать псевдоним: stackoverflow.com/a/10986184/3345375 – jkdev 8 June 2016 в 05:56

IMHO, лучший способ использовать два разных python versions в OS X - через homebrew. После установки homebrew в OS X запустите команды ниже на вашем терминале.

brew update
brew install python
brew install python3

Теперь вы можете запустить Python 2.7, вызвав python2 или Python 3.5, вызвав python3. В дополнение к этому вы можете использовать virtualenv для управления различными версиями сред python.

Я никогда лично не использовал miniconda но из документации похоже, что она похожа на использование pip и virtualenv в комбинации.

53
ответ дан Michael 15 August 2018 в 17:54
поделиться
  • 1
    Для меня это работало очень хорошо, просто обновив OSX 10.12.6. – clifgray 15 September 2017 в 14:17
  • 2
    Ты легенда! огромное спасибо – Fandango68 3 December 2017 в 08:26
  • 3
    Q: Зачем устанавливать Python3, говорит ли мой MacOS? ... Один Xcode недостаточно для запуска Sierra? & Quot; – Fandango68 3 December 2017 в 08:27
  • 4
    как установить вещи для python2 сейчас? – Charlie Parker 8 December 2017 в 18:05
  • 5
    По-видимому, пакет homebrew python теперь имеет версию 3 по умолчанию! – lony 9 March 2018 в 13:44
0
ответ дан E.Hazledine 5 September 2018 в 17:00
поделиться
Другие вопросы по тегам:

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