{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Licence\n", "\n", "* Python je zadarmo (*free as in \"free beer\"*)\n", "* U Pythonu (a navázaných knihoven) jsou k dispozici zdrojové kódy (*free as in \"free speech\"*)\n", "* Licence je svobodná i v tom, že umožňuje využít Python v uzavřených komerčních projektech (není virální jako GPL)\n", "* Plné znění licence viz http://docs.python.org/3/license.html\n", "\n", "Z toho plyne několik důsledků:\n", "\n", "* Nižší náklady\n", "* Odpadají problémy s licenčním serverem (off-line použití, žádný boj mezi uživateli o volné licence)\n", "* Možnost sdílet kód s kýmkoliv (aniž by si musel opatřovat komerční SW)\n", "* Možnost zjistit, jak funguje konkrétní funkce přímo ze zdrojového kódu (ne černá skříňka jako v případě většiny komerčního SW)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Univerzální programovací jazyk s bohatou výbavou\n", "\n", "* objektové programování, funkcionální programování (tak trochu :)\n", "* výborně čitelná syntaxe\n", "* škálovatelnost: jednoduché skripty i složité aplikace s mnoha moduly (N.B.: jmenné prostory)\n", "* automatické jednotkové testování\n", "* snadná automatická dokumentace vlastního kódu\n", "* široká uživatelská základna, dostupná pomoc (google, http://stackoverflow.com)\n", "* Python je široce žádaná dovednost, na rozdíl od dedikovaných vědeckých jazyků (IDL, Matlab apod.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bohatá škála knihoven pro vědeckou práci\n", "\n", "* **[Numpy](http://numpy.org)** - rychlé maticové operace\n", "* **[Scipy](http://scipy.org)** - soubor všech různých vědeckých nástrojů\n", "* **[Matplotlib](http://matplotlib.org)** - interaktivní grafy, možnost výstupu v kvalitě pro publikace\n", "* **[SymPy](http://sympy.org)** - symbolické manipulace\n", "* **[Pandas](http://pandas.pydata.org/)** - analýza data\n", "* **[IPython](http://ipython.org/) + [Jupyter](https://jupyter.org/)** - interaktivní prostředí\n", "\n", "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Univerzální knihovna\n", "\n", "* Potřebujete získat data více či méně tradičním způsobem (z webu, z divného formátu souboru)?\n", "* Potřebujete zpracovávat komplikovaným způsobem text?\n", "* Potřebujete ke svému programu GUI?\n", "* Chcete mít webové rozhraní?\n", "* Chcete si poslat mail, až bude výpočet dokončen?\n", "* Potřebujete pustit ze svého programu jiný proces a komunikovat s ním?\n", "\n", "Na všechny tyto úkoly v Pythonu najdete knihovnu (často již ve standardní knihovně), zatímco ve specializovaném vědeckém SW (MATLAB, IDL) byste tento problém řešili obtížně.\n", "\n", "Viz databáze na [PyPi](https://pypi.python.org/pypi), která obsahuje přes 500 000 balíčků (různé kvality)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Vazba na další jazyky\n", "\n", "Kvůli rychlosti (a existenci knihoven):\n", "\n", "* C/C++ (Python C API, modul [ctypes](http://docs.python.org/2/library/ctypes.html), [Cython](http://cython.org/), SWIG, boost::python, cffi, ...)\n", "* FORTRAN ([f2py](http://www.f2py.com))\n", "\n", "Ale i:\n", "\n", "* MATLAB ([Matlab Engine for Python](http://www.mathworks.com/help/matlab/matlab-engine-for-python.html), [python-matlab-bridge](http://arokem.github.io/python-matlab-bridge/), [mlabwrap](https://github.com/aweinstein/mlabwrap))\n", "* IDL ([pIDLy](https://github.com/anthonyjsmith/pIDLy))\n", "* R ([RPy](https://pypi.python.org/pypi/rpy2))\n", "* Java ([Jython](http://jython.org))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nástroje\n", "\n", "* **[IPython](http://ipython.org)** - konzole\n", "* **[Jupyter](https://jupyter.org/)** - notebook, lab, console\n", "* **[Sphinx](http://sphinx-doc.org)** - vytváření všech možných druhů dokumentace (nejčastěji webová) ze zdrojových kódů\n", "* **[pip](http://www.pip-installer.org/)**, **[virtualenv](http://www.virtualenv.org/)** - správa balíčků a vlastních nezávislých prostředí" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nedostatky \n", "\n", "* Obtížné vytvořit aplikaci spustitelnou bez závislostí kdekoliv (\"EXE\").\n", "* Jazyk s dynamickým typováním -> omezená statická kontrola kódu.\n", "* Obecně pomalý oproti kompilovanému kódu (proto se používají knihovny v C).\n", "* Vícevláknové aplikace v CPythonu - z mnoha důvodů vlastní kód Pythonu běží vždy jen v jednom vláknu. Opravdu paralelně tak můžou běžet jen další knihovny volané z Pythonu.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Další odkazy\n", "### Pochvalné\n", "* http://www.stat.washington.edu/~hoytak/blog/whypython.html\n", "* http://vnoel.wordpress.com/2008/05/03/bye-matlab-hello-python-thanks-sage/\n", "* http://metarabbit.wordpress.com/2013/10/18/why-python-is-better-than-matlab-for-scientific-software/\n", "\n", "### Kritické\n", "* http://programmers.stackexchange.com/questions/15468/what-are-the-drawbacks-of-python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Vědecká Python komunita je velká a aktivní\n", "\n", "Na internetu najdete mnoho (obvykle open-source) Python nástrojů pro vědce. Navíc existují konference jako [(Euro)SciPy](http://conference.scipy.org/), [PyData](http://pydata.org/) aj.\n", "\n", "Podívejte se např. na nedávnou [úvodní přednášku](https://youtu.be/Wpz79_S9KmM?si=s2NpueMhaKBldL63&t=988) na [SciPy 2021](https://www.scipy2021.scipy.org) od [Dr Fernando Perez](https://www.linkedin.com/in/fperezorg/)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/jpeg": "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", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.lib.display import YouTubeVideo\n", "YouTubeVideo(\"Wpz79_S9KmM\", width=800, height=500, extras=[\"t=988\"])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 2 }