{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# Introduction to Python \n", "\n", "## [Packages](https://docs.python.org/3/tutorial/modules.html#packages) and [Modules](https://docs.python.org/3/tutorial/modules.html)\n", "\n", "#### Packages are a way of structuring Python’s module namespace by using “dotted module names”. For example, the module name A.B designates a submodule named B in a package named A. Just like the use of modules saves the authors of different modules from having to worry about each other’s global variable names, the use of dotted module names saves the authors of multi-module packages like NumPy or Pillow from having to worry about each other’s module names. \n", "\n", "#### A module is a file containing Python definitions and statements. The file name is the module name with the suffix .py appended. Within a module, the module’s name (as a string) is available as the value of the global variable __name__. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "__main__\n" ] } ], "source": [ "print(__name__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### We can check all the properties (attributes and methods) from an object using _dir()_" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['In',\n", " 'Out',\n", " '_',\n", " '_3',\n", " '_4',\n", " '__',\n", " '___',\n", " '__builtin__',\n", " '__builtins__',\n", " '__doc__',\n", " '__loader__',\n", " '__name__',\n", " '__package__',\n", " '__spec__',\n", " '__vsc_ipynb_file__',\n", " '_dh',\n", " '_i',\n", " '_i1',\n", " '_i2',\n", " '_i3',\n", " '_i4',\n", " '_i5',\n", " '_i6',\n", " '_i7',\n", " '_i8',\n", " '_ih',\n", " '_ii',\n", " '_iii',\n", " '_oh',\n", " 'exit',\n", " 'get_ipython',\n", " 'math',\n", " 'numpy',\n", " 'open',\n", " 'os',\n", " 'quit',\n", " 'random',\n", " 'string',\n", " 'sys']" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### We can also access all the Python builtins introspecting the __builtins__ variable " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['ArithmeticError',\n", " 'AssertionError',\n", " 'AttributeError',\n", " 'BaseException',\n", " 'BlockingIOError',\n", " 'BrokenPipeError',\n", " 'BufferError',\n", " 'BytesWarning',\n", " 'ChildProcessError',\n", " 'ConnectionAbortedError',\n", " 'ConnectionError',\n", " 'ConnectionRefusedError',\n", " 'ConnectionResetError',\n", " 'DeprecationWarning',\n", " 'EOFError',\n", " 'Ellipsis',\n", " 'EncodingWarning',\n", " 'EnvironmentError',\n", " 'Exception',\n", " 'False',\n", " 'FileExistsError',\n", " 'FileNotFoundError',\n", " 'FloatingPointError',\n", " 'FutureWarning',\n", " 'GeneratorExit',\n", " 'IOError',\n", " 'ImportError',\n", " 'ImportWarning',\n", " 'IndentationError',\n", " 'IndexError',\n", " 'InterruptedError',\n", " 'IsADirectoryError',\n", " 'KeyError',\n", " 'KeyboardInterrupt',\n", " 'LookupError',\n", " 'MemoryError',\n", " 'ModuleNotFoundError',\n", " 'NameError',\n", " 'None',\n", " 'NotADirectoryError',\n", " 'NotImplemented',\n", " 'NotImplementedError',\n", " 'OSError',\n", " 'OverflowError',\n", " 'PendingDeprecationWarning',\n", " 'PermissionError',\n", " 'ProcessLookupError',\n", " 'RecursionError',\n", " 'ReferenceError',\n", " 'ResourceWarning',\n", " 'RuntimeError',\n", " 'RuntimeWarning',\n", " 'StopAsyncIteration',\n", " 'StopIteration',\n", " 'SyntaxError',\n", " 'SyntaxWarning',\n", " 'SystemError',\n", " 'SystemExit',\n", " 'TabError',\n", " 'TimeoutError',\n", " 'True',\n", " 'TypeError',\n", " 'UnboundLocalError',\n", " 'UnicodeDecodeError',\n", " 'UnicodeEncodeError',\n", " 'UnicodeError',\n", " 'UnicodeTranslateError',\n", " 'UnicodeWarning',\n", " 'UserWarning',\n", " 'ValueError',\n", " 'Warning',\n", " 'WindowsError',\n", " 'ZeroDivisionError',\n", " '__IPYTHON__',\n", " '__build_class__',\n", " '__debug__',\n", " '__doc__',\n", " '__import__',\n", " '__loader__',\n", " '__name__',\n", " '__package__',\n", " '__spec__',\n", " 'abs',\n", " 'aiter',\n", " 'all',\n", " 'anext',\n", " 'any',\n", " 'ascii',\n", " 'bin',\n", " 'bool',\n", " 'breakpoint',\n", " 'bytearray',\n", " 'bytes',\n", " 'callable',\n", " 'chr',\n", " 'classmethod',\n", " 'compile',\n", " 'complex',\n", " 'copyright',\n", " 'credits',\n", " 'delattr',\n", " 'dict',\n", " 'dir',\n", " 'display',\n", " 'divmod',\n", " 'enumerate',\n", " 'eval',\n", " 'exec',\n", " 'execfile',\n", " 'filter',\n", " 'float',\n", " 'format',\n", " 'frozenset',\n", " 'get_ipython',\n", " 'getattr',\n", " 'globals',\n", " 'hasattr',\n", " 'hash',\n", " 'help',\n", " 'hex',\n", " 'id',\n", " 'input',\n", " 'int',\n", " 'isinstance',\n", " 'issubclass',\n", " 'iter',\n", " 'len',\n", " 'license',\n", " 'list',\n", " 'locals',\n", " 'map',\n", " 'max',\n", " 'memoryview',\n", " 'min',\n", " 'next',\n", " 'object',\n", " 'oct',\n", " 'open',\n", " 'ord',\n", " 'pow',\n", " 'print',\n", " 'property',\n", " 'range',\n", " 'repr',\n", " 'reversed',\n", " 'round',\n", " 'runfile',\n", " 'set',\n", " 'setattr',\n", " 'slice',\n", " 'sorted',\n", " 'staticmethod',\n", " 'str',\n", " 'sum',\n", " 'super',\n", " 'tuple',\n", " 'type',\n", " 'vars',\n", " 'zip']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir(__builtins__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## There are 4 main ways to import Packages and Modules \n", "### 1 - Importing the full package: " ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "deletable": true, "editable": true }, "outputs": [], "source": [ "import string\n", "import random\n", "import math\n", "import numpy" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['In',\n", " 'Out',\n", " '_',\n", " '_3',\n", " '_4',\n", " '_8',\n", " '_9',\n", " '__',\n", " '___',\n", " '__builtin__',\n", " '__builtins__',\n", " '__doc__',\n", " '__loader__',\n", " '__name__',\n", " '__package__',\n", " '__spec__',\n", " '__vsc_ipynb_file__',\n", " '_dh',\n", " '_i',\n", " '_i1',\n", " '_i10',\n", " '_i11',\n", " '_i2',\n", " '_i3',\n", " '_i4',\n", " '_i5',\n", " '_i6',\n", " '_i7',\n", " '_i8',\n", " '_i9',\n", " '_ih',\n", " '_ii',\n", " '_iii',\n", " '_oh',\n", " 'exit',\n", " 'get_ipython',\n", " 'math',\n", " 'numpy',\n", " 'open',\n", " 'os',\n", " 'quit',\n", " 'random',\n", " 'string',\n", " 'sys']" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "'!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "string.punctuation" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "0.12027350583467111" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random.random()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "3.141592653589793" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.pi" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "3.141592653589793" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numpy.pi" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numpy.pi == math.pi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### 2 - Importing all modules from a package: \n", "#### (although this is not recommended) " ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "deletable": true, "editable": true }, "outputs": [], "source": [ "from math import *\n", "from numpy import *" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "#dir()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "2.718281828459045" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "deletable": true, "editable": true }, "outputs": [], "source": [ "e = [1,2,3]" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 2, 3]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "deletable": true, "editable": true }, "outputs": [], "source": [ "from math import *" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "2.718281828459045" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e # The original variable was overwritten after the import" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3 - Importing specific modules from a package: " ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "deletable": true, "editable": true }, "outputs": [], "source": [ "from numpy import mean, pi" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "#dir()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "5.0" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean([1,2,3,4,5,6,7,8,9])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "3.141592653589793" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pi" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.pi == numpy.pi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### 4 - Importing a module and giving it a nickname: " ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "deletable": true, "editable": true }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "#dir()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot([1,2,3,4,5,6,4,3,2,1])" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'pandas' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn [34], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m pandas \u001b[39m#NameError: name 'pandas' is not defined\u001b[39;00m\n", "\u001b[1;31mNameError\u001b[0m: name 'pandas' is not defined" ] } ], "source": [ "pandas #NameError: name 'pandas' is not defined" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5 - (Creating and) Importing your own module: " ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This will be printed on import\n" ] } ], "source": [ "import utils" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['__builtins__',\n", " '__cached__',\n", " '__doc__',\n", " '__file__',\n", " '__loader__',\n", " '__name__',\n", " '__package__',\n", " '__spec__',\n", " 'cube',\n", " 'my_constant',\n", " 'other_property',\n", " 'square']" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir(utils)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "64" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "utils.cube(4)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'3.14159'" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "utils.my_constant" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### And, as a curiosity, there is an \"Easter egg\" in Python\"" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false, "deletable": true, "editable": true, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The Zen of Python, by Tim Peters\n", "\n", "Beautiful is better than ugly.\n", "Explicit is better than implicit.\n", "Simple is better than complex.\n", "Complex is better than complicated.\n", "Flat is better than nested.\n", "Sparse is better than dense.\n", "Readability counts.\n", "Special cases aren't special enough to break the rules.\n", "Although practicality beats purity.\n", "Errors should never pass silently.\n", "Unless explicitly silenced.\n", "In the face of ambiguity, refuse the temptation to guess.\n", "There should be one-- and preferably only one --obvious way to do it.\n", "Although that way may not be obvious at first unless you're Dutch.\n", "Now is better than never.\n", "Although never is often better than *right* now.\n", "If the implementation is hard to explain, it's a bad idea.\n", "If the implementation is easy to explain, it may be a good idea.\n", "Namespaces are one honking great idea -- let's do more of those!\n" ] } ], "source": [ "import this" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.8 64-bit (microsoft store)", "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.10.8" }, "vscode": { "interpreter": { "hash": "a3a5d4f9651fa550758ade4a473ec6b18daeb3d63067db8abd62b64f4493ea9c" } } }, "nbformat": 4, "nbformat_minor": 4 }