Лямбда-выражения обычно используются для инкапсуляции алгоритмов, чтобы они могли быть переданы другой функции. Тем не менее, можно выполнить лямбда сразу после определения:
[&](){ ...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);
Если последующее профилирование показывает значительные служебные издержки инициализации для объекта функции, вы можете переписать это как нормальная функция.
Запуск этих в этом порядке связан python
с Python 2:
brew install python
brew install python@2
Вы все еще можете использовать pip3
и python3
для Python 3.
Если вы хотите использовать системную установку 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
. Я просто отслеживаю ответ от @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
.
У меня уже установлен 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 по умолчанию, просто удалите эту строку, когда это необходимо.
Как установить версию 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: операция не разрешена
Надеюсь, что кто-то поможет !! :):)
Бинарный файл Python OSX (версия 2) находится в /usr/bin/python
, если вы используете which python
, он скажет вам, к какому решению разрешена команда python
. Как правило, происходит то, что третьи стороны переопределяют вещи в /usr/local/bin
(что имеет преимущество, по умолчанию по /usr/bin
). Чтобы исправить, вы можете либо запустить /usr/bin/python
напрямую, чтобы использовать 2.x, либо найти ошибочное переопределение (вероятно, в /usr/local/bin
или где-то еще в вашем PATH
)
python2
, чтобы вызывать Python 2 и python3
для вызова Python 3. Не могли бы вы дать мне некоторую информацию по этому направлению? Thnx.
– Viswanath
9 January 2016 в 22:53
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
в комбинации.