.. -*- rst -*- Conceptes clau de Python ======================== Objectes -------- - Les dades en Python es representen com *objectes*. - Tot objecte té *identificador*, *tipus*, estat (*atributs* o *valor*) i comportament (*mètodes*). - :ref:`Tipus predefinits ` i :ref:`altres tipus ` (classes). Identificador d'un objecte .......................... - L'identificador d'un objecte és un nombre natural. - Es pot consultar cridant la funció ``id()``. - L'operador ``is`` permet saber si dos objectes són el mateix. - Un cop creat un objecte, l'identificador no canvia. - `Identificador d'un objecte al Python Tutor `_ >>> a = "xyz" >>> id(a) 140464420688944 >>> b = "xyz" >>> id(b) 140464420688944 >>> c = "t" >>> id(c) 140464425362032 >>> a is b True >>> b is c False Tipus d'un objecte .................. - El tipus d'un objecte determina les operacions i els valors de l'objecte. - Es pot consultar cridant la funció ``type()``. - Un cop creat un objecte, el tipus no canvia. - `Tipus d'un objecte al Python Tutor `_ >>> a = 3 # a es refereix a l'enter 3 >>> type(a) >>> b = a >>> a = "abc" # a ara es refereix a l'string "abc" >>> type(a) >>> type(b) # Però l'objecte 3 segueix essent de tipus enter Valor d'un objecte .................. - El valor - pot canviar, si l'objecte és *mutable*, i - no canvia, si l'objecte és *immutable*. - Les funcions ``repr()`` i ``str()`` retornen una representació del valor de l'objecte com a *string*. - `Valor d'un objecte al Python Tutor `_ >>> a = 3.7 >>> str(a), repr(a) ('3.7', '3.7') >>> b = [1, 2, "abc"] >>> str(b), repr(b) ("[1, 2, 'abc']", "[1, 2, 'abc']") >>> c = 'xyz' >>> str(c), repr(c) ('xyz', "'xyz'") >>> # les llistes són mutables >>> l = [-3, 5] >>> str(l), id(l), type(l) ('[-3, 5]', 140063405847936, ) >>> l.append(-8) >>> str(l), id(l), type(l) ('[-3, 5, -8]', 140063405847936, ) Variables --------- - Una *variable* és un nom que fa referència (o es refereix) a un objecte. - Més d'una variable pot fer referència al mateix objecte. - Els elements dels objectes contenidors són referències a objectes. - Cal anar amb compte quan més d'una variable fa referència a un objecte mutable. - `Variables al Python Tutor `__ >>> l = [1, 2] >>> m = l >>> # l i m fan referència al mateix objecte >>> l is m True >>> n = [1, 2] >>> # l i n NO fan referència al mateix objecte >>> l is n False >>> # encara que siguin iguals >>> l == n True >>> # Compte amb els objectes mutables! >>> m [1, 2] >>> l[0] = -5 >>> # l i m fan referència al mateix objecte >>> m [-5, 2] Espais de noms -------------- - Un *espai de noms* (*namespace*) és una funció que donat un nom li assigna un objecte. - Exemples: *builtin names*, noms globals d'un mòdul, noms locals d'una funció, ... - La funció ``dir()`` permet consultar els noms d'un espai de noms. - No hi ha cap relació entre els noms de diferents espais de noms. - Els espais de noms es creen i es destrueixen en diferents moments de l'execució d'un programa. - L'espai global d'un mòdul es crea quan s'importa i es destrueix quan acaba el programa. - L'espai local d'una funció es crea quan es crida i es destrueix quan retorna. - `Espais de noms 1 al Python Tutor `__ - L\'*àmbit* de visibilitat és la regió del programa on es pot accedir a un espai de noms directament (sense qualificar). - Les referències a noms fora de l'àmbit local són només de lectura: l'escriptura d'un nom global crea un nom local. - ``import``, ``from`` i espais de noms. - `Espais de noms 2 al Python Tutor `__ .. L'exemple següent no funciona en Python Tutor .. literalinclude:: dir.txt :language: pycon