Sie sind auf Seite 1von 199

Escribir su primer programa en Python

arearect.py
# The program calculates area of rectangle
l=8
b=5
a=l*b
print ("Area of rectangle is ", a)
seleccione Ejecutar> Mdulo Ejecutar en el men o simplemente presione F5. Usted recibir el
siguiente resultado:

Area of rectangle is 40

Elementos bsicos en un programa


literales
Un literal es un nmero o una cadena que aparece directamente en un
programa. Los siguientes son todos los literales en Python:

10
# Integer literal
10.50
# Floating-point literal
10.50j
# Imaginary literal
'Hello'
# String literal
"World!"
# String literal
'''Hello World!
It might rain today
# Triple-quoted string literal
Tomorrow is Sunday'''
En Python, puede usar tanto comillas simples y dobles para representar cadenas.
Las cadenas que se ejecutan a travs de mltiples lneas estn representados por
comillas triples.

Variables
Las variables se utilizan para almacenar datos en un programa. Para definir una
variable, se elige un nombre para la variable y, a continuacin, utiliza el signo
igual seguido de los datos que almacena. Las variables pueden ser letras,
nmeros o palabras. Por ejemplo,
l = 10
length = 10
length_rectangle = 10.0

k="Hello World!"
Se puede ver en los ejemplos anteriores la variable puede ser un solo carcter o
una palabra o palabras unidas por guiones bajos. En funcin de los datos
almacenados en una variable, que se ha denominado como nmero entero, punto
flotante, cadena, booleano, y la lista o tuplas. Al igual que en los ejemplos
anteriores, las variables l y la duracin son variables enteras, length_rectangle es
una variable de punto flotante, y k es una variable de cadena. Los siguientes son
ejemplos de boolean, lista, y las variables de tupla:
a=True # Boolean variable
b=[2,9,4] # List variable
c=('apple', 'mango', 'banana') # tuple variable
A tuple in python language refers to an ordered, immutable (non
changeable) set of
values of any data type.

Keywords - Palabras clave


Python tiene 30 palabras clave, que son identificadores que Python se reserva
para uso especial. Palabras clave contienen slo letras minsculas. No puede
utilizar palabras clave como identificadores regulares. Las siguientes son las
palabras clave de Python:
and assert break class continue def del elif else except exec finally for
from global if import in is lambda

Comments
# This program computes area of rectangle
a=b+c # values of b and c are added and stored in a

Printing
Para los mensajes de impresin y los resultados de los clculos, la funcin print
() se utiliza con la siguiente sintaxis,

print(["message"][variable list])
donde el message es la cadena de texto encerrada entre comillas simples o
dobles. La lista de variables puede ser una o ms variables que contienen el
resultado de clculo, como se muestra en estos ejemplos:

print
print
print
print

("Hello World!")
(10)
(l)
("Length is ",l)

Puede mostrar un mensaje de texto, valores constantes, y los valores de


variables a travs de la sentencia print, como se muestra en los ejemplos
anteriores.
Despus de imprimir el mensaje / valor deseado, la funcin print() tambin
imprime el carcter de nueva lnea, es decir, el cursor se desplaza a la siguiente
lnea despus de mostrar el mensaje / valor requerido. Como resultado, el
mensaje / valor visualizado a travs de la siguiente funcion print() aparece la
funcin en la lnea siguiente. Para suprimir la impresin del carcter de nueva
lnea, poner fin a la lnea de impresin con end = " " seguido de una coma (,)
despus de la expresin para que la funcin print() imprime un espacio extra en
lugar de un carcter de nueva lnea.
Por ejemplo, las cadenas mostradas a travs de los dos funciones siguientes de
print() aparecern en la misma lnea con un espacio entre ellos:

print("Hello World!", end=" )


print('It might rain today')
Tambin puede concatenar cadenas en la salida mediante el uso de un signo ms
(+) o una coma (,) entre cadenas. Por ejemplo, la funcin print() siguiente
mostrar las dos cadenas en la misma lnea, separadas por un espacio:

print('Hello World!', 'It might rain today')


La siguiente declaracin se funde los dos mensajes y las muestra sin
ningn espacio entre ellos:

print('Hello World!'+'It might rain today')


Tambin puede concatenar cadenas en la salida mediante el uso de un signo ms
(+) o una coma (,) entre cadenas. Por ejemplo, la funcin print() siguiente
mostrar las dos cadenas en la misma lnea, separadas por un espacio:

print('Hello World!', 'It might rain today')


La siguiente declaracin se funde los dos mensajes y las muestra sin ningn
espacio entre ellos:

print('Hello World!'+'It might rain today')

Con el fin de obtener un espacio entre las cadenas, hay que concatenar un
espacio en blanco entre las cadenas:

print('Hello World!'+ ' '+ 'It might rain today')


Tambin puede utilizar una coma para la visualizacin de los
valores de las variables, junto con las cadenas:
print ("Length is ", l, " and Breadth is ", b)
Suponiendo que los valores de las variables L y B son 8 y 5,
respectivamente, la declaracin anterior se mostrar el
siguiente resultado:
Length is 8 and Breadth is 5
Tambin puede utilizar cdigos de formato (%) para la
sustitucin de los valores en las variables en el lugar
deseado en el mensaje:
print ("Length is %d and Breadth is %d" %(l,b))
donde %d es un cdigo de formato que indica un nmero entero
tiene que ser sustituido en su lugar. Es decir, los valores
de las variables L y B sustituirn a los cdigos de formato
respectivos.
Note
Si el tipo de datos de los valores de las variables no
coincide con los cdigos de formato, conversin automtica se
lleva a cabo.
La lista de los cdigos de formato es como se muestra en la
Tabla 1.1. Usted va a aprender a aplicar los cdigos de
formato en el prximo captulo.

El programa siguiente muestra cmo utilizar la funcin


print() para la visualizacin de salida diferente:
printex.py
print (10)
print('Hello World! \
It might rain today. \
Tomorrow is Sunday.')
print('''Hello World!
It might rain today.
Tomorrow is Sunday.''')
Output:
10
Hello World! It might rain today. Tomorrow is Sunday.
Hello World!
It might rain today.
Tomorrow is Sunday.

Chapter 2. Getting Wet in Python


Captulo 2. Mojarse en Python

En este captulo se tratan los siguientes temas:


Realizar operaciones aritmticas
Usar secuencias de escape
Viendo Valores octales y hexa
Realizar operaciones bit a bit
El uso de nmeros complejos
Toma de decisiones: si ... Else
Usando Loops: while y for Loops
Romper y continua de un bucle
Uso de operadores: Operadores lgicos y operadores de membresa

Performing Arithmetic Operations


Realizar operaciones aritmticas
Los operadores aritmticos juegan un papel importante en la
programacin, y es esencial para entender el uso de los diferentes
operadores para la programacin eficiente.
Python proporciona varios operadores aritmticos para realizar
diferentes operaciones en datos numricos. La lista de operadores
aritmticos utilizados en Python se muestra en la Tabla 2.1.

La Tabla 2.1 muestra los operadores aritmticos habituales, tales


como suma, resta y multiplicacin. Los operadores de multiplicacin
y divisin tienen mayor prioridad que los operadores de suma y
resta. El operador de mdulo devuelve el resto de la operacin de
divisin. Cul es la diferencia entre el operador de divisin y el
operador de divisin truncar? Vamos a ver.

Division Operator

El operador de divisin truncar (//), tambin conocida como la


divisin de piso, trunca el resultado a un entero (ignorando el

resto) y funciona tanto con nmeros enteros y nmeros de punto


flotante. El operador de divisin verdadero (/) tambin se trunca el
resultado a un entero si los operandos son enteros. Tambin
significa que el operador de divisin real devuelve un resultado de
punto flotante si cualquier operando es un nmero de coma flotante.

Note
Cuando ambos operandos son enteros, el operador / se comporta
como //
El siguiente programa utiliza el verdadero operador de divisin para
calcular el rea de un tringulo.
areatriangle.py
b=17
h=13
a=1.0/2.0*b*h
print ("Area of triangle is", a)
print ("Base= %d, Height is %d, Area of triangle is %f" %(b,h,a))
Output:
Area of triangle is 110.5
Base= 17, Height is 13, Area of triangle is 110.500000

En este programa, que est utilizando el verdadero operador de


divisin, /, que devuelve un entero si ambos operandos son enteros.
Para obtener el resultado correcto, 1/2 se convierte en un flotador,
1.0/2.0, para que el resultado del operador de divisin verdad, va a
ser un flotador.
Una cosa a observar en la salida del programa es que la directiva %f
devuelve el valor flotante de hasta seis cifras decimales. Puede
ser redondeado a 2 o 3 cifras decimales? Vamos a ver.
El siguiente programa calcula el promedio de los tres valores y
muestra el resultado se redondea al nmero deseado de cifras
decimales:

average1.py
p=q=r=10
a=1.0/3.0*(p+q+r)
print ("Average of three variables is", a)
print ("Average of three variables is %.2f" %a)
print ("Average of three variables is %d" %a)

Output:
Average of three variables is 10.0

Average of three variables is 10.00


Average of three variables is 10
En este programa, se ve que el resultado de punto flotante se
redondea a 2 lugares mediante el uso de %.2f. Adems, se ve que el
valor de punto flotante se trunca a un valor decimal cuando se
aplica % e cdigo de formato a la misma.
Mientras se utiliza el operador de divisin verdadera, /, es
necesario asegurarse de que alguno de los operandos es un nmero de
punto flotante para evitar que un entero truncar correctos. Mientras
se utiliza el operador de divisin cierto, es mejor comenzar el
archivo fuente con esta declaracin:

from _ _future_ _ import division


Esta declaracin se asegura de que el operador de divisin real de
trabajo sin truncamiento en operandos de cualquier tipo.
Bsicamente, la declaracin de __ future__ asegura que el guin
utiliza el operador de divisin de punto flotante de nuevo estilo.

average2.py
from __future__ import division
p=q=r=10
a=(p+q+r)/3
print ("Average of three variables is", a)
Output:
Average of three variables is 10.0

Exponentiation
Para aplicar la exponenciacin, utilice dos asteriscos: **. Por
ejemplo, a ** b signifca ab .
Usted recibe una excepcin si a es menor que cero y b es un valor de
punto flotante con una parte fraccional no nulo.Tambin puede
utilizar la funcin incorporada pow() para aplicar exponenciacin.
Por ejemplo, pow(a, b) es el mismo que a**b.
Usted aprender acerca de la gestin de excepciones en el Captulo
6, "Administracin de archivos."
Vamos a escribir un programa para calcular el volumen de una esfera.
La frmula es 4/3 * pi * r3, donde se sabe que el valor de radio r
debe ser 3.

volsphere.py

from __future__ import division


r=3
pi=22/7
v=4/3*pi*pow(r,3)
print ("Volume of sphere is %.2f" %v)
Output:
Volume of sphere is 113.14
En este programa, se puede ver que r3 se calcula a travs de
pow(). La expresin pow(r, 3) tambin puede ser sustituida por
r**3, ya que ambos hacen la misma tarea.
Hay alguna manera de obtener el valor de Pi en lugar de calcular
manualmente como 22/7?
S, el mdulo de matemticas, adems de otras funciones importantes,
tambin proporciona el valor de pi para usar directamente en
expresiones aritmticas. Usted aprender acerca del mdulo de
matemticas en detalle en el Captulo 4, "Funciones y Mdulos."
Por ahora, vamos a ver cmo el valor de pi se puede utilizar a
travs del mdulo de matemticas. Modificar el programa anterior
para utilizar el valor de pi proporcionada por el mdulo de
matemticas.

from __future__ import division


from math import pi
r=3
v=4/3*pi*pow(r,3)
print ("Volume of sphere is %.2f" %v)
La sentencia de import math pi importa el valor de pi del
mdulo de matemticas a ser utilizado en la expresin
aritmtica. El valor representado ser 3.1415926535897931

Multiple Assignment Statement

Sentencia de asignacin mltiple


La sentencia de asignacin bsica puede hacer ms que asignar el
resultado de una sola expresin a una nica variable. Tambin puede
asignar mltiples variables de una sola vez. La regla es que los
lados izquierdo y derecho deben tener el mismo nmero de elementos y
los valores sern asignados sobre una base de uno a uno.

Examples
p,q,r = 10,20,30
sum, avg = p+q+r,(p+q+r)/3
Los valores en el lado derecho del operador de asignacin se
asignarn sobre una base de uno a uno; por ejemplo, 10 se le
asignar a la variable p, 20 se le asignar a la variable q, y as
sucesivamente.
Del mismo modo, en el segundo ejemplo, el resultado de la expresin
p + q + r se asignar a la variable de suma, y el resultado de la
expresin (p + q + r) / 3 se asigna a la variable promedio.

Using Escape Sequences


Usar secuencias de escape
Las secuencias de escape son caracteres especiales que representan
caracteres no imprimibles como tabulaciones, saltos de lnea, y tal.
Estos caracteres especiales comienzan con una barra invertida.
Cuando Python ve una barra invertida, interpreta el siguiente
carcter con un significado especial. El cuadro 2.2 muestra una
lista de los caracteres de escape que se pueden usar en los scripts
de Python.

Note
En una cadena entre comillas dobles, un carcter de escape se interpreta; en
una cadena entre comillas simples, se conserva un carcter de escape.

El siguiente programa muestra el uso de secuencias de escape en un


programa:

escapeseq.py
print('Hello World\nIt\'s hot today')
print('Festival Discount\b\b\b\b\b\b\b\b\b Offer')
print("Isn't it?")
print('Isn\'t it?')
print("He said: \"I am going \"")
print('\\Text enclosed in back slashes\\')
print ('Bell sound \a')
print('Name\tEmail Address\tContact Number')

La salida se muestra en la Figura 2.1.

En la salida se ve que el texto Hello World y hace calor hoy


aparecer en dos por cuestiones de carcter de nueva lnea entre
diferentes.
El texto Festival descuento aparece como Festival Offerunt porque
despus de visualizar el trmino Festival de descuento cuando el
cursor estaba de pie despus de la t carcter de la palabra
descuento, el cursor se desplaza hacia atrs nueve caracteres donde
el D es.
At the location of character D, the text Offer is displayed,
overwriting the first five characters of the word Discount and
leaving unt to appear after Offer. Displaying of the text Isn't it
twice reveals that the single quote can be displayed either when
enclosed within double quotes or when preceded by \ when enclosed
within single quotes. Similarly, you use \ to display the text I am
going enclosed within double quotes. Similarly, Text enclosed in
back slashes appears with \ on either side because of \\. The \a
escape character makes a bell sound, and \t makes Name, Email
Address, and Contact Number appear at the tab stops.

Note

El IDLE (Python GUI) no reconoce algunos caracteres de


secuencia de escape, incluyendo \a y \b. Por lo tanto, cuando
se ejecuta el programa anterior en IDLE en lugar del smbolo
del sistema, no hay sonido de campana aparecer y obtendr la
siguiente salida:
Hello World
It's hot today
Festival Discount Offer
Isn' t it?
Isn' t it?
He said: "I am going "
\Text enclosed in back slashes\
Bell sound
Name
Email Address
Contact Number

Se puede ver que \b y \a aparecer como algunos smbolos poco


comunes.

Finding a Data Type - Encontrar un tipo de datos.


Para encontrar el tipo de datos del objeto especificado, se utiliza la funcion
type(), que devuelve el tipo de datos del objeto que se le pasa.

Syntax:
type(x)
donde x es el objeto cuyo tipo de datos se devolvern. La funcin acepta todo
tipo de parmetros, tales como nmeros enteros, cadenas, listas, diccionarios,
tuplas, funciones, clases y mdulos.

Examples:
type(10)
type('Hello')
El programa siguiente muestra los tipos de datos enteros,
flotadores, cadenas, booleanos, y as sucesivamente.

typeexample.py
a=10
b=15.5
c="Hello"
d=[2,9,4]
e=('apple', 'mango', 'banana')
f=True
print (type(a))
print (type(b))
print (type(c))
print (type(d))
print (type(e))
print (type(f))
Output:
<class 'int' >
<class 'float'>
<class 'str' >
<class 'list' >
<class 'tuple'>
<class 'bool' >

Este programa inicializa las variables a, b, c, d, e, y


de datos enteros, punto flotante, cadena, lista, tupla,
respectivamente. A partir de entonces, el tipo de datos
variables se determina y se visualiza usando la funcin

f para tipos
y Booleno,
de estas
type().

Displaying Octal and Hexa Values


Viendo Valores octales y hexa
Para asignar un valor octal a una variable, el nmero debe estar precedido por
0o. Del mismo modo, si un nmero est precedido por 0x, se considera un valor
hexa. El programa siguiente muestra la conversin de un valor decimal en octal y
hexadecimal, y viceversa.

octhex.py
a=0o25
b=0x1af
print ('Value of a in decimal is', a)
c=19
print ('19 in octal is %o and in hex is %x' %(c,c))
d=oct(c)
e=hex(c)
print ('19 in octal is', d, 'and in hexa is', e)
Output:
Value of a in decimal is 21
19 in octal is 23 and in hex is 13
19 in octal is 0o23 and in hexa is 0x13
En este programa, las variables a y b se les asignan valores octales
y hexa, respectivamente. El valor octal se convierte y se muestra
como un decimal. Del mismo modo, el valor decimal 19 se convierte en
octal y hexa y visualiza usando las directivas %O y % x,
respectivamente. Adems, mediante el uso de las funciones oct() y
hex(), el nmero 19 se convierte a octal y hexadecimal,
respectivamente.

Getting Data - Obtencin de datos


Para obtener la entrada del usuario, se utiliza el mtodo input. Se
le pide al usuario que introduzca los datos y lee una lnea de la
entrada estndar y lo devuelve como una cadena que puede ser
consecuencia asigna a una variable.

Syntax:

variable=input ('Message')
Los datos introducidos por el usuario se asigna a la variable en
formato de cadena. Si desea que los datos en otro formato (entero,
flotante, etc), se tiene que convertir de forma explcita. Antes de
ver la conversin explcita, vamos a hablar acerca de la conversin
automtica (coercin) en Python.

Coercion
En Python, si usted hace algunas operaciones aritmticas sobre los
operandos del mismo tipo de datos, no hay conversin automtica o la
coaccin se lleva a cabo. Cuando se calculan los operandos de
diferentes tipos de datos, la coaccin tiene lugar.
Python convierte el operando con el tipo "ms pequeo" para el tipo
"ms grande". Por ejemplo, si alguno de los operandos es un nmero
flotante, entonces el otro operando es tambin convierte a float
punto. Si el argumento es un nmero complejo, el otro tambin se
convierte en complejo.
Del mismo modo, si bien es de tipo long, el otro es convertido a
largo. Un operando entero se convierte a float mediante la adicin
de 0,0 a la misma.
Un tipo no complejo se convierte en un nmero complejo mediante la
adicin de un cero componente imaginario, 0j, a ella.
Para la conversin explcita, las funciones que se le con frecuencia
utilizando son int (), float (), y str (). La funcin que se
necesita para el siguiente programa es una funcin int().

Converting Explicitly into integer Type


Convirtiendo explcitamente en Tipo entero
Para convertir la cadena numrica o especificado en un tipo de datos
entero, utilice la funcin int().

int()

Los datos que se van a convertir en el nmero entero se pasa como


argumento a la funcin int().

Syntax:
int([x[, base]])
La objeto x especificado se convierte en formato entero. El

parmetro de base
26 y se refiere a
de la base es 10.
cae. Por ejemplo,

puede ser cualquier valor en el intervalo de 2 a


la base para la conversin. El valor por defecto
Si el argumento contiene una parte fraccional, se
int (7.5) devolver 7.

El siguiente programa calcula y muestra el rea de un rectngulo. El


rea de un rectngulo es la multiplicacin de la longitud y anchura,
y sus valores sern suministrados por el usuario.
Los valores suministrados por el usuario sern a travs de la
funcin de input(), que devuelve los valores proporcionados en
formato de cadena y por lo tanto se convierte en el tipo de datos
entero usando la funcin int().

arearectinput.py
l=input("Enter length: ")
b=input("Enter width: ")
a=int(l)*int(b)
print ("Area of rectangle is",a)
Output:
Enter length: 9
Enter width: 5
Area of rectangle is 45
Los valores suministrados por el usuario sern a travs de la
funcin de input(), que devuelve los valores proporcionados en
formato de cadena y por lo tanto se convierte en el tipo de datos
entero usando la funcin int().
Los valores introducidos por el usuario sern asignados a las
variables L y B, respectivamente. Como se dijo anteriormente, el
mtodo de entrada devuelve datos en formato de cadena, por lo tanto,
los valores en las variables L y B se convierte en primer lugar de
la cadena en formato entero a travs de la funcin int() antes de
que se utilizan en cualquier operacin aritmtica.
El siguiente programa calcula y devuelve el rea de un crculo. La
frmula es pi * r 2 . El r en la frmula se refiere al radio, y su
valor ser suministrado por el usuario.

areacircleinput.py
from math import pi
r=int(input("Enter radius: "))
a=pi*r*r
print ("Area of the circle is", a)
print ("Area of the circle is %.2f" %a)
Output:

Enter radius: 5
Area of the circle is 78.53981633974483
Area of the circle is 78.54

Bitwise Operations
Operaciones bit a bit
Cada numrica que se introduce en un ordenador
internamente en forma de dgitos binarios. Por
decimal 25 se representa internamente en forma
como 11001. Los operadores bit a bit operan en
binarios para dar los resultados deseados.

se representa
ejemplo, el valor
de dgitos binarios
estos dgitos

Note

Los operadores de desplazamiento y bit a bit slo se pueden


aplicar a nmeros enteros y nmeros enteros largos.
Teniendo en cuenta x e y como dos operandos siguientes son los
operadores movedizas y bit a bit:
x << y (izquierda turno binario): Devuelve x con los bits
desplazados a la izquierda por lugares y. El dgito se rellena
con 0s en el lado derecho. Esta operacin es el mismo que
multiplicar x por 2 ** Y.
x >> y (desplazamiento binario derecha): Devuelve x con los
bits desplazado hacia la derecha por lugares y. Esta operacin
es el mismo que dividir x por 2 ** Y.
X & Y (AND bit a bit): Correspondiente bits de x e y se
comparan. Retorna 1 si el bit correspondiente de x e y es 1; de
lo contrario se devuelve 0.
x | y (AND bit a bit): Correspondiente bits de x e y se
comparan. Devuelve 0 si el bit correspondiente de x y de y es
0; de lo contrario devuelve 1. Es decir, si X o Y es 1, el
operador devuelve 1
x ^ y (exclusivo binaria AND): bits correspondientes de x e y
son en comparacin. Devuelve 1 si x o y es 1; de lo contrario
devuelve 0. Esto es, el operador devuelve 0 si los bits
correspondientes de x e y son el mismo.
~ X (inversin bit a bit): Devuelve el complemento de x; es
decir, dgito binario 1 se convierte a 0, y 0 se convierte en
1.
El programa siguiente muestra la aplicacin de AND, OR,
Operadores de desplazamiento EXCLUSIVOS Y, e izquierda y derecha.

bitwise.py

a=10
b=7
c=a&b
d=a ^ b
e= a | b
print ('The result of 10 and 7 operation is', c)
print ('The result of 10 exclusive or 7 operation is' , d)
print ('The result of 10 or 7 operation is', e)
g=a<<2
print ('Left shifting - Multiplying 10 by 4 becomes:' , g)
h=a>>1
print ('Right shifting - Dividing 10 by 2 becomes:',h)
Output:
The result of 10 and 7 operation is 2
The result of 10 exclusive or 7 operation is 13
The result of 10 or 7 operation is 15
Left shifting - Multiplying 10 by 4 becomes: 40
Right shifting - Dividing 10 by 2 becomes: 5
Los enteros 10 y 7 y el resultado de la aplicacin del operador
&(AND) en ellos se muestran en la Figura 2.2 (a). La figura muestra
que el operador AND devuelve 1 si ambos enteros son 1; de lo
contrario devuelve 0. Figura 2.2 (b) muestra el resultado de aplicar
el operador exclusiva o en los dos enteros, 10 y 7. Usted puede ver
que el operador OR exclusivo devuelve 1 si cualquiera de los dos
enteros es 1.
Figura 2.2 (c) muestra el resultado de aplicar el operador OR;
devuelve 1 si uno o ambos de los nmeros enteros son 1.

Figura 2.3 (a) muestra el resultado de la izquierda cambiando el


valor de 10 por 2. Usted puede ver que dos 0s se aaden a la derecha
del nmero. En cada desplazamiento a la izquierda, el valor del
nmero se multiplica por 2. Es decir, a la izquierda, cambiar el
nmero por dos, el nmero se multiplica por 4, dando el resultado
como 40.
Figura 2.3 (b) muestra el nmero 10 se movi un poco hacia la

derecha. El bit ms a la derecha del nmero se redujo, y un 0 se


aade a su izquierda, dividiendo el nmero por 2 y dar el resultado
como 5.

Complex Numbers
Un nmero complejo es la combinacin de un real y una imaginaria
componente, donde ambos estn representados por-punto flotante tipo
de datos. El componente imaginaria del nmero complejo es un
mltiplo de la raz cuadrada de menos uno y se denota por j.

Example:
3+1.2j
En este ejemplo, 3 es un componente real, y 1,2 es el
componente imaginario y es igual a 1,2 -1.
Los componentes real e imaginaria de un objeto complejo se
puede acceder mediante el uso de sus atributos real y imag.
El siguiente programa muestra la suma de dos nmeros complejos:

complex.py
a = 3.0 + 1.2j
b= -2.0 - 9.0j
print
c=a+b
print
print
print

('The two complex numbers are', a, 'and', b)


('The addition of two complex numbers is:', c)
('The addition of two real numbers is:', a.real+b.real)
('The addition of two imaginary number is:', a.imag+b.imag)

Output:

The
The
The
The

two complex
addition of
addition of
addition of

numbers are (3+1.2j) and (-2-9j)


two complex numbers is: (1-7.8j)
two real numbers is: 1.0
two imaginary number is: -7.8

Este programa define dos nmeros complejos, a y b. Los componentes


real e imaginaria del nmero complejo son un 3,0 y 1,2,
respectivamente. Del mismo modo, los componentes real e imaginaria
del nmero complejo B son -2,0 y -9,0, respectivamente. Mientras que
la adicin del complejo nmeros, se aaden los respectivos
componentes reales e imaginarias de los dos nmeros complejos, como
se muestra en la Figura 2.4. El programa tambin tiene acceso a los
componentes reales e imaginarias de los dos nmeros complejos
mediante la adicin de sus atributos reales y imag.

Note
Los nmeros complejos se muestran entre parntesis()
Al escribir programas, se encuentra con una situacin en la que se
desea ejecutar una sentencia de bloque de los dos bloques. Es decir,
es necesario controlar el flujo del programa y ejecute una
instruccin de bloque de opciones disponibles, dependiendo de las
condiciones prevalecientes. Vamos a ver cmo tomar decisiones en
Python.

Making Decisions
Toma de decisiones
La afirmacin de que ayuda en la toma de decisiones y el control de
flujo del programa es la instruccin if ... else.

if...else statement

La instruccion if ... else decide que el bloque de instrucciones que


se ejecutarn sobre la base de la expresin lgica incluido.
Un bloque de instrucciones se adjunta con el caso, as como con los
dems, y cuando se evala la expresin lgica, ya sea el caso de if
o de else sera ejecutado.

Syntax:
if (logical expression):
statement(s)
else:
statement(s)
Si la expresin lgica se evala como true, la sentencia if es
ejecutado; de lo contrario, se ejecuta la sentencia else.

Note
The else statement is optional.
Vamos a escribir un programa que pide al usuario que introduzca las
calificaciones del estudiante. Si las calificaciones son mayores o
iguales a 60, el programa debe mostrar un mensaje, Primera Divisin.
Si no es as, se debe mostrar el mensaje de la Segunda Divisin.

ifelse1.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
else:
print ("Second Division")
Output:
Enter grades: 75
First Division
Enter grades: 50
Second Division
Se puede ver en este programa que el usuario introduce los grados a
travs de un mtodo de input(). Dado que el valor introducido por el
input() es en formato de cadena, se convierte a entero y se asigna a
la variable m. El uso de una instruccin if ... else, se comprueba
el valor de m variables. Si el valor en la variable m es mayor que o
igual a 60, el Si se ejecuta el bloque, la visualizacin de la
primera divisin mensaje.

Si el valor introducido es inferior a 60, el bloque else va a ser


ejecutado, muestra el texto Segunda Divisin. La salida del programa
confirma esto.
En este programa, mayor que o igual a (> =) compara el valor de la
variable m con 60. Tabla 2.3 se enumeran los operadores de
comparacin.

En el prximo programa, de nuevo le pide al usuario que introduzca


las calificaciones del estudiante. Si los grados introducidos son
mayores que o igual a 60, un mensaje de la Primera Divisin se
mostrar.
Si las calificaciones registradas son mayores que o igual a 45 pero
inferior a 60, la Segunda Divisin de mensaje se mostrar. Si las
calificaciones registradas son menos de 45, la Tercera Divisin se
mostrar. Para este tipo de programas, es un nido if ... else bloque
dentro del bloque else del exterior if... else. Vamos a ver cmo
esta anidacin se hace en el siguiente programa:

ifelse2.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
else:
if(m >=45):
print ("Second Division")
else:
print ("Third Division")

Output:

Enter grades: 75
First Division
Enter grades: 50
Second Division
Enter grades: 40
Third Division
Se puede ver en este programa que una instruccin if
se escribe dentro de una sentencia ms de lo externo
else. El si ... else ejecutar sentencia else dentro
sentencia else if la expresin lgica incluida en el
sentencia if se evala como False

... else
if ...
de la
exterior

Es decir, si el usuario introduce un valor inferior a 60, el


interior de if ...else se ejecutar para comprobar si el valor
introducido es mayor que 45, y se mostrar el mensaje
correspondiente.

if-elif-else statement
Si tiene varias expresiones lgicas para evaluar, y sobre la base de
esas expresiones lgicas que desea ejecutar un conjunto especfico
de bloque de cdigo, es necesario utilizar una sentencia if-elifelse

Syntax:
if (logical expression):
statement(s)
elif (logical expression 1):
statement(s)
[elif (logical expression n):
statement(s)]
else:
statement(s)
Se puede ver que la sentencia else y la sentencia if anidado
en ella se fusionan para formar una declaracin elif. Una
declaracin elif es til para evitar el sangrado excesivo. El
ifelse2.py programa que usted escribi anteriormente puede
reescribirse con una instruccin if-elif-else, como se
muestra aqu:
ifelif.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
elif (m >=45):

print ("Second Division")


else:
print ("Third Division")
Qu pasa si necesita combinar ms de una expresin lgica? Utilice
los operadores lgicos para conectar las expresiones lgicas. Vamos
a echar un vistazo rpido a los operadores lgicos.

Logical Operators
Al escribir expresiones lgicas, a veces es necesario combinar dos o
ms lgicas expresiones. Las expresiones lgicas se suelen combinar
con los operadores lgicos AND, OR y NOT. La lista de operadores
lgicos con una breve descripcin se muestra en la Tabla 2.4.

Considere la lgica expresiones x e y conectado con el operador


lgico AND como se muestra a continuacin:

x and y
En la combinacin de las expresiones lgicas por el operador lgico
AND, primero se evala la expresin lgica x, y si devuelve false,

el resultado de la combinacin ser x; de otro modo, el resultado


ser Y.
Del mismo modo, en la combinacin de las expresiones lgicas x e y
por el operador lgico OR, primero se evala la expresin lgica x,
y si el resultado es true, el resultado de la combinacin ser x; de
otro modo, el resultado ser Y.
El ifelse2.py programa que usted escribi anteriormente puede
reescribirse combinando las expresiones lgicas con operadores
lgicos:

ifelse3.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
if(m >=45 and m<60):
print ("Second Division")
if (m<45):
print ("Third Division")
Usted ve que si el grado introducido es mayor que 60, el primer caso
se ejecutar el bloque, mostrando la primera divisin mensaje. Si la
calificacin introducido es mayor que 45 y menor de 60, ambas
expresiones lgicas, m> = 45 y m <60, que es verdadero, y el mensaje
en el segundo bloque if, Segunda Divisin, se mostrar. Si la nota
introducida es inferior a 45, el tercer bloque if se ejecutar,
mostrando el mensaje de la Tercera Divisin.

Chaining Comparison Operators


Encadenamiento de Operadores de comparacin
Considere los siguientes operadores de comparacin, que estn
conectados con el operador AND:

x<=y and y<=z


Estos operadores de comparacin se pueden encadenar como

x<=y <=z
Como era de esperar, si la expresin lgica x <= y es cierto,
entonces slo la expresin lgica y <= z se evaluar.
Por ejemplo, la declaracin se utiliza en el programa anterior, m> =
45 y m <60, se pueden encadenar para que aparezca como 45 <= m <60.

Vamos a volver a escribir el programa por el encadenamiento de los


operadores de comparacin.

ifelschaining.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
if(45<= m <60):
print ("Second Division")
if(m<45):
print ("Third Division")
Si el grado introducido es mayor que o igual a 45, la siguiente
parte de los operadores de cadena se evala para ver si el valor
introducido es menos de 60.
El siguiente programa pide al usuario que introduzca un valor entre
1 y 10 e imprime un mensaje basado en el valor introducido:

opr1.py
m=int(input("Enter a number between 1 and 10: "))
if 1<= m <=10:
print ("Number is within range")
else:
print ("Number is out of range")
Output:
Enter a number between 1 and 10: 3
Number is within range
Enter a number between 1 and 10: 15
Number is out of range
Se puede ver que el programa imprime el nmero de mensajes est
dentro del rango si el valor introducido es entre 1 y 10; de lo
contrario, se imprime el nmero de mensajes est fuera de rango
El siguiente programa determina si el valor introducido es par o
impar. El programa utiliza el operador de mdulo,%. Recuerde que el
operador mdulo devuelve el resto de la divisin.

evenodd.py
m=int(input("Enter a number "))
n = m%2

if n ==0:
print ("Number is even")
else:
print ("Number is odd")
Output:
Enter a number 6
Number is even
Enter a number 9
Number is odd
En este programa, se pide al usuario que introduzca un nmero que se
asigna a la variable m. La variable m se divide por 2, y si el resto
es 0, es decir, el nmero es un mltiplo de 2, un nmero de mensaje
es incluso se muestra. Del mismo modo, si el resto de la operacin
de divisin no es 0, el nmero no es mltiplo de 2, y el nmero es
impar se muestra.

Note
Python proporciona una funcin DIVMOD, que tiene dos numrica
argumentos y devuelve el cociente y el resto, por lo que no
tiene que usar tanto / / para el cociente y el% para el resto
Al escribir programas, a veces desea ejecutar algunas declaraciones
en varias ocasiones. Para tales situaciones, se utiliza bucles.
Vamos a ver cmo utilizar bucles en Python.

Loops- Bucles
Loops se utilizan para ejecutar un conjunto de instrucciones
mientras una expresin lgica es verdadera. Usted aprender dos
lazos en esta seccin: el bucle while y el bucle for.

The while Loop


Un bucle while se ejecuta repetidamente un bloque de cdigo mientras
una expresin lgica especificada siendo cierto.
La expresin lgica en un bucle while se evala en primer lugar, y
si se evala como falsa, el cuerpo del bucle while no se ejecutar.
Si la expresin lgica se evala como verdadera, se ejecuta el
bloque de cdigo en el bucle while.
Despus de ejecutar el cuerpo, el control salta de nuevo al
principio del bucle para confirmar si la expresin lgica sigue
siendo cierto. El bucle continuar ejecutndose hasta que la
expresin lgica se evala como falsa, en cuyo caso la ejecucin del
programa contina a partir de la instruccin que sigue el bucle
while.

Syntax:
while expression :
statement1
statement2
statement3
Aqu vemos que el bloque de cdigo en el bucle while se sangra. Por
qu?

Indentation sangra
Python utiliza sangra para expresar la estructura de bloque de un
programa. A diferencia de otros lenguajes, Python no utiliza
aparatos ortopdicos o comenzar delimitadores / fin para denotar
bloques. En su lugar utiliza la sangra para representar bloques de
instrucciones.
Un bloque es una secuencia contigua de lneas lgicas, todos con
sangra en la misma cantidad, y una lnea lgica con menos sangra
termina el bloque. La primera instruccin de un bloque no debe tener
sangra-no debe comenzar con cualquier espacio en blanco. Usted
puede utilizar tabuladores o espacios para declaraciones de sangra.
Python sustituye cada ficha con hasta ocho espacios.

Note
No mezclar espacios y tabuladores para el sangrado, como
pestaas pueden ser tratados de manera diferente por
diferentes editores.
El programa siguiente muestra los nmeros de 1 a 10 usando el bucle
while:

whileloop.py
k=1
while k <=10 :
print (k)
k=k+1
Output:
1
2
3
4
5

6
7
8
9
10
Se puede ver que el bucle while se establece para ejecutar siempre
que el valor de la variable k es menor o igual a 10. En el bucle, se
imprime el valor de la variable k y el incremento de su valor en 1
para imprimir el siguiente valor sucesivo .
Tambin se puede ver que el bucle while termina cuando la expresin
lgica se evala como falsa. Hay alguna otra manera de terminar un
bucle? Adems, y si desea saltar el bucle sobre la aparicin de
alguna condicin? La siguiente seccin explica cmo terminar y pase
un bucle.

Breaking and Continuing a Loop


Romper y continua de un bucle
Hay dos situaciones en las que un ciclo termina y sale de un bucle:
cuando la expresin lgica se evala como falsa, y en presencia de
una sentencia break en el bucle.

The break Statement - La sentencia break


La instruccin break termina y sale del bucle actual y contina con
la ejecucin del programa de la instruccin que sigue el bucle.
Normalmente se utiliza en un bucle infinito.

Syntax:
break
El programa siguiente muestra cmo utilizar una sentencia break para
terminar un bucle while para imprimir 10 nmeros:

breakex1.py
k=1
while 1 :
print (k)
k=k+1
if(k>10):
break
Output:
1
2

3
4
5
6
7
8
9
10
Inicializa la variable k al valor 1. Adems, se establece un bucle
while para ejecutar infinitamente. En el bucle, se muestra variable
k y luego incrementas su valor en 1. Cuando k se convierte en ms de
10, que sale del bucle infinito a travs de la sentencia break.
Recuerde que el valor 1 representa el valor true. Tambin puede
reemplazar while 1 por while True para crear un bucle infinito.
Ahora echemos un vistazo a la declaracin que le dice a Python para
omitir la parte del bucle actual y comenzar con la siguiente
iteracin.

The continue Statement - La sentencia continue


La sentencia continue detiene la ejecucin de la iteracin actual
saltarse el resto del bucle y continuar la ejecucin del bucle con
el siguiente valor iterativo.

Syntax:
continue
El siguiente programa imprime los nmeros del 1 al 10, excepto para
el valor 7:

continueex.py
k=1
while k <=10 :
if k==7:
k+=1
continue
print (k)
k=k+1
Output:
1
2
3

4
5
6
8
9
10
En primer lugar, inicializar variable k para 1. Entonces, establecer
el bucle while para ejecutar siempre y cuando k es menor que o igual
a 10. En el bucle while, imprima el valor de k y luego incrementar
su valor en 1. Asimismo, omita el cuerpo del bucle a travs de una
sentencia continue cuando el valor de k es 7. Es decir, no se
imprimen k pero slo se incrementa su valor en 1 para ejecutar el
bucle con el siguiente valor de la secuencia.

The pass Statement


La sentencia pass se utiliza en Python para indicar un bloque vaco
de enunciados. Tambin se utiliza como marcador de posicin para el
cdigo que desea escribir ms adelante y acta como un recordatorio
de que un programa se puede ampliar.
Puede volver a escribir el programa anterior para mostrar los
nmeros del 1 al 10, excepto para 7 mediante la instruccin de pass,
como se muestra aqu:

passex1.py
k=1
while k <=10 :
if k==7:
pass
else:
print (k)
k+=1
Output:
1
2
3
4
5
6
8
9
10
Se puede ver que el valor de k se inicializa a 1. El bucle
while se ejecutar hasta k se hace mayor que 10. En el bucle

while, se muestra el valor de k, y su valor se incrementa en


1 cuando el valor de k es igual a 7, se ejecuta la sentencia
pass.; k no se muestra y se incrementa en 1 para ejecutar el
bucle con el siguiente valor de secuencia.

The range () Function


La funcin range() genera y devuelve una secuencia de nmeros
enteros y es muy utilizado en bucle declaraciones. Hay tres
variaciones de la funcin range(), dependiendo del nmero de
parmetros pasados a la misma:

range (x): Devuelve una lista cuyos elementos son


nmeros enteros consecutivos desde 0 (incluidas) para x
(no incluidos).
range (x, y): Devuelve una lista cuyos elementos son
nmeros enteros consecutivos de x (incluidas) a y
(excluido). El resultado es una lista vaca si x es
mayor o igual a y.
range(x, y, paso): Devuelve una lista de enteros de x
(incluido) a y(excluido), y la diferencia entre cada
valor sucesivo es el valor definido por paso. Si el paso
es menor que 0, rango de una cuenta atrs de x a y, La
funcin return de una lista vaca cuando x es mayor o
igual a y y paso es mayor que 0, o cuando x es menor que
o igual a Y y el paso es menor que 0. 0 Si se especifica
como el valor de paso, la funcin range() genera una
excepcin. Cuando no se especifica el paso, su valor por
defecto es 1.

The for Loop


El bucle for itera a travs de una secuencia de objetos. Una
secuencia es un objeto de contenedor que puede ser en forma de una
lista, tupla o cadena.

Note
Contenedores en Python comprende el conjunto, secuencias, como
listas, tuplas, y cadenas, y las asignaciones, como diccionarios.
Usted aprender acerca de estos contenedores en detalle en el
Captulo 3, "Secuencias".

Syntax:
for iterating_var in sequence:
statement1

statement2
statement3
El primer elemento de la secuencia se asigna a la variable de
iteracin iterating_var y se ejecuta el bloque de instrucciones. Uno
por uno, cada elemento de la secuencia se asigna a iterating_var, y
el bloque de instrucciones se ejecuta hasta que se termine toda la
secuencia.
El programa siguiente muestra los nmeros de 1 a 10:

forloop.py
for i in range(1,11):
print (i)
Esto imprime una secuencia de nmeros, que se generan de 1 a 10
utilizando la funcin integrada range(). Dado que no se indica el
valor de paso, el valor por defecto de 1 es el valor del paso.
El programa siguiente muestra los nmeros impares entre 1 y 10. Los
dos valores impares sucesivos difieren en 2, por lo que utilizan el
valor de paso de 2 en la funcion range().

forloop2.py
print ("Odd numbers between 1 and 10 are:")
for i in range(1,11,2):
print (i)
Output:
Odd numbers between 1 and 10 are:
1
3
5
7
9
La funcin range(1,11,2) en primer lugar generar un valor de 1. A
este valor se aadir el valor del paso 2 para generar el siguiente
valor de la lista, 3. El proceso continuar hasta que el valor
generado es menor o igual a 10.
Un bucle se puede utilizar para imprimir valores aleatorios a partir
de una tupla. Vamos a discutir tuplas en detalle en el prximo
captulo. Por ahora es suficiente saber que una tupla es un objeto
inmutable que se puede utilizar para representar un conjunto de
valores de cualquier tipo de datos.
Los valores o elementos de una tupla se incluyen entre parntesis,
(). Un objeto inmutable es uno que no se puede cambiar una vez que

se haya creado. Usted va a utilizar los operadores de membresa para


mostrar los elementos de la tupla.

Membership Operators
Operadores de membresa
Pruebas de un operador de membresa para formar parte de una
secuencia, como cadenas, listas o tuplas. Hay dos operadores de
afiliacin, como se muestra en la Tabla 2.5.

He aqu algunos ejemplos:

ab en abcde-Devuelve true porque la cadena ab se encuentra en


el abcde cadena.

2 en (10,3,5,2,1): vuelve verdaderos porque existe el valor 2


en el tupla.

bob no en ab-Devuelve true porque el bob cadena no se encuentra


en la cadena de ab.

El programa siguiente muestra los valores aleatorios incluidos en


una tupla utilizando el operador de pertenencia a travs de un bucle
for:

for i in ( 7, 3, 8, 1, 4 ):
print i
Aqu usted proporciona una tupla de valores en el bucle for.
El primer valor de la tupla se asignar a la variable i, y se
ejecuta el bucle. A continuacin, el siguiente valor de la tupla
ser asignado a i y el bucle se ejecuta. El bucle se ejecutar con
cada valor de la tupla. En el cuerpo del bucle se muestra slo el

valor asignado a la i, que muestra todos los valores de la tupla uno


por uno.
El programa siguiente muestra un valor aleatorio entre 1 y 9. Para
obtener valores aleatorios, utilizar una funcin eleccion:
choice().

The choice () Function


La funcion choice() recoge y devuelve un artculo al azar a partir
de una secuencia. Se puede utilizar con listas, tuplas, o cadenas.
Syntax:
choice(sequence)
donde la secuencia puede ser una lista, tupla o cadena.

Note
Para utilizar la funcin opcin() en un programa, es
necesario importar un mdulo random.

Example:
k=choice([2,4,6,8,10])
Usted recibir un valor aleatorio extrado desde la secuencia
especificada, lo cual puede ser de 2, 6, o algn otro valor de la
lista.

randomnumber.py
from random import choice
k=choice(range(1,10))
print ("Random number is",k)
Output:
Random number is 4
Random number is 1
En este programa, la funcin range() devolver valores entre 1 y 9.
La funcin choice() recoger cualquier valor al azar de estos nueve
valores y asignarla a la variable k, que luego se muestra en la
pantalla. Cada vez que se ejecuta el programa, la funcin choice()
devuelve un valor aleatorio.

La siguiente imprime los nmeros primos entre 1 y 100.

primes.py
print (1)
for i in range(2,101):
x=1
for j in range(2, i):
n=i%j
if n==0:
x=0
break
if x==1:
print (i)
Output:
1
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

Este programa muestra el valor 1, sabiendo que es un nmero primo. A


continuacin, utiliza un bucle para generar valores de 2 a 100, y
cada valor se asigna a la variable i. El valor de la variable i se
divide por 2 a i-1 valores. Si se divide por cualquiera de estos
valores, no es un nmero primo y no es visualizada. Se muestra el

valor de i variable cuando no divide por cualquier valor entre 2 y


i-1.

Summary
En este captulo usted aprendi a aplicar operaciones aritmticas y
diferentes operadores lgicos y de membresa en programas Python.
Tambin vio el uso de secuencias de escape. Para mejorar la
interaccin con el usuario, que ha aprendido a obtener datos del
usuario y procesar los datos entrantes. Ustedes vieron la conversin
de los datos en diferentes tipos. Tambin ha aprendido a mostrar los
valores octales y hexa, realizar operaciones a nivel de bits y
utilizar los nmeros complejos. Tambin vio el uso de if ... else en
la toma de decisiones. Por ltimo se vio usando bucles while y for
para realizar tareas repetitivas.
En el prximo captulo, usted va a aprender sobre los recipientes:
secuencias, correspondencias y conjuntos. Una secuencia incluye
cadenas, listas y tuplas, y las asignaciones incluyen diccionarios.
Tambin aprender a realizar operaciones en secuencias a travs de
sus respectivos mtodos. Adems, usted aprender acerca de una y
matrices bidimensionales. Por ltimo, aprender a aplicar las
operaciones de conjuntos tales como los sindicatos, las
intersecciones y diferencias ..

Chapter 3. Sequences
En este captulo se tratan los siguientes temas:

Cmo los datos se almacenan en una cadena

Creacin y visualizacin de arrays de una y dos dimensiones


Rebanar Lista y sus mtodos
Creacin de tuplas y la bsqueda de elementos
Pares clave / valor y sus mtodos
Operadores de la Unin, interseccin y diferencia

Sequences
Una secuencia contiene objetos que se guardan en un orden
especfico. Se puede identificar un objeto en una secuencia por su
ubicacin de ndice. Adems, se puede extraer de una secuencia con
la operacin de corte. En este captulo se ver en tres ejemplos de
secuencias: listas, tuplas, y cadenas.

cadenas utilizan comillas, como "Hola", "Hola", "Hola" ',


"" "Hola" "".
Listas utilizan corchetes, como[Tiger, Caf, 1, 'a', 10.50,
'b']
Las tuplas utilizan parntesis, como(Tiger, Caf, 1, 'a',
10.50, 'b').

Las tuplas y las cadenas son inmutables-que no pueden ser


modificados despus de su creacin. Se crea una copia de una cadena
o una tupla cuando se aplica a una operacin para la cadena o tupla
inicial.
Una lista es mutable; puede aadir elementos, eliminar elementos
existentes o reorganizar los elementos. Todas las modificaciones de
la lista se hacen sin crear un nuevo objeto de la lista.
Las tres operaciones que se aplican comnmente a las secuencias son
las siguientes:
1. + Va a concatenar secuencias para hacer secuencias ms largas.
2. * Se utiliza con un dgito numrico para repetir la secuencia
varias veces.
3. [] Se vende a un elemento particular de la secuencia
(indexacin) oun subconjunto de elementos de la secuencia
(cortar).

Note

Las posiciones se numeran desde cero en secuencias; es decir, el


primer elemento de una secuencia es al valor de ndice de 0.

Strings
Una cadena es una secuencia de caracteres que se utilizan para
almacenar y representar la informacin de texto. Un literal de
cadena se puede encerrar en simple ('), dobles (") o comillas
triples (''') Las cadenas son inmutables en Python,. Usted no puede
modificar un objeto cadena existente Cuando se realiza una operacin
en un objeto de cadena, usted. crear un nuevo objeto de cadena.
Ejemplos de cadenas en comillas simples, dobles y triples son los
siguientes:
k='Hello World!'
k="Hello World!"
k='''
Hello World!
It\' s hot today
Let\'s party '''

Para hacer que la cadena aparezca en dos lneas, puede incrustar un


salto de lnea en la cadena:
k="Hello World!\nIt's hot"

Si el literal de cadena se extiende por varias lneas, utilice una


barra invertida como el ltimo carcter de una lnea para indicar
que la siguiente lnea es una continuacin:
k="Hello World!\
It's hot"

Para mostrar una comilla en una cadena, es necesario utilizar el


carcter de escape:
k='Isn\'t it?'
No hay necesidad de utilizar un carcter de escape para mostrar una
comilla dentro de una cadena entre comillas dobles.
k="Isn't it?"
Una cadena de triple citado puede estar encerrada en la adecuacin
de los tros de caracteres de comillas ('' 'o "" ") La cadena
literal anterior tambin se puede escribir como:
k="""
Hello World!
It' s hot today
Let' s party"""
En una cadena de triple comilla literal, saltos de lnea en el
literal se conservan como caracteres de nueva lnea. No se puede

utilizar una barra invertida en una cadena triple citado .

Note
A diferencia de otros lenguajes de programacin, no hay ningn
tipo de datos de carcter independiente en Python. Un carcter
se considera una cadena de longitud uno.

Cmo los caracteres son almacenados en un String.


Cuando se asigna texto a una cadena, cada uno de sus personajes se
almacena en un lugar determinado ndice. Por ejemplo, la declaracin
k = "David" le asignar el texto David a la variable k.
Internamente, los caracteres se almacenan en la variable k, como se
muestra en la Figura 3.1.

Dnde 0,1 ... son el ndice. Una cadena es terminada por un carcter
NULL, \ 0. Puede acceder a cualquier carcter de la cadena a travs
de su ndice. Por ejemplo, K [0] accede al primer carcter, D, K [1]
accede al segundo carcter, una, y as sucesivamente.
Cadenas de Python soportan varios mtodos y funciones. Cul es la
diferencia entre las funciones y los mtodos?

Diferencias entre Funciones y mtodos


Una funcin es un mdulo de cdigo que se llama por su nombre. Puede
pasar datos a la funcin en forma de argumentos, y puede devolver
algn valor. Los datos que se pasan a la funcin tiene que ser
aprobado de forma explcita. Un mtodo tambin es llamado por su
nombre y puede devolver un valor. La principal diferencia entre un
mtodo y una funcin que es un mtodo se asocia con un objeto, y el
objeto para el que se llama se pasa implcitamente a ella. Tambin,
un mtodo es capaz de operar en los datos que est contenida dentro
de la clase. La lista de mtodos y funciones se da en la Tabla 3.1.

Encontrar la longitud de una cadena


Para encontrar el nmero de caracteres de una cadena, utilice la
funcin len(). Como se indica en la Tabla 3.1, el funcion len ()

cuenta y devuelve el nmero de caracteres en una secuencia (cadena,


tupla o lista). El programa para hacerlo se muestra aqu:
string1.py
n=input("Enter your name: ")
l=len(n)
print ("The name entered is", n, "and its length is", l)
Output:
Enter your name: John
The name entered is John and its length is 4
En este programa, usted le pide al usuario que introduzca una cadena
que se almacena temporalmente en una variable n. Luego, a travs de
la funcin len(), se entera de la longitud de la cadena y lo
mostramos.
Las siguientes revisiones del programa si el valor introducido es
numrico o no numrico:
ifelse4.py
m=input("Enter marks: ")
if m.isdigit():
print ("Entered data is numeric")
else:
print ("Entered data is not numeric")
Output:
Enter marks:
Entered data
Enter marks:
Entered data

50
is numeric
fifty
is not numeric

El programa utiliza el mtodo isdigit() para saber si el valor


introducido es un valor numrico o no. El mtodo isdigit() devuelve
el valor true si el objeto referenciado es numrico; de otra forma
se devuelve false.
El siguiente programa muestra el uso de los mtodos seguidos
upper(), lower(), title(), capitalize(), y swapcase (). Una cadena,
Hello World!, Se convierte a maysculas, minsculas, maysculas, y
swapcase (las letras maysculas se cambian a minsculas y
viceversa).
string2.py

s="Hello World!"
print ("Original String is", s)
print('String after toggling the case:', s.swapcase())
print ("String in uppercase is", s.upper())
if (s.istitle()):
print("String in lowercase is", s.lower())
print("String,", s, "is in title case:", s.istitle())
print ("String in capitalized form is", s.capitalize())
Output:
Original String is Hello World!
String after toggling the case: hELLO wORLD!
String in uppercase is HELLO WORLD!
String in lowercase is hello world!
String, Hello World! is in title case: true
String in capitalized form is Hello world!
El siguiente programa muestra el primer carcter de la cadena
introducida. Adems, la cadena introducida se muestra carcter sabia
cada carcter se muestra uno por uno
characterwise.py
s=input("Enter a string: ")
n=len(s)
print ("The first character of", s, "is", s[0])
print ("The entered string will appear character wise as:")
for i in range(0,n):
print (s[i])
print ("The entered string will appear character wise as:")
for i in s:
print (i)
print ("String with its characters sorted is", sorted(s))
print ("String in reverse form is", "".join(reversed(s)))
Output:
.
A sabiendas de que el ndice de una cadena est basado en cero, se
muestra el primer carcter de la cadena mediante el acceso a la
ubicacin de ndice 0. El programa tambin encuentra la longitud de
la cadena introducida e imprime cada uno de sus caracteres travs de
su ndice. Adems, el programa utiliza el operador de miembro para
acceder y mostrar cada carcter de la cadena. El programa muestra
los caracteres de la cadena despus de ordenar alfabticamente. Por
ltimo, la cadena se invierte y se muestra el uso de la funcin
reserved().
El siguiente programa muestra el carcter mximo y mnimo alfabtico
en una cadena introducida. Adems, el programa convierte el nmero

introducido en el tipo de datos de cadena, que cuenta el nmero de


dgitos, y muestra su primera cifra mediante la aplicacin de las
funciones de cadena a la misma.
string3.py
s=input('Enter a string: ')
print ('The string entered is:', s)
print('The maximum alphabetical character from the string is:' , max(s))
print('The minimum alphabetical character from the string is:' , min(s))
n=int(input('Enter a number: '))
m=str(n)
print('The number in string form is', m, 'its length is', len(m), 'and its first
digit is', m[0])

Output:
Enter a string: enormous
The string entered is: enormous
The maximum alphabetical character from the string is: u
The minimum alphabetical character from the string is: e
Enter a number: 53
The number in string form is 53 its length is 2 and its first digit is 5

El programa pide al usuario que introduzca una cadena de caracteres


y muestra sus mximos y mnimos alfabticos. Los caracteres mximos
y mnimos son los que tienen los valores ms altos y ms bajos
ASCII, respectivamente. Adems, el programa muestra la forma de un
valor numrico se convierte introduccin tipo de cadena mediante la
funcin str().
Una vez que el nmero se convierte en el tipo de cadena, se puede
aplicar una funcin de cadena, como len() para contar el nmero de
dgitos en el mismo. Tambin se puede ver el primer dgito del
nmero que se accede mediante el acceso a los contenidos en la
ubicacin de ndice 0.
El programa siguiente muestra la concatenacin de cadenas, la
aplicacin del operador * para repetir una cadena varias veces y
unirse a los textos:
stringconcat1.py
s="Hello World!"
t="Nice Day"
print (s+t)
print (s+" "+t)
print (s*3)
u="#"
print('The string after joining character # to the string', t,':', u.join(t))
u="hello"
print('The string after joining word, hello to the string',t,':', u.join(t))
Output:
Hello World!Nice Day
Hello World! Nice Day
Hello World!Hello World!Hello World!

The string after joining character # to the string Nice Day : N#i#c#e# #D#a#y
The string after joining word, hello to the string Nice Day :
Nhelloihellochelloehello
helloDhelloahelloy

En este programa, las dos cadenas Hola Mundo! y Nice Day se


concatenan sin un espacio y con un espacio. A continuacin, la
cadena Hello World! aparece tres veces usando el operador *. El
mtodo join() se utiliza para demostrar unirse a un personaje a
todos los caracteres de la cadena especificada. Adems, una cadena
completa se une a cada carcter de la cadena dada.
El siguiente programa pide al usuario que introduzca dos cadenas y
luego se une a una cadena a cada uno de los caracteres de otra
cadena:
stringjoin.py
p=input("Enter a string: ")
q=input("Enter another string: ")
print ("The first string is:", p)
print ("The second string is:", q)
print ("The combination is", p.join(q))
Output:
Enter a string: Hello
Enter another string: ABC
The first string is: Hello
The second string is: ABC
The combination is AhelloBHelloC

Se puede ver que las dos cadenas son introducidos Hola y ABC. La
cadena Hola se une a cada carcter de la cadena de ABC.
Haga cadenas en los mtodos de soporte de Python que ayudan en la
bsqueda o la bsqueda de una subcadena en una cadena? S. La Tabla
3.2 muestra los mtodos de las cadenas que ayudan en la bsqueda de
subcadenas de una cadena.
Table 3.2. String Methods Used to Find Substrings in
a String

El programa siguiente muestra el uso de diferentes funciones para


contar el nmero de las vocales en una frase:
countvowel.py
s=input('Enter a sentence: ')
n=len(s)
c=0
for i in range(0,n):
if(s[i]=='a' or s[i]=='A' or s[i]=='e' or s[i]=='E' or s[i]=='i' or
s[i]=='I' or s[i]
=='o' or s[i]=='O' or s[i]=='u' or s[i]=='U'):
c+=1
print ('The number of vowels in the sentence is' , c)
t=s.count('a', 0, n)+ s.count('A', 0, n)+ s.count('e', 0, n)+s.count('E', 0, n)+
s.count('i', 0, n)+ s.count('I', 0, n)+ s.count('o', 0, n)+ s.count('O', 0, n)+
s.count('u', 0, n)+s.count('U', 0, n)
print ('The number of vowels in the sentence is' , t)
v=s.count('a')+ s.count('A')+ s.count('e')+s.count('E')+ s.count('i' )+
s.count('I')+ s.count('o')+ s.count('O')+ s.count('u')+s.count('U')
print ('The number of vowels in the sentence is' , v)
Output:
Enter a sentence: amazing day in alaska
The number of vowels in the sentence is 8
The number of vowels in the sentence is 8
The number of vowels in the sentence is 8

En este programa, se pide al usuario que introduzca una frase.


Utilizando el ndice, se accede a todos los personajes de la
sentencia para ver si es una vocal. Una variable c que se inicializa
a 0 se incrementa en 1 cada vez que una vocal se encuentra en la
frase. El programa tambin muestra las dos formas de utilizar la
funcin count() para contar las vocales en la oracin.
El siguiente programa utiliza operadores de afiliacin para ver si
una subcadena entrado en una cadena:
checkstr.py
m=input("Enter a string: ")
n=input("Enter a substring: ")
if n in m:
print (n, "is found in the string", m)
else:
print (n,"does not exist in the string", m)
Output:
Enter a string: education
Enter a substring: cat
cat is found in the string education
Enter a string: education
Enter a substring: cari
cari does not exist in the string education

El siguiente programa es un paso por delante del programa anterior.


No slo informa si una subcadena se encuentra en una cadena o no,
pero tambin muestra que la subcadena aparece en la cadena dada, si
se comprueba. El programa utiliza el mtodo find().
searchstr1.py
p=input("Enter a string: ")
print ("Entered String is ", p)
q=input("Enter the substring to search: ")
r=p.find(q)
if r==-1:
print (q, "not found in", p)
else:
print (q, "found in", p, "at location", r+1)
Output:
Enter a string: katherine
Entered String is katherine
Enter the substring to search: her
her found in katherine at location 4

Aqu usted le pide al usuario que introduzca una cadena principal y


una sub-cadena y asignarlos a la p de variables y q,
respectivamente. Entonces, el mtodo find() se utiliza para buscar
en la q subcadena en la cadena p. El mtodo find() devuelve el valor
-1 si la subcadena no se encuentra en la cadena o la ubicacin ms
bajo ndice de donde se produce la subcadena en la cadena.
Sobre la base del valor devuelto por el mtodo find(), ya sea un
mensaje diciendo que la subcadena no se encuentra en la cadena o la
ubicacin de la ocurrencia de la subcadena en se muestra la cadena.
Usted puede usar el mtodo find()
subcadena en la cadena dada, pero
ocurrencias de la subcadena en la
metodo count(), como se demuestra

para encontrar la ocurrencia de la


no se puede usar para contar las
cadena. Para ello, se utiliza el
en el siguiente programa:

searchstr2.py
p=input("Enter a string: ")
print ("Entered String is", p)
q=input("Enter the substring to search: ")
r=p.count(q)
if r==0:
print (q, "not found in", p)
else:
print (q, "occurs in", p, r, "times")
Output:
Enter a string: alabalabalab
Entered String is alabalabalab
Enter the substring to search: la
la occurs in alabalabalab 3 times

Este programa acepta una cadena y una subcadena desde el usuario y


utiliza el mtodo count() para contar las apariciones de la
subcadena en la cadena dada. Aparece entonces el conteo.
Existe algn mtodo de cadena para ver si una cadena comienza o
termina con un prefijo o sufijo dado? S, y son los siguientes:
startswith(s, [start], [end])Devuelve true si la cadena comienza con el prefijo
especificado, de lo contrario devuelve false. El prefijo puede ser una nica cadena o una
secuencia de cadenas individuales.
endswith(suffix, [start], [end])Devuelve true si la cadena termina con el sufijo
especificado; se devuelve false en caso contrario. La sufijo puede ser una nica cadena o
una secuencia del cadenas individuales.

El siguiente programa pide al usuario que introduzca una frase y


luego comprueba si empieza o termina con el prefijo o sufijo dado.
stringfunc2.py
s=input("Enter a sentence: ")
print ('The original sentence is:', s)
if s.startswith('It'):
print('The entered sentence begins with the word It' )
if s.startswith('It', 0, 2):
print('The entered sentence begins with the word It' )
if s.endswith('today'):
print('The entered sentence ends with the word today' )
if s.endswith('today', 10, 15):
print('The entered sentence ends with the word today' )
Output:
Enter a sentence: It is hot today
The original sentence is: It is hot today
The entered sentence begins with the word It
The entered sentence begins with the word It
The entered sentence ends with the word today
The entered sentence ends with the word today

En este programa, la frase introducida por el usuario se comprueba


para ver si se comienza con el prefijo It o ends con el sufijo de
today; a continuacin, se muestra el mensaje correspondiente. El
programa muestra el uso de los metodos startswith() y endswith().
Puede que tenga que dividir una cadena en partes. O puede que tenga
que sustituir ciertos caracteres especficos o una subcadena en una
cadena con otros datos. Python proporciona mtodos de cadena para
esto. La Tabla 3.3 muestra los mtodos de cadena para romper una
cadena y sustitucin de subcadenas.

El siguiente programa rompe la sentencia entr en palabras y


devoluciones:
splitting.py
p=input("Enter a sentence: ")
print ("The sentence entered is:", p)
print ("The words in the sentence are")
print (p.split())
Output:
Enter a sentence: It is a great day
The sentence entered is: It is a great day
The words in the sentence are
['It', 'is', 'a', 'great', 'day']
Este programa busca los espacios en blanco en la oracin y la divide
en palabras a la aparicin de espacios en blanco. Las palabras de la
oracin se devuelven como una matriz de cadenas.:
El siguiente programa pide al usuario que introduzca un nombre que
consiste en un primer y un apellido y luego lo muestra despus de

intercambiar los dos:


interchangenme.py
n=input('Enter your first name and last name: ')
k=n.partition(' ')
print('The name after interchanging first and last name:', k[2], k[0])

Output:
Enter your first name and last name: Caroline Stevens
The name after interchanging first and last name: Stevens Caroline
En este programa, los nombres y apellidos introducidos por el
usuario se asigna a la variable n. El nombre de la variable n se
divide en tres partes sobre la presencia del espacio blanco, con el
metodo partition(): el nombre, el espacio en blanco, y apellido.
Para intercambiar el nombre y apellido, se muestra la tercera parte,
seguido de la primera parte de la cadena.
El programa siguiente muestra tres mtodos: partition(), replace() y
split():
breaking.py
s='education '
k=s.partition('cat')
print('The word', s, 'is partitioned into three parts')
print('The first part is', k[0], 'separator is', k[1], 'and the third part
is',k[2])
t=input('Enter a sentence: ')
print('The original sentence is', t)
print('The sentence after replacing all the characters "a" by "#" is:',
t.replace('a','#'))
print('The sentence after replacing first three "a" characters by "#" is:',
t.replace('a', '#', 3))
u=t.split(' ')
print('The words in the entered sentence are', u)
print('The words in the entered sentence are')
for i in range(0, len(u)):
print(u[i])
u=t.split(' ',1)
print('The sentence is split into two parts:', u[0], 'and', u[1])
Output:
The word education is partitioned into three parts
The first part is edu separator is cat and the third part is ion
Enter a sentence: amazing day in alaska
The original sentence is amazing day in alaska
The sentence after replacing all the characters "a" by "#" is: #m#zing d#y in
#l#sk#
The sentence after replacing first three "a" characters by "#" is: #m#zing d#y in
alaska
The words in the entered sentence are ['amazing', 'day', 'in', 'alaska']
The words in the entered sentence are
amazing
day
in
alaska

The sentence is split into two parts: amazing and day in Alaska

La cadena education se divide en tres partes en el corte de


subcadena utilizando el mtodo particin().
Las tres partes sern edu, cat, y ion. Adems, el programa utiliza
replace() para reemplazar el carcter de una en la frase de #.
El programa utiliza replace() para reemplazar slo los primeros tres
ocurrencias de un carcter por #.
El programa divide la frase en una matriz de cadenas usando split()
y muestra sus palabras. Por ltimo, el programa divide la frase en
dos partes sobre la ocurrencia de un espacio en blanco.
Ustedes han visto ejemplos que tienen que ver con arreglos de
caracteres. Ahora echemos un vistazo a los ejemplos que tienen que
ver con matrices de nmeros.

Arrays
Matrices numricas se utilizan para almacenar datos numricos.
Puesto que no tienen caracteres NULL, arrays numricos no son
terminados por caracteres NULL como con las cadenas, pero el
concepto de ndice todava se aplica a ellos para tener acceso a sus
elementos. Las matrices son de dos tipos, las matrices de una y de
dos dimensiones.

One-Dimensional Arrays- Matrices unidimensionales


Considere la posibilidad de una matriz numrica, p, que tiene cinco
valores numricos:. 8, 3,1, 6, y 2 Estos valores se pueden
representar por la estructura que se muestra en la Figura 3.2.

Los valores son los ndices que se pueden utilizar para acceder a
los elementos de la matriz. Es decir, p [0] ser acceder al primer
elemento de la matriz 8, p [1], acceder a la segundo elemento de la
matriz 3, y as sucesivamente.
El programa siguiente muestra la creacin de una matriz numrica de
cinco elementos:
numericarr.py
p= [ 0 for i in range(5) ]
print ("Enter five numbers")
for i in range(5):
p[i]= int(input())

print ("Numbers entered in the array are", p)


print ("Numbers entered in the array are")
for n in p:
print (n)
Output:
Enter five numbers
8
3
1
6
2
Numbers entered in the array are [8, 3, 1, 6, 2]
Numbers entered in the array are
8
3
1
6
2

La primera lnea del programa declara que p es una matriz de 5


nmeros. El uso de un bucle, el usuario se le pide que ingrese cinco
nmeros que se almacenarn en los respectivos ndices, p [0], p [1],
p [2], p [3] y P [4]. A continuacin, se muestran los valores
numricos de la matriz p.
Ahora vamos a ver cmo se crean matrices bidimensionales en Python.

Two-Dimensional Arrays
Arrays de dos dimensiones se dividen en filas y columnas. . Los
ndices de fila y columna comienzan a valor 0 Para acceder a cada
elemento de la matriz, debe especificar dos ndices; uno representa
la fila, y el otro representa la columna. Ambos se encuentran
encerrados entre corchetes.
En la figura 3.3 se ve que todos los lugares de la matriz est
representado por una fila y ubicacin de la columna. El ndice p [0]
[0] hace referencia al elemento almacenado en fila 0 y la posicin
de columna 0. Del mismo modo, el ndice p [0] [1] se refiere al
elemento que se almacena en la fila 0 y la posicin primera columna
de la matriz de dos dimensiones.

El programa siguiente crea una matriz bidimensional de 3 filas y 3


columnas. El programa tambin calcula y muestra la suma de elementos

de la matriz.
matrix1.py
table= [ [ 0 for i in range(3) ] for j in range(3) ]
print ("Enter values for a matrix of order 3 x 3")
for d1 in range(3):
for d2 in range(3):
table[d1][d2]= int(input())
print ("Elements of the matrix are", table)
print ("Elements of the matrix are")
for row in table:
print (row)
s=0
for row in table:
for n in row:
s+=n
print ("The sum of elements in matrix is",s)

Output:
Enter values for a matrix of order 3 x 3
1
2
3
4
5
6
7
8
9 Elements of the matrix are [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Elements of the matrix are
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
The sum of elements in matrix is 45

Los datos suministrados por el usuario se introduce en la matriz de


dos dimensiones en forma importante fila (vase la Figura 3.4).
Cuando la primera fila est llena, los elementos se almacenan en la
segunda fila, y as sucesivamente.

La primera lnea declara tabla como una matriz bidimensional de tres


filas y tres columnas. Los valores introducidos por el usuario se
almacenan en la matriz de dos dimensiones a travs de dos bucles for
anidados. En la visualizacin de una fila de la matriz de dos
dimensiones, la fila aparecer con sus elementos entre corchetes. El
programa tambin aade y muestra la suma de los elementos.

El programa siguiente muestra adicin de elementos de matrices


bidimensionales. Se aadirn y muestran los elementos en las dos
matrices que consisten de tres filas y tres columnas.
matrix2.py
m1 = [ [1, 2], [3, 4], [5, 6], [7, 8] ]
m2 = [ [9, 8], [7, 6], [5, 4], [3, 2] ]
m3= [ 2*[0] for i in range(4) ]
print("Addition of two matrices is")
for i in range(4):
for j in range(2):
m3[i][j]= m1[i][j]+m2[i][j]
for row in m3:
print (row)
Output:
Addition of two matrices is
[10, 10]
[10, 10]
[10, 10]
[10, 10]

Los elementos en los arrays bidimensionales m1 y m2 estn dispuestos


como se muestra en la Figura 3.5.

Para el almacenamiento de la adicin de los elementos de las


matrices bidimensionales m1 y m2, se declara otra matriz
bidimensional, m3.
Usando bucles for anidados, puede acceder a los elementos de la fila
respectiva y la posicin de la columna de las dos matrices
bidimensionales y almacenar su adicin en la tercera matriz, m3. La
adicin de m1 y m2 se calcula y se almacena en la matriz M3 (vase
la figura 3.6), que se muestra a continuacin.
Figure 3.6. Addition of two-dimensional arrays.

Esto termina nuestra discusin sobre arrays. Luego viene otra


secuencia, listas.

Lists listas
Una lista es una coleccin de elementos, que podra incluir otras
listas. Listas comienzan y terminan con un corchete, y los elementos
en el interior se separan con comas.
["John", "Kelly", 1, 2, [Sugar, Butter, 10]]

El primer elemento de la lista est en el ndice 0, el segundo es en


valor de ndice 1, y as sucesivamente. El ltimo elemento est en
el ndice -1.
El siguiente ejemplo muestra el primer y el ltimo elemento de una
lista:
list1.py
names=['John', 'Kelly', 'Caroline', 'Paula']
print (names[0])
print (names[-1])
Output:
John
Paula

El ndice de valores de 0 y -1 se refieren a los primeros y los


ltimos elementos de la lista, John y Paula.

Finding the Length of the List


Encontrar la longitud de la lista.
Para encontrar la longitud de una lista, se utiliza la funcin
len(), que devuelve la longitud como una ubicacin de ndice del
ltimo elemento ms uno. De esto, se puede decir que la ubicacin
del ndice del ltimo elemento de la lista es len (list) -1. Del
mismo modo, la ubicacin del ndice del segundo al ltimo elemento
de la lista se calcula como len(list) -2. Adems de utilizar el
mtodo len() para encontrar la ubicacin del ndice del ltimo
elemento, no existe una forma ms: la ubicacin del ndice del
ltimo elemento se define como -1 por defecto.
De esta manera, se puede calcular la ubicacin del ndice de la
segunda a la ltima como elemento de -2 y as sucesivamente. En
otras palabras, la lista [len (lista) -1] y lista [-1] son los
mismos y se mostrar el ltimo elemento de la lista. Por tanto,
cualquier elemento de la lista puede ser indexado de dos maneras:
por el frente (usando la funcin len() ) y de la parte posterior
(con -1).
El siguiente ejemplo muestra todos los elementos de la lista:
list2.py
names=['John', 'Kelly', 'Caroline', 'Paula']
for i in range(0,len(names)):
print (names[i])

Output:
John
Kelly
Caroline
Paula

En este caso, la funcin len () devolver la longitud de la lista


como 4. Rango(0,4) devolver los valores de 0 a 3 (excluyendo 4),
por lo que se mostrarn todos los elementos de la lista de ubicacin
de ndice de 0 a 3 .
Tambin puede acceder a los elementos de la lista con el nmero de
miembros en el operador in como se muestra en el siguiente programa:
list3.py
names=['John', 'Kelly', 'Caroline', 'Paula']
for n in names:
print (n)
Output:
John
Kelly
Caroline
Paula

El operador in con una sentencia if se puede utilizar para buscar un


elemento en la lista. El siguiente ejemplo busca el contenido
deseado en la lista:
list4.py
names=['John', 'Kelly', 'Caroline', 'Paula']
n=input("Enter a name: ")
if n in names:
print ("Entered name is present in the list")
else:
print ("Sorry the entered name is not in the list")
Output:
Enter a name: Susan
Sorry the entered name is not in the list
Enter a name: Caroline
Entered name is present in the list

El siguiente programa pide al usuario que introduzca un valor


numrico para un mes y muestra el nombre del mes en forma de texto.
Por ejemplo, si el usuario introduce 1, el programa mostrar la
salida en enero. Si el usuario introduce 2, el programa va a
imprimir febrero, y as sucesivamente.
list5.py

months = ['January', 'February', 'March', 'April', 'May', 'June', 'July',


'August','September', 'October', 'November', 'December']
n = int(input("Enter a value between 1 and 12: "))
if 1 <= n <= 12:
print ("The month is", months[n-1])
else:
print ("Value is out of the range")

Output:
Enter a value between 1 and 12: 5
The month is May
Enter a value between 1 and 12: 13
Value is out of the range

Los elementos en la lista de meses se almacenarn como se muestra en


la Figura 3.7.

Cuando un usuario introduce un valor, se asigna a la variable n.


Usted disminuir el valor de n en 1, porque los lugares de ndice en
la lista empiezan en 0 y no 1. Su valor se convertir en 4, y se
imprime el elemento en la ubicacin de ndice de 4, que es la salida
deseada, mayo. Para evitar la introduccin de un valor por encima
del rango dado, se valida el valor introducido mediante la
aplicacin de encadenamiento de los operadores de comparacin para
garantizar que el valor introducido por el usuario es de entre 1 y
12.
Ahora vamos a ver cmo las listas se pueden dividir o cortados en
piezas.

List Slicing - Lista rebanar


Puede cortar una lista en partes para obtener los elementos
deseados. Para cortar una lista, se especifica la ubicacin de
ndice desde el que se desea extraer elementos.
Syntax:
list[first_index:following_index]
Devuelve los elementos de first_index al ndice antes se devuelve
following_index.
nota
Si no se especifica first_index, a continuacin, se supone que
el principio de la lista. Si no se especifica following_index,
a continuacin, se supone que el resto de la lista.
Para entender mejor el concepto de corte, vamos a suponer que usted
tiene una lista llamada tmplist con estos contenidos:
tmplist=['John', 'Kelly', 10, 'Caroline', 15, 'Steve', 'Katheline']

Ahora hay que observar la salida de los siguientes ejemplos:


tmplist [0:3] devolver los elementos en el valor de ndice de 0 a 2
['John', 'Kelly', 10].
tmplist [2:4] devolver los elementos en el valor del ndice de 2 a
3 [10, 'Caroline'].
tmplist [-4] devolver el cuarto elemento de la ltima ['Caroline'].
tmplist [-4: -2] devolver el cuarto elemento de la ltima a travs
del tercer elemento de el ltimo ['Caroline', 15].
tmplist [-5:5] devolver el quinto elemento de la ltima a travs
del cuarto elemento de el principio [10, 'Caroline', 15].
tmplist [: 3] devolver los tres primeros elementos de la lista
['John', 'Kelly', 10].
tmplist [3:] devolver los elementos de valor de ndice 3 al final
de la lista ['Caroline', 15 ,'Steve', 'Catalina'].
tmplist [: -3] devolver el elemento de valor de ndice 0 hasta el
tercer elemento de la ltima ['John', 'Kelly', 10, 'Caroline'].
tmplist [-3:] devolver el tercer elemento desde el ltimo hasta el
final de la lista [15, 'Steve', 'Catalina'].
Tabla 3.4 muestra algunos de los mtodos que se pueden aplicar a las
listas.

El siguiente programa realiza el corte para mostrar la lista de los


primeros cuatro elementos de la lista, encuentra la longitud de la

lista, aade los nuevos elementos a la lista, se elimina un elemento


de la lista, y muestra los elementos de la lista.
list6.py
tmplist=['John', 'Kelly', 10, 'Caroline', 15, 'Steve', 'Katheline']
print ("The original list is", tmplist)
print ("The first four elements in the list are:", tmplist[0:4])
print ("The number of elements in the list are", len(tmplist))
m=input ("Enter a name to add to the list ")
tmplist.append(m)
print ("The elements in the list now are", tmplist)
n=int(input ("Enter the element number to delete "))
del tmplist[n-1]
print ("The elements in the list now are", tmplist)
print ("The elements in the list can also be displayed as shown:")
for i in range(0, len(tmplist)):
print (tmplist[i])
Output:
The original list is ['John', 'Kelly', 10, 'Caroline', 15, 'Steve', 'Katheline']
The first four elements in the list are: ['John', 'Kelly', 10, 'Caroline']
The number of elements in the list are 7
Enter a name to add to the list Rebecca
The elements in the list now are ['John', 'Kelly', 10, 'Caroline', 15, 'Steve', '
Katheline','Rebecca']
Enter the element number to delete 2
The elements in the list now are ['John', 10, 'Caroline', 15, 'Steve', 'Katheline'
,'Rebecca']
The elements in the list can also be displayed as shown:
John
10
Caroline
15
Steve
Katheline
Rebecca

Este programa define siete elementos por el nombre tmplist. En


primer lugar, mostrar todos los elementos de la lista. Luego, con el
mtodo de la divisin, se muestra los primeros cuatro elementos de
la lista.
Imprimir el recuento de los elementos de la lista mediante la
funcin len(). Luego pida al usuario que introduzca un elemento que
se van a aadir a la lista. Los datos introducidos por el usuario se
aaden a la lista mediante el mtodo append().
Luego le pide al usuario que introduzca la ubicacin del elemento
que se requiere para ser removido de la lista. Sabiendo que el
usuario contar el lugar comenzando desde el valor 1, mientras que
los elementos de la lista comienzan a valor de ndice 0, disminuir
la ubicacin introducida por el usuario para el 1 de manera que
coincida con la ubicacin del ndice del elemento que el usuario
desea eliminar de la lista. Por ltimo, con el mtodo del(), el
elemento en esa ubicacin de ndice se elimina de la lista.
El programa siguiente muestra cmo agregar nuevos elementos a la
lista, la bsqueda de un elemento en la lista, y la actualizacin
del elemento.

list7.py
names=[]
n=int(input("How many names? "))
print("Enter", n, "names")
for i in range (0,n):
m=input()
names.append(m)
print ("The original list of names is", names)
p=input ("Enter the name to search: ")
if p in names:
print ("The name", p, "is found in the list at location ", names.index(p)+1)
else:
print ("The name", p, "is not found in the list ")
q=input ("Enter the name to update/change: ")
if q in names:
loc=names.index(q)
r=input("Enter the new name: ")
names[loc]=r
print ("The name", q, "in the list is changed to", r)
else:
print ("The name", q, "is not found in the list")
names.sort()
print ("Sorted names are", names)
Output:
How many names? 4
Enter 4 names
Kelly
Caroline
David
Beth
The original list of names is ['Kelly', 'Caroline', 'David', 'Beth']
Enter the name to search: David
The name David is found in the list at location 3
Enter the name to update/change: Caroline
Enter the new name: Candace
The name Caroline in the list is changed to Candace
Sorted names are ['Beth', 'Candace', 'David', 'Kelly']

El programa crea una lista vaca, nombres, y pide al usuario que


aada el nmero deseado de nombres (el texto) a la misma.
Despus se agregan algunos nombres a la lista, se muestra su
contenido original. Luego le pide al usuario que introduzca el
nombre que desea buscar. El nombre introducido se busca en la lista
con el nmero de miembros en el operador. Si el nombre se encuentra
en la lista, se muestra su ubicacin; de lo contrario, se muestra el
nombre del mensaje no encontrado.
Despus de buscar la actualizacin viene. El programa pide al
usuario que introduzca el nombre de actualizar. Si no se encuentra
el nombre introducido, se accede a la ubicacin de ndice utilizando
el mtodo index(), y el nuevo nombre se almacena en esa ubicacin
del ndice, reemplazando el nombre antiguo. Por ltimo, el programa
muestra todos los nombres en la lista despus de ordenar
alfabticamente utilizando sort().

Tuples -Tuplas
Las tuplas son un tipo de secuencia, como cadenass. Pero a
diferencia de las cadenas, que pueden contener slo caracteres,
tuplas pueden contener elementos de cualquier tipo. Una tupla es un
objeto inmutable que no se puede cambiar una vez que se haya creado.
Al igual que con todas las secuencias, los ndices de tupla se basan
en cero; el primer elemento est en el ndice 0, y el ltimo
elemento est en el ndice -1.
El programa siguiente muestra cmo se define una tupla y cmo se
accede y visualiza sus elementos:
tup1.py
names=('John', 'Kelly', 'Caroline', 'Steve', 'Katheline')
print ("The names in the tuple are:", names)
print ("The first name in the tuple is", names[0])
print ("The last name in the tuple is", names[len(names)-1])
print ("The names in the tuple are")
for n in names:
print (n)
Output:
The names in the tuple are: ('John', 'Kelly', 'Caroline', 'Steve',
'Katheline')
The first name in the tuple is John
The last name in the tuple is Katheline
The names in the tuple are
John
Kelly
Caroline
Steve
Katheline

En este programa, los nombres de tupla se define que contiene cinco


elementos: John, Kelly, Caroline, Steve, y Catalina. Se muestran
todos los elementos de la tupla, seguido por el primer y el ltimo
elemento. El programa tambin muestra cmo se accede a elementos de
una tupla usando el operador in.
El siguiente programa demuestra la bsqueda de un elemento de una
tupla y la concatenacin de dos tuplas.
tup2.py
names=('John', 'Kelly', 'Caroline', 'Steve', 'Katheline')
n=input("Enter the name to search: ")
if n in names:
print ("The name", n, "is present in the tuple")
else:
print ("The name", n, "does not exist in the tuple")
countries=('U.S.', 'U.K', 'India')
names+=countries
print ("The tuples are concatenated. The concatenated tuple is", names)

Output:
Enter the name to search: Beth
The name Beth does not exist in the tuple
The tuples are concatenated. The concatenated tuple is ('John', 'Kelly',
'Caroline','Steve', 'Katheline', 'U.S.', 'U.K', 'India')

Aqu, los nombres se define como un conjunto de cinco elementos. Se


le pide al usuario que introduzca un nombre que desea buscar. Usando
el nmero de miembros en el operador, el nombre introducido se busca
en la tupla nombres, y se muestra un mensaje.
Tambin, una tupla ms, countries, se define para incluir tres
elementos. Los elementos en los pases se aaden a la tupla nombres.
A continuacin, se muestran los elementos de la tupla concatenados,
nombres.
Asignaciones(mappings) son objetos mutables que se utilizan para
valores de asignacin a los objetos. El mapeado estndar que
discutiremos a continuacin es el diccionario.

Dictionary
Un diccionario es una combinacin de pares key/value en el que cada
key tiene que ser nico. Pares clave / valor estn separados por dos
puntos, y los pares se separan por comas. Los pares clave / valor
estn encerrados en una llaves.
Syntax:
d = {key1 : value1, key2 : value2 }

Los diccionarios son mutables, lo que significa un diccionario puede


ser modificado, y usted no tiene que crear una copia del mismo para
modificarlo. Claves de los diccionarios son sensibles e inmutable
porque Python los asocia con un nmero nico llamado hash. Adems,
las claves de diccionario pueden ser de tipos mixtos de datos:
cadenas, enteros, y otros. Tabla 3.5 muestra algunos de los mtodos
que se pueden aplicar al diccionario.

El programa siguiente muestra cmo recuperar un valor del


diccionario mediante el suministro de una clave. Adems, el programa
muestra cmo agregar un par clave / valor a un diccionario existente
y eliminar un par clave / valor existente. El programa muestra el
uso del diccionario en el acceso a la capital del pas cuyo nombre
sea escrito por el usuario.
dict1.py
countrycap={'U.S.':'Washington D.C.','U.K.':'London','India':'New Delhi', }

n=input('Enter country: ')


if n in countrycap:
print ('The capital of', n , 'is', countrycap[n])
else:
print ('Sorry the country', n, 'does not exist in our dictionary')
countrycap['Australia']='Sweden'
print ('The dictionary after adding a country:')
for country, capital in countrycap.items():
print ('Capital of', country, 'is' , capital)
m=input('Enter the country to delete:')
del countrycap[m]
print ('The dictionary after deleting a country:')
for country, capital in countrycap.items():
print ('Capital of', country, 'is' , capital)

Output:
Enter country: U.S.
The capital of U.S is Washington D.C.
The dictionary after adding a country:
Capital of U.S. is Washington D.C.
Capital of Australia is Sweden
Capital of India is New Delhi
Capital of U.K. is London
Enter the country to delete: U.K.
The dictionary after deleting a country:
Capital of U.S. is Washington D.C.
Capital of Australia is Sweden
Capital of India is New Delhi

Este programa define un diccionario llamado countrycap con tres


pares clave / valor en ella. Las claves son los nombres de los
pases de Estados Unidos, Reino Unido y la India, y los valores de
estas claves son las respectivas capitales de los pases. Usted le
pide al usuario que introduzca el nombre de un pas cuya capital es
obligatorio. Tomando el nombre del pas ingres como clave, se
accede y visualiza su valor respectivo. Un par clave / valor se
aade al diccionario, con Australia como clave y Suecia como su
valor. El programa tambin muestra los elementos del diccionario,
cada pas con su respectiva capital. El programa tambin elimina el
par de pases / capitales que desee en el diccionario.
El siguiente programa muestra el uso de metodos items(), keys(),
values() y get() del diccionario. Adems, muestra cmo se fusionan
dos diccionarios.
dictexample.py
student1={'John' : 60, 'Kelly' : 70, 'Caroline' : 80}
student2=dict([('David', 90), ('John',55)])
print ('The items in dictionary student1 are:', student1.items())
print ('The keys in student1 dictionary are:', student1.keys())
print ('The values in student1 dictionary are:', student1.values())
student1.update(student2)
print ('The items in dictionary student1 after merging with student2
dictionary are:',student1.items())
n=input('Enter name whose marks you want to see: ')
if n in student1:
print ('The marks of', n , 'are' , student1.get(n))
else:
print ('Sorry the name', n, 'does not exist in student1 dictionary')
Output:
The items in dictionary student1 are: dict_items([('Kelly', 70), ('John', 60),
('Caroline', 80)])
The keys in student1 dictionary are: dict_keys(['Kelly', 'John', 'Caroline'])
The values in student1 dictionary are: dict_values([70, 60, 80])
The items in dictionary student1 after merging with student2 dictionary are:
dict_items([('Kelly', 70), ('John', 55), ('Caroline', 80), ('David', 90)])
Enter name whose marks you want to see: Caroline
The marks of Caroline are 80

El programa define dos diccionarios, student1 y student2. El


diccionario student2 se crea mediante la aplicacin de la funcin
dict() a los pares de valores.
Todos los pares clave / valor del diccionario student1 se muestran
usando la funcin items(). Adems, se accede a las claves y los
valores del diccionario student1 a travs de las funciones de las
keys() y values() y se muestran. Los pares clave / valor de la
student2 diccionario se fusionan con el diccionario studen1.
Si bien la fusin, los valores de las claves en el diccionario de
student1 se actualizarn con los valores de las claves
correspondientes en el diccionario de student2. Se muestran los
pares clave / valor fusionadas. Asimismo, el usuario se le pide que
ingrese el nombre de un estudiante cuyas marcas son obligatorios.
Uso de la funcin get(), se accede y visualiza el nombre
proporcionado.
Vamos a terminar el captulo discutiendo un objeto ms contenedor,
sets.

Sets Conjuntos
Un conjunto es una coleccin de ciertos valores. Puede llevar a cabo
una serie de operaciones de conjunto, incluyendo la unin (|),
interseccin (&), diferencia (-), y diferencia simtrica (^). Vamos
a comenzar con la operacin de unin.

Union (|)
En una operacin de unin, un elemento aparece en la union si existe
en un grupo u otro. Por ejemplo, considere los dos conjuntos S1 y S2
con los siguientes elementos:
S1=set([3,5,6,10,11,100])
S2=set([1,3,5,6,11,15])

S1|S2 mostrar la unin como:


set([1,3,5,6,10,11,15,100]

Intersection (&)
En una operacin de interseccin, los elementos que aparecen en
ambos conjuntos aparecen en la interseccin.
S1 & S2 se mostrarn la interseccin como:
set([3, 5, 6, 11])

Difference (-)
En una operacin de diferencia, todos los elementos que estn en el

conjunto de la izquierda, pero no en el conjunto de la derecha van a


aparecer en la operacin de diferencia.
S1-S2 mostrar la diferencia como:
set([10, 100])

Del mismo modo, S2-S1 mostrar la diferencia como:


set([1, 15])

Echemos un vistazo a los mtodos y las funciones que se pueden


aplicar a los conjuntos. Recuerde que una funcin es un mdulo de
cdigo que se llama por su nombre, y los datos se pasan a ella
explcitamente. Puede devolver un valor. Un mtodo se asocia con un
objeto, y el objeto para el que se llama se pasa al implcitamente.
La lista de funciones y mtodos que se pueden aplicar a los
conjuntos se da en la Tabla 3.6.

El siguiente programa muestra el uso de mtodos set como max (), min
(), any(), all(), sum(), y se sorted(). El programa tambin
demuestra la aplicacin de unin, interseccin, diferencia, y las
operaciones de fusion de los conjuntos .

setexample.py
S1=set([3,5,6,10,11,100])
S2=set([1,3,5,6,11,15])
print ('Length of set S1 is:', len(S1))
print ('Maximum value in set S1 is:' , max(S1))
print ('Minimum value in set S2 is:' , min(S2))
print ('Sum of items in set S1 is:', sum(S1))
print ('Applying any() to set S1 results into:', any(S1))
print ('Union of the two sets is:', S1 j S2)
print ('Intersection of the two sets is:', S1 & S2)
print ('Difference of S1-S2 is:' , S1 - S2)
print ('Difference of S2-S1 is:' , S2 - S1)
S1.add(0)
print ('The items in set S1 after adding an item are:' , sorted(S1))
print ('As set S1 now has a value 0, so all() will result into:',
all(S1))
S1.update(S2)
print ('The items in set S1 after merging set S2 are:' , sorted(S1))
Output:
Length of set S1 is: 6
Maximum value in set S1 is: 100
Minimum value in set S2 is: 1
Sum of items in set S1 is: 135
Applying any() to set S1 results into: true
Union of the two sets is: {1, 3, 100, 5, 6, 10, 11, 15}
Intersection of the two sets is: {11, 3, 5, 6}
Difference of S1-S2 is: {10, 100}
Difference of S2-S1 is: {1, 15}
The items in set S1 after adding an item are: [0, 3, 5, 6, 10, 11, 100]
As set S1 now has a value 0, so all() will result into: false
The items in set S1 after merging set S2 are: [0, 1, 3, 5, 6, 10, 11,
15, 100]

Este programa muestra el recuento del nmero de elementos en el


conjunto, el valor ms alto, el valor ms bajo, y la suma de los
valores en el conjunto. La aplicacin de la funcin de any() en
conjunto S1 devuelve true, ya que contiene varios valores distintos
de cero. El programa tambin muestra la unin, la interseccin y la
diferencia de los conjuntos.
Un valor de 0 se aade a la S1 conjunto mediante el mtodo add ().
Adems, el conjunto S1 se muestra despus de la clasificacin de sus
elementos. La aplicacin de la funcin de all() en el set S1
devuelve false ya que ahora contiene un valor de 0. Los elementos en
conjunto S2 se combinan con los elementos del conjunto S1, y el
conjunto resultante de la fusin se muestra despus de ordenar sus
elementos.

Summary
En este captulo se centra en diferentes recipientes. Usted aprendi
a realizar diferentes operaciones en las cadenas, incluida la
concatenacin, la divisin, y su conversin en diferentes casos como
maysculas, caso del ttulo, y en minsculas.
Tambin ha aprendido sobre la lista de corte y elementos en bsqueda
de tuplas. Ha realizado operaciones en conjuntos como la bsqueda de
su unin, interseccin y diferencia. Usted vio cmo se mantienen los
pares clave / valor en un diccionario y cmo aadir, eliminar y
modificar los pares clave / valor. Por ltimo, ha creado matrices de
una y dos dimensiones.

Chapter 4. Functions and Modules


En este captulo se tratan los siguientes temas:

Creacin y uso de funciones


El uso de parmetros de valor predeterminado y argumentos de
palabras clave
Uso de variables locales y globales
Creacin de funciones lambda
La aplicacin de funciones a las secuencias
El uso de atributos de funcin
La implementacin de la recursividad
Utilizacin de iteradores, generadores, y las expresiones
generadoras
Importacin y uso de mdulos
Utilizando argumentos de la lnea de comandos

Comencemos el captulo con las funciones y sus declaraciones.

Functions
Una funcin es un grupo de sentencias que se pueden invocar
cualquier nmero de veces. Adems de las funciones incorporadas,
puede definir sus propias funciones. La afirmacin de que invoca una
funcin se conoce como una llamada de funcin.
Al llamar a una funcin, se pueden pasar argumentos a ella para
realizar el clculo deseado. En Python, una funcin siempre devuelve
un valor que puede ser None o que representa la tarea realizada por
la funcin.
En Python, las funciones son tratados como objetos, y por lo que
puede pasar una funcin como argumento a otra funcin. Del mismo
modo, una funcin puede devolver otra funcin. Adems, una funcin,
al igual que cualquier otro objeto, se puede enlazar a una variable,
un elemento de un contenedor o un atributo de un objeto.
Echemos un vistazo a las afirmaciones utilizadas en la definicin de
una funcin.

The def Statement - La Declaracin def


La instruccin def se usa para definir una funcin.
Syntax:
def function-name(parameters):
statement(s)
donde nombre-funcin es un identificador para reconocer la funcin.
parmetros es una lista opcional de identificadores que se enlazan a
los valores proporcionados como argumentos al llamar a la funcin.
Cuando se llama a una funcin, los datos que enve a la funcin se
llama argumentos y las variables de la funcin que reciben los
argumentos se llaman parmetros. Por lo tanto, mientras que llamar a
una funcin, se debe pasar el mismo nmero de argumentos, ya que hay
parmetros que figuran en la definicin de la funcin. Los
parmetros son variables locales de la funcin, y cada llamada a la
funcin se une estas variables locales a los valores
correspondientes se pasan como argumentos. El cuerpo de la funcin
puede contener cero o ms apariciones de la sentencia return.
El programa siguiente muestra la suma de dos valores numricos
utilizando un funcin.
func1.py
def sum(a, b):
return a + b
k=sum(10,20)
print ("Sum is", k)
Output:
Sum is 30
En este programa, una funcin sum() se llama, que pasa dos
argumentos 10 y 20. Los argumentos 10 y 20 sern asignados a los
parmetros a y b, se define en la funcin suma().
La funcin suma() calcula la suma de los valores asignados a los
parmetros a y b y devuelve el resultado al programa principal. El
resultado se asigna a la variable k en el programa principal, que se
muestra a continuacin.

The return Statement - La Declaracin de retorno

La instruccin de retorno se utiliza para el retorno de salida de la


funcin. La declaracin est opcionalmente seguido de una expresin.
Cuando el retorno se ejecuta, la funcin termina, y el valor de la
expresin se pasa a la persona que llama. Cuando no hay nada que se
devolver a la persona que llama, la funcin devuelve Ninguno-None.
Si una funcin no requiere datos externos al proceso, se puede
definir sin parmetros. El programa siguiente muestra una funcin
que toma ningn parmetro y devuelve un valor:
func3.py
def quantity():
return 10
print (quantity())
q=quantity()
print (q)
Output:
10
10
En este programa, una funcin de la cantidad() se define que no toma
parmetros. Al llamar a la funcin en una sentencia de impresin,
imprime el valor de 10 que se devuelve. En la siguiente llamada de
funcin, se asigna el valor devuelto a la variable de q, que se
muestra a continuacin.
El siguiente programa pide al usuario que introduzca un valor
numrico entre 1 y 4 y lo muestra en forma de texto. Por ejemplo, si
el usuario introduce 1, el programa mostrar uno. Si el usuario
introduce 2, el programa mostrar dos, y as sucesivamente.
func4.py
def conv(x):
if x==1:
return
if x==2:
return
if x==3:
return
if x==4:
return

"one"
"two"
"three"
"four"

n=int(input("Enter a number between 1 and 4: "))


print (n, "in words is", conv(n))
Output:
Enter a number between 1 and 4: 3
3 in words is three
El programa pide al usuario que introduzca un valor entre 1 y 4 que

se convierte a entero tipo de datos y se asigna a una variable n. La


variable n se pasa como un argumento a la funcin conv(). En conv(),
n se asigna al parmetro x. El uso de sentencias if, se analiza el
valor del parmetro x, y se devuelve su forma de texto.
A veces usted quiere una funcin para devolver un valor de None.
Considere una situacin en la que el valor pasado al parmetro de la
funcin no se encuentra dentro del rango esperado. Es decir, los
datos pasados no es adecuado para realizar cualquier procesamiento
en l. Usted desea que la funcin para omitir su cuerpo y devolver
Ninguno. El programa siguiente muestra el formato de texto del
nmero pasado entre 1 y 4. Si el nmero pasado es 0, la salida ser
None.
passex2.py
def conv(x):
if x==0:
pass
if x==1:
return
if x==2:
return
if x==3:
return
if x==4:
return

"one"
"two"
"three"
"four"

print (conv(2))
print (conv(0))
Output:
two
None
Se puede ver que cuando el valor 2 se pasa como un argumento a la
funcin conv(), el respectivo si se ejecuta la declaracin para
mostrar el texto dos. Cuando 0 se pasa a la funcin conv(), el
primero si se ejecuta la declaracin de la funcin.
No hace nada, ya que contiene la sentencia pass, por lo que se
devuelve None. Recuerde que la sentencia pass indica un bloque vaco
de enunciados. Se utiliza por lo general como un marcador de
posicin para el cdigo va a escribir ms tarde.

Default Value Parameters- Parmetros Valor predeterminado


Los parmetros enumerados en la definicin de la funcin pueden ser
obligatorios u opcionales. Los parmetros obligatorios son aquellos
cuyo valor tiene que ser suministrado en forma de argumentos cuando
se llama a la funcin. Los parmetros opcionales son aquellos cuyo
valor puede o no puede ser pasado al llamar a la funcin. Un

parmetro opcional se define con la siguiente sintaxis:


identifier=expression
La expresin se evala y se asigna como el valor predeterminado para
el identificador. Cuando una llamada de funcin no proporciona un
argumento corresponde a un parmetro opcional, la llamada se enlaza
el parmetro a su valor por defecto.
El programa siguiente muestra el uso de un parmetro predeterminado.
En este programa, se define una funcin que tiene dos parmetros;
una es obligatoria, y la otra es opcional o el defecto. Cuando la
llamada a la funcin pasa el valor para el parmetro por defecto, se
aplica el valor pasado; de lo contrario se aplica el valor
predeterminado.
func2.py
def sum(x, y=10):
return x+y
print (sum(10))
print (sum(5,8))
Output:
20
13
En este programa, la funcin sum() se llama dos veces. En la primera
llamada, slo un argumento, 10, se transmite y se asigna al
parmetro x. La funcin tomar el valor por defecto del parmetro y
(10), mientras que la ejecucin de la funcin. En la segunda llamada
a la funcin suma(), los argumentos 5 y 8 se pasan y se asignan a
los parmetros x e y, respectivamente. El valor por defecto de y, el
10, se ignora, y se aplica el valor pasado como argumento (8).

Keyword Arguments-Argumentos por clave


Si al llamar a una funcin que se desea suministrar argumentos para
slo unos pocos de sus parmetros, lo hace al nombrar los parmetros
cuando el paso de argumentos. Un valor pasado a un parmetro por
referencia a su nombre se conoce como un argumento de palabra clave.
La ventaja de utilizar este mtodo es que usted no tiene que
preocuparse por el orden de los argumentos.
El siguiente programa muestra el uso de argumentos de palabra clave
cuando se llama a una funcin.

keywordarg.py

def volume(l, b=5, h=10):


print ('l is', l, 'and b is', b, 'and h is', h, 'and volume
is', l*b*h)
volume(2, 4)
volume(3, h=6)
volume(h=7, l=2)
Output:
l is 2 and b is 4 and h is 10 and volume is 80
l is 3 and b is 5 and h is 6 and volume is 90
l is 2 and b is 5 and h is 7 and volume is 70
La funcin de volumen() tiene tres parmetros, uno que no tiene
ningn valor predeterminado y dos parmetros que hacen. En la
primera llamada a la funcin, el volumen (2,4), el parmetro l
obtiene el valor 2, el parmetro b se obtiene el valor 4, y h toma
su valor por defecto, 10. En la segunda llamada a la funcin, el
volumen (3, h = 6), el parmetro l obtiene el valor 3, debido a la
posicin del argumento. Entonces, el parmetro h obtiene el valor 6
como un argumento de palabra clave. El parmetro b toma su valor por
defecto, 5. En la tercera llamada a la funcin, volumen (h = 7, l =
2), utiliza argumentos de palabra clave para especificar los valores
de los parmetros h y l. El parmetro h tendr 7, l obtendr 2, y b
obtendr el valor por defecto 5.
El mbito de las variables en una funcin depende de si se define a
nivel local o global.

Local and Global Variables


Variables locales y globales
Las variables locales tienen un alcance dentro del cuerpo de la
funcin en la que se definen. Es decir, las variables locales son
accesibles dentro de la funcin. Las variables globales son
accesibles dentro y fuera de las funciones.
nota
Usted obtiene un error si se intenta acceder a una variable
local fuera de la funcin.

Global Variables
Las variables globales no estn vinculados a cualquier funcin
particular, y se puede acceder dentro del cuerpo de la funcin,
fuera del cuerpo de la funcin, o por cualquier otra funcin. Los
cambios realizados en una variable global por cualquier funcin
sern visibles por otras funciones. Si una funcin de las
necesidades de las variables globales, la primera declaracin de la

funcin debe ser la siguiente:


global identifiers
donde los identificadores es uno o ms identificadores separados por
comas. Identificadores enumerados en una declaracin global se
conocen como variables globales.
Se utiliza la palabra clave global para definir una variable global;
de otro modo, una excepcin Error UnboundLocal se eleva debido a que
la variable es una variable sin inicializar (sin consolidar) local.
El siguiente programa se explica el concepto de variables globales.
Lo ms importante a observar en este programa es cmo los cambios
realizados en la variable global por una de las funciones se pueden
ver en otra funcin.
globalvar.py
def compute():
global x
print ("Value of x in compute function is", x)
x += 5
return None
def dispvalue():
global x
print ("Value of x in dispvalue function is", x)
x-=2
return None
x=0
compute()
dispvalue()
compute()
Output:
Value of x in compute function is 0
Value of x in dispvalue function is 5
Value of x in compute function is 3

En este programa, se definen dos funciones, compute()y dispvalue().


Ambas funciones definen una variable global, x. Recuerde, las
variables globales estn disponibles en todas las partes del
programa, en el programa principal, as como funciones. Los cambios
realizados en las variables globales son visibles en otras partes
del programa. Usted puede ver que la variable global x se inicializa
a 0 en el programa principal. El programa principal llama a la
funcin de compute() para imprimir el valor de la variable global y
modificar su valor.
El valor de la variable global x es 0, la funcion compute() imprime

0, incrementa su valor por 5, y vuelve al programa principal. El


programa principal llama al dispvalue() para mostrar y modificar la
variable global. El valor de la variable global x se fij a 5 por la
funcin compute() y por lo tanto la funcin dispvalue() imprime su
valor como 5 y disminuye su valor por 2, por lo que es 3, y vuelve
al programa principal.
El programa principal llama a la funcin de compute() de nuevo para
ver si los cambios realizados en x en la funcin dispvalue() son
visibles en compute(). La funcin de compute() muestra el valor
actual de x (3) e incrementa el valor de x por 5, por lo que es 8, y
vuelve al programa principal. Esto confirma que la variable global
es accesible en todas las partes del programa, y los cambios
realizados en la variable global en una parte del programa se ver
en otra parte.
Veamos ahora cmo se definen y se puede acceder en funcin de
variables locales.

Local Variables
De forma predeterminada, cualquier variable que se une dentro de un
cuerpo de la funcin es una variable local. Cada funcin tiene su
propia copia de una variable local, y su valor no es accesible o
modificable fuera del cuerpo de la funcin.
El siguiente programa muestra el uso de variables locales:
localvar.py
def compute(x):
x += 5
print ("Value of x in function is", x)
return None
x=10
compute(x)
print ("Value of x is still", x)
Output:
Value of x in function is 15
Value of x is still 10
El programa principal inicializa el valor de la variable local x en
10. La variable x se pasa a la funcin de computo() como un
argumento. En la funcin de computo(), el valor del parmetro x se
incrementa en 5, haciendo su valor 15. Pero ellos x es local para la
funcin, el valor modificado de x (15) slo es visible dentro del
cuerpo de la funcin compute(). Cuando se muestra el valor de x en
la funcin cmpute(), se imprimir el valor modificado 15, pero
cuando regresa al programa principal, el programa recoge el valor
anterior de x (10). Por lo tanto, el programa principal se imprime
el valor antiguo de x, 10.

A veces es necesario crear funciones muy pequeas, que consiste en


una nica lnea. Se puede manejar este tipo de pequeas funciones
en Python? S. Vamos a ver cmo.

Lambda Functions
Para las funciones que son lo suficientemente pequeas (una
expresin de una sola lnea) y que van a ser usados slo una vez,
por lo general no define los objetos de funcin. En cambio, el uso
de funciones lambda.
Una funcin lambda es una funcin annima y de slo un solo uso que
puede tener cualquier nmero de parmetros y que hace algn clculo.
El cuerpo de la funcin lambda es pequeo, una sola expresin. El
resultado de la expresin es el valor cuando se aplica la lambda
para un argumento. No hay necesidad de una instruccin de retorno en
las funciones lambda.
nota
El mbito de aplicacin de una funcin lambda es limitada. Slo
existe en el mbito de la ejecucin de una sola sentencia.
Considere una pequea funcin que multiplica un argumento pasado por
2 y devuelve, como se muestra aqu:
def f(x):
return x*2
f(3)
6
Se puede ver que una funcin f toma un parmetro x que vuelva al
multiplicar por 2. Al llamar a la funcin con el argumento 3,
volver 6 como salida. Puede volver a escribir esta funcin como una
funcin lambda:
g = lambda x: x*2
g(3)
6
Se puede ver que la funcin lambda no tiene nombre y se llama a
travs de la variable que est asignado.
Usted puede utilizar una funcin lambda incluso sin asignarla a una
variable. La siguiente es una funcin lambda sin nombre que acepta
un solo argumento. Se multiplica el argumento por 2 y devuelve el
resultado:
(lambda x: x*2)(3)
6
Se puede ver que no hay parntesis alrededor de la lista de

argumentos, y la palabra clave return no se encuentra. El regreso


est implcita en la funcin lambda como toda la funcin se compone
de una sola expresin.
nota
Una funcin lambda no puede contener comandos y no puede
contener ms de una expresin.

Applying Functions to Sequences


La aplicacin de funciones a secuencias
Ahora que usted sabe acerca de la definicin y llamar a funciones,
vamos a aplicar a las secuencias. En el captulo anterior, usted
aprendi sobre los tres tipos de secuencias: secuencias, listas y
tuplas. Los tres mtodos de esta seccin son filter(), map(), y
reduce(). Para poner en prctica estos mtodos, el uso de funciones.
filter(function, sequence)
El mtodo filter() devuelve una secuencia que consta de los
elementos para los cuales la funcin devuelve true, incluidos los
que cumplen con los criterios que figuran en la funcin
especificada.
Si la funcin se incluye None, el mtodo devuelve los elementos de
la secuencia que se supone deben ser devueltos cuando la funcin
devuelve True. Vamos a examinar el uso de este mtodo con un
ejemplo. El siguiente programa filtra los valores impares y devuelve
slo los valores pares utilizando el mtodo filter().
def evenval(x):
return x % 2 ==0
evens=filter(evenval, range(1,11))
print(list(evens))
Output:
[2,4,6,8,10]
En este ejemplo, se ve que el mtodo filter() utiliza una funcin
evenval() y un mtodo range(). El mtodo de rango (1,11) generar
valores numricos de 1 a 10, que luego se pasa a la funcin
evenval()como argumentos.
La funcin evenval() divide el valor del parmetropor 2, se compara
con el resto 0, y devuelve true o false. La funcin devolver
verdadero si el resultado de la operacin mod es 0, lo que indica
que el valor del parmetro es par.
La funcin devolver false si el resultado de la operacin mod es 1,

lo que indica que el valor del parmetro es impar. Dado que el


mtodo filter() slo devolver aquellos valores para los cuales la
funcin incluida devuelve true, el programa mostrar slo los
valores pares.
map(function, sequence)
El mtodo de mapa llama a la funcin incluida para cada uno de los
elementos de la secuencia y devuelve una lista de los valores
devueltos.
El siguiente ejemplo muestra los valores cuadrados de los 10
primeros nmeros de la secuencia utilizando el metodo mapa():
def square(x):
return x*x
sqr=map(square, range(1, 11))
print(list(sqr))
Output:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
En este ejemplo, el mtodo de map() incluye una funcin cuadrado() y
un mtodo range(). El mtodo de rango (1,11) generar valores
numricos de 1 a 10, que luego se pasa a la funcin cuadrado() como
argumentos. La funcin cuadrado() simplemente devuelve el cuadrado
del parmetro proporcionado. El programa mostrar los valores
cuadrados de los 10 primeros nmeros de secuencia.
Veamos un ejemplo del mtodo map() que convierte los elementos de la
secuencia suministrada en valores enteros.
k=map( int, [ 5, 10.15, 20, 25.628, 7 ] )
print (list(k))
Output:
[5, 10, 20, 25, 7]
En este programa, se ve que el mtodo del map() incluye una funcin
de int() y una lista de valores. La lista incluye los valores de
diferentes tipos, incluyendo nmeros enteros, punto flotante y
enteros largos. La funcin int() trunca los elementos de la lista de
nmeros enteros.
nota
Tambin se puede pasar ms de una secuencia en un mtodo map().
La funcin incluida en su map() se establece a continuacin
para aceptar varios argumentos. Los elementos correspondientes
de cada secuencia se proporcionan como argumentos de la
funcin. Si cualquier secuencia se queda corto, ninguno se
utiliza para los valores perdidos.
reduce(function, sequence)

El mtodo reduce() devuelve un valor nico que se produce al llamar


a la funcin de los dos primeros elementos de la secuencia. La
funcin a continuacin, se llama en el resultado de la funcin y el
siguiente elemento de la secuencia, y as sucesivamente. Por
ejemplo, la siguiente metodo reduce() mtodo calcula la suma de los
nmeros del 1 al 10:
import functools
def add(x,y):
return x+y
r=functools.reduce(add, range(1, 11))
print(r)
Output:
55
Aqu, el mtodo de reduce(), que es la parte de mdulo de functools,
incluye una funcin de add() y un mtodo range(). El mtodo del
rango (1,11) devolver los valores de 1 a 10. Los dos primeros
valores generados por el metodo rango() se pasan a la funcin
especificada, add (), y el resultado (3) y el siguiente valor en el
secuencia (3) son de nuevo pasa a la funcin add().
Una vez ms, el resultado de la suma (6) y el siguiente valor de la
secuencia (4) se pasa a la funcin add(). Cuando se aplican todos
los valores generados por el mtodo range(), el resultado final es
devuelto por la funcin add () para la exhibicin.
nota
El mdulo functools se importa en la parte superior debido a
que el metodo reduce() se define en ese mdulo. Usted aprender
ms acerca de los mdulos ms adelante en este captulo
Python proporciona una facilidad para acceder a informacin ms
especfica de una funcin de atributos de funcin.

Function Attributes Atributos de funcin


Un objeto de funcin tiene una serie de atributos que se pueden
utilizar para obtener ms informacin acerca de una funcin.
Tambin, usted puede cambiar estos atributos. Una lista de los
atributos de la funcin se muestra en la Tabla 4.1.

Table 4.1. Function Attributes


Attribute

Description

functionname.__doc__

Representa la cadena de documentacin de la


primera lnea del cuerpo de la funcin.

functionname.__name__

Representa el nombre de la funcin.

functionname.__module__

Representa el nombre del mdulo en el que se


define la funcin.

functionname.__defaults__

Representa la tupla con los valores por defecto


que se asignar a los argumentos predeterminados
de la funcin.

functionname.__code__

Representa el objeto de cdigo actual, las


declaraciones contenidas en el cuerpo de la
funcin.

functionname.__dict__

Representa el diccionario que define el espacio de


nombres local para los atributos de la funcin.

nota
Puede configurar y obtener sus propios atributos de funcin,
tambin.
El siguiente programa muestra el uso de la funcin de los atributos
para mostrar informacin especfica de la funcin, como su versin,
autor, docstring y argumentos por defecto.
funcattrib.py
def sum(a, b=5):
"Adds the two numbers"
return a + b
sum.version= "1.0"
sum.author= "bintu"
k=sum(10,20)
print ('Sum is', k)
print('The documentation string is', sum.__doc__)
print('The function name is', sum.__name__)
print('The default values of the function are', sum.__defaults__)
print('The code object of the function is', sum.__code__)
print('The dictionary of the function is', sum.__dict__)
Output:
Sum is 30
The documentation string is Adds the two numbers
The function name is sum
The default values of the function are (5,)
The code object of the function is <code object sum at 0x00F11250, file
"D:\python\
funcattrib.py", line 1>
The dictionary of the function is {'version': '1.0', 'author': 'bintu'}

En este programa, la informacin de la versin y el autor de la


funcin suma() se encuentra en la forma de un diccionario, en el
patrn de clave/valor. A partir de entonces, la funcin suma() se
llama con dos argumentos, 10 y 20, que se asignan a los parmetros a
y b, respectivamente. La primera lnea en el cuerpo de la funcin es
la cadena de documentacin. Es decir, la cadena de documentacin o
atributo __ doc__ de la funcin, sum(), se establece en el texto
Aade los dos nmeros.
A partir de entonces, la cadena de documentacin y sus argumentos
por defecto se visualizan mediante la impresin de los atributos
__doc__, __name__ y __defaults__. Por ltimo, el objeto de cdigo y
el diccionario de la funcin se visualizan a travs de los atributos
__code__ y __dict__.

Documentation String
La cadena de documentacin (docstring) ayuda a documentar el
programa mejor y hace que sea ms fcil de entender. Una cadena en
la primera lnea lgica de una funcin es la cadena de documentacin
para esa funcin. Para mostrar una cadena de documentacin, se
utiliza el atributo siguiente:
__doc__

Esto muestra la documentacin de la funcin, una clase o mdulo.


nota
La cadena de documentacin se aplica
las clases de las que hablaremos ms
declaracin en el cuerpo de la clase
compilador se une que la cadena como
documentacin de la clase.

tambin a los mdulos y


adelante. Si la primera
es una cadena literal, el
el atributo de cadena de

El programa siguiente muestra la cadena de documentacin de varias


lneas de una funcin:
docstr.py
def rect(l,b):
'''Computes the area of rectangle
Values for length and breadth are passed to the function for
computation'''
print ('Area of rectangle is', l*b)
rect(5,8)
print (rect.__doc__)
Output:
Area of rectangle is 40
Computes the area of rectangle
Values for length and breadth are passed to the function for computation

El atributo __ doc__ muestra la cadena de documentacin de la


funcin.

Puede una funcin llame a s mismo? Si el procedimiento se llama


recursividad.

Recursion - La recursividad
La recursividad se dice que ocurre cuando una funcin se llama a s
mismo. Como era de esperar, una funcin que se autodenomina generar
llamadas a funciones recursivas y resultar en un bucle infinito.
Cuando la aplicacin de la recursin, una condicin de salida debe
ser incluido en la funcin.
nota
La recursin se implementa con la ayuda de una estructura
conocida como una pila.
Vamos a examinar el concepto de recursividad a travs de un ejemplo.
El siguiente programa calcula la suma de 10 nmeros utilizando
recursividad:
recurfunc.py
def addseq(x):
if x == 1: return 1
else: return x + addseq(x-1)
print ('The sum of first 10 sequence numbers is', addseq(10))
Output:
The sum of first 10 sequence numbers is 55

La funcin addseq() es llamada, pasando el valor 10 a la misma, que


ser asignado a su parmetro x. En el cuerpo de la funcin, se ve
que la primera lnea define la condicin de salida. La funcin
termina o salidas, volviendo 1, si el valor del parmetro x es 1.
Dado que el valor actual del parmetro es 10, se ejecuta una
instruccin else, que es 10 + addseq (9).
La sentencia else llama a la funcin addseq() recursivamente,
pasando el valor 9 para el parmetro x. Una vez ms la sentencia
else se llama, que ejecuta la sentencia 9 + addseq (8)
Una vez ms, la funcin addseq() se llama, que pasa 8 a su parmetro
x, lo que resulta en una instruccin que se est ejecutando otra
cosa. El proceso contina hasta que el valor del parmetro x se
convierte en 1, en cuyo caso se cierra la funcin, volviendo 1 La
ejecucin de la funcin se muestra aqu:
10+addseq(9)
9+ addseq(8)
8+ addseq(7)
...
...
2+ addseq(1)
1

La expresin final devuelve desde la funcion addseq(10) llamado es


10 9 8 7 6 ... 1. El programa muestra 55, que es la suma de los
nmeros 10.
Vamos a escribir un programa ms en la recursividad. El siguiente
programa calcula el factorial de 5 a travs de la recursividad.
factorial.py
def fact(x):
if x == 1: return 1
else: return x * fact(x-1)
print ('The factorial of 5 is', fact(5))
Output:
The factorial of 5 is 120

La llamada a la funcion fact(5) pasa 5 a la funcin fact(), que se


asignar a su parmetro x. La primera sentencia de la funcin es una
condicin de salida que asegura que la funcin terminar,
devolviendo a 1 si el valor del parmetro x se convierte en 1. Dado
que el valor del parmetro x en la primera llamada a la funcin es
5, la declaracion else se ejecuta y devuelve la siguiente
declaracin:

5 * fact(4)
La llamada a la funcion fact(4) pasar 4 al parmetro x, y de nuevo
se ejecutar la sentencia else y regresar la siguiente declaracin:

4* fact(3)
Una vez ms la llamada a la funcion fact(3) pasar 3 al parmetro x,
lo que resulta en la ejecucin de la sentencia else otra vez. El
proceso contina hasta que el valor asignado al parmetro x es 1, en
cuyo caso se cierra la funcin, devolviendo 1. La expresin completa
que resulta en la ejecucin de la programa es la siguiente:

5*4*3*2*fact(1) or
5*4*3*2*1
El programa imprime el resultado como 120, que es el factorial de 5.

Iterators - Los iteradores


Los iteradores se utilizan para recorrer a travs de las colecciones
de datos. Cada vez que utilice un bucle en una lista, iteradores se
invocan en el fondo para la recuperacin de datos. Un iterador tiene
un mtodo next() que se puede llamar para obtener cada valor de la
secuencia. Cuando se aplican todos los valores, se produce una
excepcin StopIteration. Usted aprender acerca de la gestin de

excepciones en el Captulo 6, "Administracin de archivos." Por el


momento es suficiente saber que lanzar una excepcin significa una
ocurrencia de algn tipo de error.
Para crear un objeto iterador, es necesario llamar al mtodo iter().

iter(object)
El mtodo iter() se utiliza para obtener un objeto iterador. El
mtodo iter (objeto) se pide que el metodo de objeto __ iter__
conseguir un objeto iterador. Una vez, se obtiene un objeto
iterador, se puede recorrer en iteracin el objeto utilizando su
mtodo next().
El siguiente programa muestra todos los elementos de una lista con
el objeto iterador:
createiter.py
names=['John', 'Kelly', 'Caroline', 'Paula']
i = iter(names)
print (i.__next__())
print (i.__next__())
print (i.__next__())
print (i.__next__())
print (i.__next__())
Output:
John
Kelly
Caroline
Paula
Traceback (most recent call last):
File "D:\python\createiter.py", line 7, in <module>
print (i.__next__())
StopIteration

En este programa, la lista est definido, los names, que contiene


cuatro elementos: John, Kelly, Caroline, y Paula. Un objeto
iterador, i, se crea a partir de la lista names mediante la
invocacin del mtodo iter().
A partir de entonces, iterar sobre el objeto i mediante el uso de su
mtodo next() y mostrar todos los cuatro elementos de la lista. La
ltima llamada a next() se hace deliberadamente para aumentar la
excepcin StopIteration y para mostrar el mensaje de error que
genera.
Las dos formas de crear iteradores que vamos a discutir la prxima
estn utilizando generadores y el uso de las expresiones
generadoras.

Generators Generadores
Un generador es una funcin que crea un iterador. Para una funcin
para convertirse en un generador, debe devolver un valor mediante la
palabra clave de yield. En otras palabras, la funcin de generador
utiliza la palabra clave de yield para obtener el siguiente valor en
el recipiente.

yield
La declaracin de yield se utiliza slo cuando se define una funcion
de generador funciones y slo se utiliza en el cuerpo de la funcin
de generador. La presencia de una declaracin de yield en una
definicin de la funcin normal de la convierte en una funcin de
generador. Cuando un generador de funciones se llama, devuelve un
iterador conocido como un iterador generador, o simplemente un
generador. El cuerpo de la funcin del generador es ejecutada por
una llamada al mtodo del generador __ next__ () varias veces hasta
que se produzca una excepcin.
generatorex.py
def fruits(seq):
for fruit in seq:
yield '%s' % fruit
f=fruits(['Apple', 'Orange', 'Mango', 'Banana' ])
print ('The list of fruits is:' )
print (f.__next__())
print (f.__next__())
print (f.__next__())
print (f.__next__())
f=fruits(['Apple', 'Orange', 'Mango', 'Banana' ])
print ('The list of fruits is:' )
for x in f:
print (x)
Output:
The list of fruits is:
Apple
Orange
Mango
Banana
The list of fruits is:
Apple
Orange
Mango
Banana

En este programa, la funcin de las frutas() se ha convertido en un


generador de funciones, ya que contiene una palabra clave de yield.
El generador de esta funcion frutas() devuelve esta asignacion a una
variable, f. En una llamada al mtodo __ next__() de la f generador,
la primera cadena de la lista, Apple, se rindi. Cuando se llama al
mtodo __ next__() por primera vez en el generador, la ejecucin del
generador de la funcin de frutas comienza y contina hasta que se
encuentra la palabra clave de yield.
En cada llamada sucesiva del mtodo __ next__ (), la ejecucin de la
funcin de generador continuar en la instruccin que sigue a la
palabra clave de rendimiento, lo que resulta en que produce la
siguiente cadena en secuencia. Desde la declaracin de rendimiento
se produce dentro de un bucle, la ejecucin continuar dentro del
bucle. El programa tambin muestra todos los cadenas a travs del
objeto generador.
Si se llama a __ next__() despus de eso, usted consigue una
excepcin:
Traceback (most recent call last):
File "D:\python\generatorex.py", line 12, in <module>
print (f.__next__())
StopIteration

Al lado de los generadores, hay una forma ms para crear iteradores,


y que es a travs de la expresin del generador.

Generator Expression - Expresin Generador


Una expresin generadora es una expresin entre parntesis que crea
un objeto iterador. Al llegar el objeto iterador, se puede llamar al
mtodo __ next__ () para obtener el siguiente valor del iterador
como se ha visto en los dos programas anteriores. La expresin
generador es como una funcin annima que produce valores y por lo
general se compone de al menos una de clusula y cero o ms si
clusulas. La expresin generadora que se va a utilizar en el
siguiente programa consiste en un bucle for:

(squarenum(x) for x in range(6))


Esta expresin generador producir un objeto iterador.
genexpression.py
def squarenum(x):
return x*x
iteratorobj = (squarenum(x) for x in range(6))
print('The squares of first five sequence numbers')
print (iteratorobj.__next__())
print (iteratorobj.__next__())
print (iteratorobj.__next__())
print (iteratorobj.__next__())
print (iteratorobj.__next__())
print (iteratorobj.__next__())

Output:
The squares of first five sequence numbers
0
1
4
9
16
25

En este programa, se puede ver que la expresin de generador


(squarenum (x) for x in range (6)) crea un objeto iterador, que
luego se asigna a iteratorobj. La expresin generadora llama a la
funcin squarenum () y utiliza un bucle para producir los cuadrados
de los valores numricos de 0 a 5. A partir de entonces, el uso de
la __ next__(), se accede a los valores cuadrados del objeto
iterador uno por uno.

Modules
Un mdulo es un archivo que consta de un par de funciones y
variables que se utilizan para una tarea particular. Un mdulo puede
ser reutilizado en cualquier otro programa que lo importa. Las
funciones y variables del mdulo que se disponga en el programa
actual y se pueden utilizar en el mismo. El nombre de archivo del
mdulo debe tener una extensin .py.
Para importar un mdulo a un programa, se utiliza la sentencia
import. Puede utilizar la importacin en varias formas. Considere la
posibilidad de un mdulo de calendario que muestra un calendario de
un mes y el ao especificado. Vamos a echar un vistazo a las
diferentes formas de importar un mdulo de calendario en el programa
actual. La primera forma es a travs de esta declaracin:
import calendar

bloque principal de ese mdulo se ejecutan de manera que sus


funciones pueden ser reutilizadas en el programa actual. Es decir,
todas las funciones del mdulo de calendar se hacen accesibles en el
programa actual. Para consultar una funcin prcal() del mdulo de
calendar, escriba la siguiente declaracin:
calendar.prcal()

La segunda forma de importar un mdulo de calendario para el


programa actual es a travs de esta declaracin:
from calendar import prcal

Esto importa la funcin prcal() del mdulo de calendar. Ahora se


puede hacer referencia directamente a la funcin prcal() en el
programa actual sin prefijar el nombre del mdulo de calendar a la
misma:

prcal()

La tercera forma de importar un mdulo de calendario para el


programa actual es a travs de esta declaracin:
from calendar import *

Esto importa todos los objetos del mdulo de calendario. Se puede


acceder a cualquier funcin del mdulo de calendario directamente
sin prefijar el nombre del mdulo a la funcin. Para hacer
referencia a la funcin prcal() del mdulo de calendario, se puede
escribir:
prcal()

La cuarta forma de importar un mdulo de calendario para el programa


actual es a travs de esta declaracin:
import calendar as cal

Se importa el mdulo de calendario en el programa actual y hace que


sea accesible a travs de la expresin cal. Su funcin prcal() ahora
se puede acceder mediante un prefijo con el trmino cal:
cal.prcal()

El siguiente programa importa un mdulo de calendario en el programa


y muestra el calendario del ao especificada con su funcion prcal().
module1.py
import calendar
year = int(input("Type in the year number:"))
calendar.prcal(year)

Tambin puede volver a escribir el programa como se muestra aqu:


from calendar import prcal
year = int(input("Type in the year number:"))
prcal(year)

La salida del programa ser el calendario del ao entrado, como se


muestra en la Figura 4.1.

Este programa muestra el calendario del ao introducido por el


usuario. La tcnica de llamar a la funcion prcal() cambia de acuerdo
con el mtodo utilizado en la importacin del mdulo de calendario
para el programa.
El siguiente programa imprime la hora del reloj del sistema
infinitamente:
module2.py
from time import time, ctime
prev_time = ""
while(True):
curr_time = ctime(time())
if(prev_time != curr_time):
print ("The time is:",ctime(time()))
prev_time = curr_time
Output:
The time is: Wed Feb 02 10:16:33 2011
The time is: Wed Feb 02 10:16:34 2011
The time is: Wed Feb 02 10:16:35 2011
The time is: Wed Feb 02 10:16:36 2011
The time is: Wed Feb 02 10:16:37 2011

En este programa, que desea mostrar el reloj del sistema


infinitamente y no quieren al mismo tiempo que se repita de nuevo.
Recuerde, los ciclos de la mquina de la CPU es mucho ms rpido que
un reloj y ejecutar un bucle o un programa varias veces en un
segundo. Por lo tanto, al mismo tiempo se mostrar una y otra vez.
Para evitar esto, se utilizan dos variables: uno almacena la hora
del reloj del sistema actual, y el otro espera para el momento de
cambiar.
Primero, el programa importa las funciones de tiempo y ctime del
mdulo de tiempo en el programa actual. A continuacin se ejecuta un
bucle infinito. En el bucle, se accede a la hora del reloj del
sistema actual y se almacena temporalmente en la variable curr_time.
Se muestra el tiempo en curr_time y asignado a otra variable,
prev_time. En la siguiente iteracin del bucle while, la hora del
reloj del sistema es ms descabellada y se almacena en la variable
curr_time. Hasta el momento en curr_time difiere del tiempo en
prev_time, no se mostrar el nuevo tiempo exagerado en curr_time.
Despus de mostrar la nueva hora en curr_time, se le asigna a la
variable prev_time, y el bucle contina.

The math Module


El mdulo de matemticas no slo contiene las funciones
trigonomtricas comunes, sino tambin varias constantes y funciones:

math.piReturns the value of pi, 3.1415926535897931.


math.eReturns the value of e, 2.7182818284590451.
ceil(x)Muestra el nmero entero ms grande.
floor(x)Muestra el nmero entero ms pequeo.

El mdulo matemtico se pone a disposicin del programa a travs de


esta declaracin:
import math

El siguiente programa calcula y muestra los siguientes nmeros


enteros ms grandes y ms pequeas del valor float especificada
utilizando las funciones del mdulo de matemticas ceil() y el
floor().
mathmethod.py
import math
print (math.ceil(7.3))
print (math.ceil(-7.3))
print (math.floor(7.9))
print (math.floor(-7.9))
Output:
8 7
7 8

En este programa, se importa el mdulo matemtico y utiliza sus


metodos ceil() y el floor() para mostrar los prximos nmeros
enteros grandes y ms pequeos.
Proporciona una funcin de Python que se puede utilizar para ver
todos los identificadores definidos en un mdulo? S, y el nombre de
la funcin es dir().

The dir() Function


La funcin dir() se usa para listar los identificadores definidos
por un mdulo. Los identificadores son las funciones, clases y
variables definidas en ese mdulo. Cuando se proporciona un nombre
de mdulo para la funcin dir(), devuelve una lista de los nombres
definidos en dicho mdulo. Cuando no se aplica el argumento de que,
la funcin dir() devuelve una lista de los nombres en el mbito
local actual.
El siguiente programa muestra la lista de identificadores definidos
en losmdulos de sys y calendar:
direx.py
import sys, calendar
print("The list of methods and attributes in the local scope:",dir())
print ("\nThe list of methods and attributes in the calendar module:",
dir(calendar))
print ("\nThe list of methods and attributes in the sys module:", dir(sys))
Output:
The list of methods and attributes in the local scope: ['__builtins__',
'__doc__' ,
'__name__', '__package__', 'calendar', 'sys']
The list of methods and attributes in the calendar module: ['Calendar', 'EPOCH', '
FRIDAY',
'February', 'HTMLCalendar', 'IllegalMonthError', 'IllegalWeekdayError', ' January'
, 'LocaleHTMLCalendar', 'LocaleTextCalendar' , 'MONDAY', 'SATURDAY', 'SUNDAY' ,
'THURSDAY', 'TUESDAY', 'TextCalendar', 'WEDNESDAY' , '_EPOCH_ORD', '__all__' ,
'__builtins__' , '__cached__', '__doc__', '__file__', '__name__' , '__package__' ,
'_colwidth', '_locale', '_localized_day', '_localized_month', '_spacing', 'c', '
calendar',
'datetime', 'day_abbr', 'day_name', 'different_locale', 'error', ' firstweekday'
, 'format' , 'formatstring' , 'isleap', 'leapdays' , 'main', 'mdays', 'month' ,
'month_abbr' , 'month_name', 'monthcalendar' , 'monthrange', 'prcal', 'prmonth' ,
'prweek', 'setfirstweekday', 'sys', 'timegm', 'week', 'weekday', 'weekheader']
The list of methods and attributes in the sys module: ['__displayhook__',
'__doc__' ,
'__excepthook__', '__name__' , '__package__' , '__stderr__' , '__stdin__' ,
'__stdout__' , '_clear_type_cache', '_current_frames' , '_getframe', '_xoptions' ,
'api_version', 'argv', 'builtin_module_names' , 'byteorder', 'call_tracing' , '
callstats',
'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info' ,
'excepthook', 'exec_prefix', 'executable', 'exit', 'flags' , 'float_info', '
float_
repr_style', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencoding' ,
'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval'
,
'gettrace', 'getwindowsversion', 'hash_info', 'hexversion' , 'int_info',

'intern' ,
'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', '
path_importer_
cache', 'platform', 'prefix', 'setcheckinterval', 'setprofile', '
setrecursionlimit',
'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion' ,
'version', 'version_info', 'warnoptions', 'winver'

Command-Line Arguments - Argumentos de lnea de


comandos
Argumentos de la lnea de comandos se utilizan para pasar argumentos
a un programa mientras se est ejecutando ello. Cada argumento de
lnea de comandos que se pasa al programa se almacenar en la
variable sys.argv. La variable sys.argv es una lista que siempre
tiene una longitud de al menos 1. El elemento en el ndice 0 es el
nombre del programa en Python que est ejecutando.
nota
Argumentos de la lnea de comandos se separan con espacios.
El programa siguiente se enumeran los argumentos de la lnea de
comandos pasados al programa, su count, y el path de la instalacin
de Python.
commandline1.py
import sys
print ('There are %d arguments' % len(sys.argv))
print ('The command line arguments are:' )
print (sys.argv)
for i in sys.argv:
print(i)
print ('Path of the Python is' , sys.path)

La salida se muestra en la Figura 4.2.


Figure 4.2. Command-line arguments passed to the program.

Summary resumen
En este captulo usted aprendi acerca de las diferentes
declaraciones que definen y valores devueltos de funciones. Tambin
aprendi a utilizar los parmetros de valor predeterminado y
argumentos de palabras clave en una funcin. Usted aprendi a
utilizar las variables locales y globales. Para las expresiones ms
pequeas, usted aprendi a crear funciones lambda. Tambin, usted
vio cmo aplicar funciones a las secuencias utilizando diferentes
atributos de funcin e implementar recursividad. Para acceder a las
colecciones de datos, usted aprendi a utilizar iteradores,
generadores, y las expresiones generadoras. Para utilizar las
funciones incorporadas, usted aprendi a importar y utilizar
mdulos. Por ltimo, usted vio cmo pasar argumentos de lnea de
comandos para un programa Python.
El siguiente captulo tratar de la programacin orientada a objetos
(POO). Usted aprender a definir las clases, definir funciones en
una clase, y el uso de atributos de clase. Usted aprender a
inicializar las variables de instancia a travs del mtodo __init__.
Usted aprender a definir y utilizar clases y mtodos estticos.
Usted ver cmo Python elimina los objetos que salen de alcance a
travs de la recoleccin de basura. El captulo tambin trata un
tema importante en la programacin orientada a objetos, la herencia.
Usted aprender a aplicar sola, multinivel, y la herencia mltiple.
Usted tambin aprender a aplicar el mtodo de primer orden y las
operaciones aritmticas a travs de las instancias la sobrecarga de
operadores. En el captulo tambin se explicar el concepto de
polimorfismo y el uso de propiedades y descriptores.

Chapter 5. Classes
En este captulo se tratan los siguientes temas:
Definicin de las clases
El uso de atributos de clase
Definicin de funciones en una clase
Acceso a variables de clase en los mtodos de instancia
Creacin de instancias e inicializar variables de instancia a
travs del mtodo __init__ ()
Uso de clases y mtodos estticos
Entender Recoleccin de basura
Comprender-herencia simple, multinivel, y la herencia mltiple
El uso de los especificadores de control de acceso
Mtodo primordial
La sobrecarga de operadores
polimorfismo
Utilizacin de las propiedades y los descriptores

The Class Statement- La sentencia Class

Python admite la programacin orientada a objetos y proporciona

cdigo reutilizable en forma de clases. Siempre es mejor utilizar el


cdigo antiguo que empezar de cero porque el cdigo ya existente ya
ha sido usado y probado, por lo que ahorra tiempo en la depuracin
de un proyecto.
Una clase es como una plantilla o modelo para datos y operaciones.
Se compone de un nmero de atributos que incluyen variables y
mtodos. Las variables se denominan miembros de datos y los mtodos
se llaman funciones miembro. Las funciones definen las operaciones
que se pueden aplicar a los miembros de datos. De las clases, crear
instancias, tambin conocidos como objetos. Las instancias tendrn
acceso automticamente a los miembros de datos y mtodos.
Para crear una clase, se utiliza la instruccin de clase, una
sentencia ejecutable que se utiliza para crear un objeto de clase.
No slo crea un nuevo objeto de la clase, sino tambin se le asigna
el nombre especificado.
Syntax:
class classname(base-classes):
statement(s)
donde nombre de clase es un identificador que se enlaza a la clase
de objeto. Puede crear ya sea una clase independiente o una que
herede de otras clases. La clase que hereda tambin se conoce como
una clase derivada o una sub-clase, y la clase que se hereda de que
se conoce como un sper o clase base.
Al crear una clase derivada, se especifica las clases de base
delimitados por comas de
que la nueva clase va a ser derivada. Las clases base tambin son
conocidos como los padres de la nueva clase que se est creando. La
nueva clase hereda los atributos de sus clases padre. Se puede
reemplazar cualquiera de los atributos de los padres y puede aadir
atributos propios. Las clases base son opcionales. Para crear una
clase sin bases, se puede omitir (base-clases), colocando los dos
puntos despus de nombre de clase o classname.
La secuencia de instrucciones que sigue a la declaracin de clase se
conoce como el cuerpo de la clase, donde se especifican las
funciones y otros atributos de la clase.

Attributes of Class Objects - Atributos de los objetos de


clase
Para especificar un atributo de un objeto de la clase, se enlaza un
valor a un identificador dentro del cuerpo de la clase. Por ejemplo:
class rect:
l = 8
print (rect.l)

En este ejemplo, rect es un objeto de la clase con un atributo


llamado l que se enlaza con el valor 8, y rect.l refiere a ese
atributo.
El siguiente ejemplo muestra un objeto de clase, rect, con dos
atributos, l y b, con destino a los valores de 8 y 5.
rectclass1.py
class rect:
l=8
b=5
print ("Length is %d, Breadth is %d" %(rect.l, rect.b))
Output:
Length is 8, Breadth is 5

Se puede ver que cuando se hace referencia a los atributos, la clase


de objeto se antepone a los atributos.
Usted tambin puede tener una clase que no hace nada, como se
muestra en el siguiente ejemplo:
passex.py
class rect(object):
pass
rect.l = 10
print (rect.l)
Output:
10

La sentencia pass no hace nada y representa un bloque vaco de


enunciados. Acta como un marcador de posicin para el cdigo que va
a escribir ms tarde. En este programa, se puede ver que el atributo
l de la clase de objeto rect est ligado al valor de 10 fuera del
cuerpo de la clase que se muestra a continuacin.

Built-In Class Attributes


Atributos en clase incorporada
Una declaracin de clase establece implcitamente algunos atributos
de clase. Puede utilizar estos atributos de clase para obtener
informacin acerca de una clase. Una lista de los atributos de clase
se muestra en la Tabla 5.1.

Table 5.1. Class Attributes


Attribute

Description

__name__

El identificador de nombre de la
clase utilizada en la declaracin de
clase.

__bases__

La tupla de objetos de clase


especificados como las clases base
en la declaracin de clase.

__dict__

El objeto de diccionario que la


clase utiliza para mantener sus
otros atributos. Para asignar un
valor a un atributo, se utiliza el
objeto de diccionario. El ejemplo
siguiente asigna el valor 8 al
atributo l de la clase de objeto
rect: rect.__dict__ ['l'] = 8

__doc__

La cadena de documentacin de la
clase.

__module__

El nombre del mdulo en el que se


define la clase.

El siguiente programa muestra el nombre de la clase, de la clase


base, diccionario de objetos, y as sucesivamente con la clase de
atributos:
rectclass2.py
class rect:
l=8
b=5
print ("Length is %d, Breadth is %d" %(rect.l, rect.b))
print ("Length is %d, Breadth is %d" %(rect.l, rect.b))
print ("Class name is ", rect.__name__, " and Base class is
",rect.__bases__)
print ("Attributes of this class are ", rect.__dict__)
Output:
Length is 8, Breadth is 5
Class name is rect and Base class is (<class 'object'>,)
Attributes of this class are {'__module__': '__main__', 'b': 5, 'l': 8,
'__dict__':
<attribute '__dict__' of 'rect' objects>, '__weakref__': <attribute
'__weakref__' of
'rect' objects>, '__doc__': None}

Este programa define e inicializa dos atributos del objeto de la


clase rec, l y b, a los valores de 8 y 5. El l y atributos b, nombre
de la clase, y la base de nombre de la clase se visualizan. El
programa tambin muestra los atributos de la clase a travs de un
objeto de diccionario.
nota
Si no especifica una clase base, el valor predeterminado es

objeto.

Defining Functions in a Class


Definicin de funciones en una clase
Las funciones definidas en una clase se conocen como mtodos. Un
mtodo definido en una clase siempre tiene un primer parmetro
obligatorio llamado self (auto) que hace referencia a la instancia
en la que se llama al mtodo.
El parmetro self juega un papel especial en las llamadas a mtodos.
Los mtodos que se le de definicin en la clase son llamados mtodos
de instancia. Ms adelante se ver la forma de definir los mtodos
de clase en una clase. El formato de la clase con mtodos aadidos
es la siguiente:
class classname(base-classes):
class variable(s)
def method 1(self):
instance variable(s)
statement(s)
[def method n(self):
instance variable(s)
statement(s)]

Una clase puede tener dos tipos de miembros de datos:


Class variableClase variable .-El miembro de datos que se
encuentra fuera de cualquier mtodo de la clase se conoce como una
variable de clase. Todas las instancias de la clase comparten las
variables de clase, y los cambios realizados en la variable de clase
por una instancia sern vistos por otras instancias.
Instance variable Instancia variable.- Las variables que se
definen dentro de un mtodo slo pertenecen a la instancia actual
del objeto y se conocen como variables de instancia. Los cambios
realizados en las variables de instancia por ninguna instancia se
limitan a ese caso concreto y no afectan a las variables de
instancia de otras instancias.
Vamos a ver cmo crear un mtodo de instancia y cmo se puede
utilizar para acceder a las variables de clase.

Acceso a variables de clase en Mtodos de instancia


Para acceder a las variables de clase, los mtodos definidos
cuerpo de primer nivel deben utilizar un nombre completo; el
de la clase debe tener el prefijo de las variables de clase.
siguiente ejemplo muestra el acceso a las variables de clase
mtodo de instancia:
class rect:
l = 8

en un
objeto
El
en un

b=5
def area(self):
print rect.l*rect.b

Dos variables de clase, l y b, se inicializan a 8 y 5. La instancia


del metodo rea() se refiere a la clase l, y las variables b, usando
los nombres totalmente calificados rect.l y rect.b
No se puede entender el concepto de variables de instancia hasta que
usted sepa acerca de las instancias de una clase y cmo crearlos.

Instances
Una clase es una plantilla o modelo de datos y operaciones; utilizar
los datos y operaciones de forma independiente, lo que necesita para
crear instancias. Una instancia es una variable que acta como una
rplica de una clase. Puedes crear tantas instancias de una clase si
lo deseas.
Cada instancia recibe una copia por separado de los mtodos y los
atributos definidos en la clase. Cada instancia puede tener acceso a
los mtodos y atributos de la clase de forma independiente, y un
atributo de una instancia no interferir con un atributo de la otra
instancia. Tambin significa que a travs de los casos, puede
utilizar una clase para realizar operaciones con varios conjuntos de
datos diferentes. Para crear una instancia de una clase, se llama a
la clase de objeto como si fuera sin parmetros, como se muestra
aqu:
r=rect()
Usted puede ver que el objeto de clase rect se llama como si se
trata de una funcin. Cada llamada devuelve una nueva instancia de
esa clase. La declaracin anterior devuelve una nueva instancia de
la clase, rect, y lo asigna a la variable r.
El siguiente programa calcula el rea de un rectngulo mediante la
creacin de una instancia de la clase y la invocacin de un mtodo a
travs de la instancia:
rectclass3.py
class rect:
l=8
b=5
def rectarea(self):
return rect.l * rect.b
r=rect()
print ("Area of rectangle is ", r.rectarea())
Output:
Area of rectangle is 40

En este programa, se crea una instancia de la clase rect con el


nombre de r. La clase tiene dos variables de clase, l y b,

inicializados a 8 y 5. El mtodo rectarea () de la clase se invoca a


travs de la r ejemplo, que calcula y devuelve el rea de un
rectngulo. Recuerde, usted necesita especificar self de forma
explcita en la definicin del mtodo, mientras que no se especifica
que cuando se llama al mtodo, tal como Python lo agrega
automticamente.
nota
Python aade el argumento de self automticamente cuando se
llama a los mtodos a travs de ejemplo, por lo que no tiene
que incluir el trmino self cuando se llama a los mtodos de la
clase.
En este programa, las variables l y b definidas en la clase rect son
las variables de clase, y las variables de clase estn
implcitamente compartidos por todas las instancias de la clase.
Tambin significa que los cambios aplicados a las variables de clase
por una instancia pueden ser vistos por otra instancia de la clase.
Este problema se resolver cuando se crean las variables de
instancia.
El mtodo que vamos a discutir la prxima ayuda al inicializar las
variables de una instancia.

The __init__() Method - El metodo __init__()


El mtodo __ init__ es el primer mtodo que se ejecutar despus de
la creacin de una instancia. Este mtodo es como un constructor de
lenguajes C + + y Java y se utiliza para realizar la inicializacin.
Los argumentos pueden o no pueden ser pasados al mtodo __ init__.
nota La instancia ya se construye en el momento en __ init__ es
llamado.
El primer argumento de cada mtodo de clase es una referencia a la
instancia actual de la clase. Este primer argumento es llamado self.
En el mtodo __ init__, self se refiere a la instancia recin
creada; en otros mtodos de la clase, se refiere a la instancia cuyo
mtodo ha sido llamado. Al definir __ init__, debe recordar llamar
mtodo del ancestro __ init__ explcitamente si est all.
For example:
class rect:
def __init__(self):
self.l = 8
self.b = 5
r=rect()

En este ejemplo, se crea una instancia de la clase rect por nombre


r. El mtodo __ init__ se ejecutar de forma automtica para

realizar la tarea de inicializacin de las variables de la


instancia. En este caso, el mtodo __ init__ inicializa las
variables l y b de la instancia r a 8 y 5. Las variables l y b
definidas en la clase son variables de instancia.
nota
El mtodo __ init__ no debe devolver un valor, o bien se
lanzara una excepcin TypeError.
El programa siguiente muestra el mtodo __ init__ al inicializar las
variables de instancia y tambin calcula el rea de un rectngulo:
defaultcons.py
class rect:
def __init__(self):
self.l = 8
self.b = 5
def rectarea(self):
return self.l * self.b
r=rect()
print ("Area of rectangle is ", r.rectarea())
Output:
Area of rectangle is 40

Una instancia de la clase de objeto rect es creado por nombre de r.


El mtodo __ init__ se ejecutar automticamente para inicializar
las variables de la instancia r. Las variables l y b de la instancia
de r se inicializan a 8 y 5. Finalmente, el mtodo de la rectArea()
se llama a travs de ejemplo R y calcula y devuelve el rea del
rectngulo.
Despus de la creacin de una instancia, el mtodo __ init__ se
ejecuta automticamente. Se puede pasar argumentos al mtodo
__ init__ para inicializar las variables de instancia?

Passing Arguments to the __init__ Method


Pasar argumentos al mtodo __ init__
El programa siguiente muestra el paso de argumentos al mtodo
__ init__:
paramcons.py
class rect:
def __init__(self, x,y):
self.l = x
self.b = y
def rectarea(self):
return self.l * self.b
r=rect(5,8)
print ("Area of rectangle is ", r.rectarea())

Output:
Area of rectangle is 40

Una instancia de la clase de objeto rect es creado por nombre de r.


Los dos argumentos, 5 y 8, que se suministran durante la creacin de
la instancia, r se pasarn al mtodo __ init__ como argumentos. Es
decir, los valores de 5 y 8 sern asignados a los parmetros x e y
del mtodo __ init__ de donde sern asignados a las variables de
instancia l y b. Finalmente, el mtodo rectArea() se llama a travs
de instancia r que calcula y devuelve el rea del rectngulo.
nota
Los argumentos que se pasa al mtodo __ init__ si alguna tiene
que ser suministrado en la inicializacin de la instancia.
Se puede tener parmetros de valores por defecto en el mtodo __
init__ como en las funciones normales? S.

Defining Default Value Parameters in the __init__ Method


Definicin de los parmetros de valor por defecto en el
mtodo __ init__
Este ejemplo muestra cmo se especifican los valores predeterminados
para los parmetros del mtodo __ init__ de modo que si el valor de
cualquier parmetro no se suministra al inicializar una instancia,
se utiliza el valor por defecto.
El siguiente programa muestra el uso de parmetros de valor por
defecto en el mtodo __ init__. El programa demuestra crea dos
instancias: una que proporciona los argumentos y otro que no
suministran ningn argumento. Los valores por defecto sern
considerados para la instancia que no proporciona argumentos. Aqu
est el cdigo:
constructor.py
class rect:
def __init__(self,x=8, y=5):
self.l = x
self.b = y
def rectarea(self):
return self.l * self.b
r=rect()
s=rect(10,20)
print ("Area of rectangle is ", r.rectarea())
print ("Area of rectangle is ", s.rectarea())
Output:
Area of rectangle is 40
Area of rectangle is 200

Se puede ver que el mtodo __ init__ define los valores por defecto
para los parmetros x e y como 8 y 5. Las dos instancias de rect se
crean como r y s. La instancia r no tiene argumentos para el mtodo

__ init__ y por lo tanto, los valores por defecto 8 y 5 en los


parmetros x e y se utilizar para inicializar sus variables de
instancia l y b.
La instancia s suministra los argumentos 10 y 20 cuando se
inicializa y se asignar a los parmetros x e y desde donde se van a
asignar a sus variables de instancia l y b. El mtodo rectArea()
cuando se invoca por los dos casos calcular y devolver el rea de
un rectngulo sobre la base de los valores asignados a sus variables
de instancia, l y b.
Por ahora, usted sabe cmo crear una instancia y cmo inicializar
sus variables a travs de __ init__. Ahora vamos a ver el
procedimiento para imprimir la instancia. Recuerde, usted no est
imprimiendo las variables de instancia, pero la propia instancia.
Cuando la impresin de una instancia, se convierte en una cadena.

String Representation of an Instance


Representacin de cadena de una instancia
El mtodo __ str__ es llamado por el str() y declaraciones de
impresin para mostrar la representacin de cadena de una instancia.
classstr.py
class rect:
def __init__(self, x,y):
self.l = x
self.b = y
def __str__(self):
return 'Length is %d, Breadth is %d' %(self.l, self.b)
def rectarea(self):
return self.l * self.b
r=rect(5,8)
print (r)
print ("Area of rectangle is ", r.rectarea())
Output:
Length is 5, Breadth is 8
Area of rectangle is 40

Este programa crea una instancia r de la clase rect y pasa los


valores de 5 y 8 con el mtodo __ init__ para asignarlos a sus
variables de instancia l y b. Entonces, instancia r se pasa a una
sentencia print que se traduce en la creacin de la representacin
de cadena de la instancia y, por tanto invoca el mtodo __ str__. El
mtodo __ str__ devuelve un mensaje que muestra los valores de las
variables de instancia l y b, por lo que toda la instancia se
devuelve en forma de cadena. El programa tambin calcula y muestra
el rea del rectngulo a travs rectarea()
Adems de los mtodos de instancia, tambin se pueden crear mtodos
de clase y los mtodos estticos en una clase.
Vamos a aprender acerca de ellos.

Class Methods
Mtodos de la clase
Un mtodo de clase no tiene ningn argumento self y recibe una clase
como su primer argumento. Por convencin, el argumento al mtodo de
la clase se llama cls. Es decir, en un mtodo de clase, la clase en
la que se llama se le pasa como primer argumento. El mtodo de la
clase tambin se puede llamar directamente a travs del objeto de
clase sin crear instancias de la clase.
Un mtodo de clase se define utilizando el decorador @classmethod.
Un decorador proporciona un mtodo conveniente para insertar y
modificar el cdigo en funciones o clases.

Syntax:
@classmethod
def f(cls, parm1, parm2, . . .):
body of the method
Este muestra un mtodo de clase, f, con pocos parmetros parm1,
parm2, y as sucesivamente.
El programa siguiente crea una clase, as como un mtodo de
instancia y accede a ellos para mostrar el contenido de las
variables de instancia y de clase.
classmethod.py
class book:
price=100
@classmethod
def display(cls):
print (cls.price)
def show(self,x):
self.price=x
print (self.price)
b=book()
c=book()
book.display()
b.display()
b.show(200)
c.show(300)
Output:
100
100
200
300

Este programa define un objeto de clase, book, que contiene una


variable de clase, precio, inicializado a 100. Adems, la clase
contiene un mtodo de clase, display() y un mtodo de instancia,
show().Dos instancias, b y c, se crean de la clase book. El mtodo
de clase display() se llama a travs de la clase de objeto, book,
que muestra el valor de la variable clase de precio, 100. El mtodo

de clase display() se llama a travs de la instancia b, que de nuevo


muestra el valor de la variable precio de clase como 100. A
continuacin, el mtodo de instancia show () es llamado a travs de
instancia b, pasando el valor 200 a la misma, que se asigna a su
parmetro x, y que, finalmente, se asigna a la variable de
instancia, precio. Ahora, hay dos variables de precios, una variable
de clase inicializado valorar 100, que es comn para todas las
instancias, y una variable de instancia de la instancia b conjunto a
200.
El metodo de instancia show() se llama a travs de la instancia de
c, pasando el valor 300 como argumento para ser asignado a su
variable de instancia, el precio.
Hay una alternativa al mtodo de clase conocida como el mtodo
esttico.

Static Methods - Mtodos estticos


Un mtodo esttico es una funcin ordinaria que se construyeron
usando el decorador @staticmethod y que se une a su resultado a un
atributo de clase. La diferencia entre un mtodo esttico y un
mtodo de clase es que un mtodo esttico tiene ningn parmetro
cls. No utiliza el parmetro de self, tampoco. Hay otra diferenciael mtodo de clase se hereda de forma automtica por cualquier
clases hijas, mientras que el mtodo esttico no es. Adems, la
definicin de un mtodo esttico es inmutable a travs de la
herencia. Un mtodo esttico se puede llamar en una clase o en
cualquier instancia de una clase.
Syntax:
@staticmethod
def name (parm. . .) :
body of the method
Esto muestra un mtodo esttico, name, con parmetros parm ....
El programa siguiente se define una clase que contiene un mtodo
esttico y accede a ella a travs de un objeto de clase, as como a
travs de una instancia.
staticmethod.py
class rect:
@staticmethod
def disp_message():
l=50
print ("Length is ", l)
rect.disp_message()
r=rect()
r.disp_message()
Output:
Length is 50
Length is 50

El programa crea una clase rect con un mtodo esttico


disp_message() en ella. En primer lugar, disp_message() se llama a
travs de la rect objeto de clase. El mtodo inicializa un atributo
l al valor 50 y lo muestra. Entonces, una instancia r se crea de
rect, y disp_message() se llama a travs de la instancia de r.
En disp_message(), otra vez, el valor del atributo l se establece en
50 y se muestra. Por lo tanto, el programa confirma que el mtodo
esttico puede ser llamado en una clase, as como en una instancia
de una clase.
El programa siguiente crea una clase que contiene un mtodo esttico
y un mtodo de clase y muestra cmo se visualiza una variable de
clase a travs de los dos mtodos:
staticlassmethod.py
class product:
count = 0
def __init__(self, name):
self.name=name
product.count += 1
@staticmethod
def prodstatcount():
return product.count
@classmethod
def prodclasscount(cls):
print('Class info: ', cls)
print ('Class method - The product count is: ', cls.count)
p1=product('Camera')
p2=product('Cell')
print('Static method - The product count is: ', product.prodstatcount())
p2.prodclasscount()
Output:
Static method - The product count is: 2
Class info: <class '__main__.product'>
Class method - The product count is: 2

El programa define una clase de producto que contiene una variable


de clase, count, inicializado a 0. La clase contiene un mtodo
esttico y un mtodo de clase, prodstatcount() y prodclasscount().
Una instancia, p1, de la clase producto se crea que pasa la cadena
'Camera' al mtodo __ init__ que se asignar a su variable de
instancia, name. El mtodo __ init__ tambin incrementa el valor de
la variable de clase count en 1. Del mismo modo, otra instancia, p2,
se crea que pasa la cadena 'telfono' al mtodo __ init__ que se
asignar a su variable de instancia, name. El mtodo __ init__ de
nuevo incrementa el valor de la cuenta por variable de clase 1, por
lo que su valor de 2. A partir de entonces, el mtodo estatico
prodstatcount() se llama en el objeto de la clase de producto, que
devuelve el valor de la variable de clase count, 2. Finalmente, el
mtodo de clase prodclasscount() se invoca en la instancia p2,
pasando por la clase de producto a la misma a travs de la parmetro

cls. La informacin de la clase se muestra mediante la impresin del


parmetro cls, y se muestra el valor de la variable de clase count.

Assigning One Instance to Another


La asignacin de una instancia a otra
Python proporciona una facilidad para asignar una instancia a otra.
Asignacin de una instancia a otra resultados en la creacin de una
nueva instancia si no existe. Por ejemplo, suponiendo inst1 y inst2
son instancias de alguna clase, entonces la siguiente declaracin:
inst1=inst2
crear la instancia inst1 , si no existe, y se inicializan todas las
variables de instancia de inst1 a valores iguales a los de las
variables de instancia de inst2.
El programa siguiente muestra cmo se asigna una instancia a otro y
los resultados en la asignacin de los atributos de una instancia a
otra instancia.
assignobj.py
class rect:
def __init__(self, x,y):
self.l = x
self.b = y
def rectarea(self):
return self.l * self.b
r=rect(5,8)
s=r
print ("Area of rectangle is ", r.rectarea())
print ("Area of rectangle is ", s.rectarea())
Output:
Area of rectangle is 40
Area of rectangle is 40

En este programa, un objeto r se crea la clase Rect. Los argumentos


5 y 8 se pasan al mtodo __ init__, y a continuacin, se asignan a
los variables l y b de la instancia de r. El contenido de la
instancia de r se asigna a la instancia s. Es decir, la instancia de
s tambin tendr sus variables de instancia inicializan a 5 y 8.
Esto se comprueba mediante el clculo del rea de un rectngulo
invocando rectArea () a travs tanto de las instancias, y el rea
que sale de la misma.

Garbage Collection - Recoleccin de Basura


La recoleccin de basura es un procedimiento de liberar la memoria

utilizada por las variables o instancias que ya no son necesarios.


La memoria que se utiliza en los casos generalmente se libera
automticamente cuando las variables asignadas a ellos fuera de
mbito. Es por eso que las prdidas de memoria son raros en Python.
Para la recoleccin de basura, Python utiliza un mecanismo de lucha
contra el de referencia. Cada objeto tiene un contador de referencia
que indica el nmero de referencias que existen para ese objeto. Los
incrementos de referencia count para cada referencia aaden al
objeto y se disminuye mediante la eliminacin de la referencia a ese
objeto. Cuando el recuento de referencia llega a cero, el objeto es
basura recogida.
El
Se
la
de

programa siguiente muestra el concepto de recoleccin de basura.


crean dos instancias. Una variable de clase se incrementa en 1 en
creacin de una instancia y se disminuye en 1 en la eliminacin
una instancia.

destructor.py
class rect:
n=0
def __init__(self,x,y):
rect.n +=1
self.l=x
self.b=y
def __del__(self):
rect.n -=1
class_name = self.__class__.__name__
print(class_name,' destroyed')
def rectarea(self):
print ('Area of rectangle is ', self.l * self.b)
def noOfObjects(self):
print ('Number of objects are: ', rect.n)
r=rect(3,5)
r.rectarea()
s=rect(5,8)
s.rectarea()
r.noOfObjects()
del r
s.noOfObjects()
del s
Output:
Area of rectangle
Area of rectangle
Number of objects
rect destroyed
Number of objects
rect destroyed

is 15
is 40
are: 2
are: 1

En este programa, se crea una instancia r y pasa los valores de 3 y


5 como argumentos al mtodo __ init__ para asignarlos a sus
variables de instancia l y b. En la creacin de la instancia de r,

la variable de clase que se estableci inicialmente en 0 se


incrementa en 1. Del mismo modo, otro ejemplo, s, se crea, el paso
de argumentos 5 y 8 a su mtodo __ init__ para la asignacin a sus
variables de instancia l y b .
Una vez ms, el valor de la variable de clase n se incrementa en 1,
por lo que su valor de 2. El rea de un rectngulo se calcula en
instancias r y s. El mtodo noOfObjects() muestra el valor de la
variable de clase n (2), lo que confirma la existencia de dos
instancias de la clase. Cuando se elimina la instancia de r, el
mtodo __ del__ se ejecuta, el valor de la variable de clase n se
reduce, y se muestra un mensaje que confirma la destruccin de la
instancia.
Despus de eliminar la instancia de r, cuando se llama al metodo
noOfObjects(), el valor de la variable de clase n se muestra como 1,
lo que confirma que se deja slo una nica instancia de la clase
rect. Por ltimo, s tambin se suprime, lo que reduce el valor de la
variable de clase 0.

Inheritance herencia
La herencia es una tcnica de copiar los miembros de datos y las
funciones miembro de una clase existente en otra clase. Es decir, en
lugar de comenzar desde cero, una clase existente se puede heredar,
y los miembros adicionales de datos y funciones de miembro puede ser
definido. La clase que se hereda se llama clase base o la super
clase, y la clase heredada se denomina clase derivada o subclase. La
subclase hereda todas las propiedades de la clase base y por lo
tanto da lugar a ahorrar tiempo y esfuerzo.

Types of Inheritance -Tipos de Herencia


Voy a hablar de tres tipos de herencia:
herencia simple
herencia multinivel
La herencia mltiple

Single Inheritance - herencia individual


Este es el tipo ms simple de la herencia, donde una clase se deriva
de otra clase nica, como se muestra en la Figura 5.1.

Clase B hereda la
clase A o clase B se
deriva de la clase A. Una clase derivada tiene que identificar la

clase de la que se deriva. Supongamos, por ejemplo, desea obtener la


clase de tringulo de la clase Rect. La definicin de la clase de
tringulo aparecer as:

class triangle(rect):
Esta declaracin indica que rect es una clase base, y el tringulo
es una clase derivada.
Considere el siguiente programa de la herencia simple. En este
programa, una clase de tringulo hereda la clase base, rect, como
resultado de la cual la instancia de la clase tringulo puede
acceder a las funciones miembro pblicas de la clase Rect (al lado
de sus propias funciones miembro).
inherit1.py
from __future__ import division
class rect:
def __init__(self):
self.l = 8
self.b = 5
def rectarea(self):
return self.l * self.b
class triangle(rect):
def __init__(self):
rect.__init__(self)
self.x = 17
self.y = 13
def trigarea(self):
return 1/2*self.x * self.y
r=triangle()
print ("Area of rectangle is ", r.rectarea())
print ("Area of triangle is ", r.trigarea())
Output:
Area of rectangle is 40
Area of triangle is 110.5

nota
Si tiene __ init__ en ambas clases, el mtodo de la clase base
__ init__ debe hacerse desde el mtodo __ init__ de la clase
derivada.
Este programa define una clase Rect que consiste en un __ init__ y
un mtodo rectArea(). Una clase ms, tringulo, se define en el
programa que se deriva de Rect. La clase tringulo formado por
metodos __ init__ y trigarea().
Se crea una instancia r de tringulo. Puesto que la clase tringulo

deriva de rect, la instancia de r puede invocar los mtodos de la


clase base rect, as como la de su propia clase. Despus de la
creacin de la instancia de r, el mtodo __ init__ de tringulo se
ejecuta, lo que a su vez invoca el mtodo __ init__ de su clase
base, rect. Recordemos que el mtodo __ init__ debe llamar
explcitamente al mtodo del ancestro __ init__ si est all. El
mtodo __ init__ de la clase Rect inicializa los valores de las
variables de instancia l y b a 8 y 5.
Despus de la ejecucin del mtodo __ init__ de la clase Rect, el
mtodo __ init__ de la clase tringulo se ejecutar, que inicializa
los valores de las variables de instancia x e y a 17 y 13. Ser capaz
de llamar a los mtodos de ambos las clases, la instancia r invoca
los metodos rectArea() y trigarea() para calcular y mostrar el rea
del rectngulo y el tringulo.

Access Control Specifiers


Los especificadores de control de acceso
Especificadores de control de acceso definen la visibilidad de los
miembros de la clase. Todos los miembros de la clase se les asigna
un lmite en el que se puede acceder mediante estos especificadores
de control. Hay dos palabras claves, pblica y privada.
Public Miembro - Consultado-desde el interior como en el exterior de
la clase.
private miembro - puede acceder privado desde el exterior del cuerpo
de la clase. Un miembro privado est precedido por un subrayado
doble (__).

Accessing public Members - Tener acceso a miembros pblicos


El programa siguiente muestra cmo definir y acceso a los miembros
pblicos:
publicaccess.py
class rect:
def __init__(self, x,y):
self.l = x
self.b = y
def rectarea(self):
return self.l * self.b
r=rect(5,8)
print ("Area of rectangle is ", r.rectarea())
print ("Area of rectangle is ", r.l* r.b)
Output:
Area of rectangle is 40
Area of rectangle is 40

El programa crea una instancia de r rect y pasa 5 y 8 como

argumentos al mtodo __ init__ para asignar a sus variables de


instancia, l y b. El programa calcula el rea de un rectngulo
mediante la invocacin del mtodo rectArea() en la instancia de r,
as como por el acceso y la multiplicacin de las variables de
instancia de l y b fuera del cuerpo de la clase, lo que confirma que
las variables de instancia l y b son de acceso pblico.

Accessing private Members


Tener acceso a miembros privados
Cuando en un procedimiento de un cuerpo de la clase, un
identificador se definen partiendo con dos signos de subrayado, pero
no termina con guiones bajos, se considera un identificador privado
de la clase. Los identificadores privados no se puede acceder desde
fuera del cuerpo de la clase.
El programa siguiente muestra cmo definir variables de acceso
privado en una clase:
privateaccess.py
class rect:
def __init__(self, x,y):
self.__l = x
self.__b = y
def rectarea(self):
return self.__l * self.__b
r=rect(5,8)
print ("Area of rectangle is ", r.rectarea())
print ("Area of rectangle is ", r._rect__l* r._rect__b)
Output:
Area of rectangle is 40
Area of rectangle is 40

Este programa define dos variables de instancia privada, l y b,


representados por __ l y __ b. Se puede acceder dentro del cuerpo de
la clase. Si se intenta acceder a los miembros privados como r.__l *
r.__b, obtendr AttributeError: 'rect' no tiene ningn atributo
'__l'. Para acceder a las variables privadas de fuera del cuerpo de
la clase, es necesario utilizar el nombre de clase, junto con el
nombre de instancia como r._rect__l.
Una clase derivada puede tener acceso a los miembros de datos
pblicos y las funciones miembro de la clase base. Tal vez la clase
derivada tiene que acceder a una funcin miembro de la clase base,
pero con una ligera modificacin. Por ejemplo, supongamos que la
clase base tiene una funcin miembro llamada comisin() que calcula
comisin equivalente al 5% de una cantidad, mientras que la clase
derivada necesita una funcin miembro que calcula comisin del 10%.
En este caso, la clase derivada necesita redefinir la funcion
mienbro comisin() que calcula la comisin de 10% en su propio

cuerpo, anulando la funcin miembro de la clase base. Vamos a ver el


concepto en detalle.

Method Overriding - el reemplazo de mtodos


Si en una clase derivada tiene una funcin miembro con la misma
firma que el de la clase base, a continuacin, decir que la funcin
de miembro de la clase derivada es reemplazar la funcin miembro de
la clase base. Si la funcin miembro es invocado por la instancia de
la clase derivada, se ejecuta la funcin miembro de la clase
derivada (y no a la funcin miembro de la clase base).
El programa siguiente muestra el concepto de mtodo de reemplazo.
Una clase de tringulo se hereda de la clase Rect y anula e metodo
rea() de la clase base por redefinirlo. Aqu est el cdigo:
override.py
from __future__ import division
class rect:
def __init__(self):
self.l = 8
self.b = 5
def area(self):
return self.l * self.b
class triangle(rect):
def __init__(self):
rect.__init__(self)
self.x = 17
self.y = 13
def area(self):
return 1/2*self.x * self.y
r=triangle()
print ("Area of triangle is ", r.area())
Output:
Area of triangle is 110.5

El programa crea un instancia r de la clase tringulo. Puesto que la


clase tringulo hereda de la clase Rect, su instancia puede ejecutar
los mtodos de rect, as como los de tringulo. En la creacin de la
instancia, el mtodo __ init__ de tringulo se invoca, que a su vez
invoca el mtodo __ init__ de rect, inicializar las variables de
instancia l, b, x, y y los valores de 8, 5, 17 y 13. Tringulo anula
el metodo area(), por lo que cuando se invoca el mtodo area () en
la instancia de r, se ejecutar el metodo rea() de la clase de
tringulo, calculando y devolviendo el rea del tringulo en lugar
de el rea del rectngulo.
Qu pasa si quiero obtener el rea del rectngulo, as como el rea
del tringulo? Para esto, es necesario llamar al mtodo de la clase

base de la clase derivada.

Accessing Methods of a Base Class from a Derived Class


Acceso a mtodos de una clase base desde una clase derivada
Se puede acceder a los mtodos de la clase base de la clase derivada
utilizando un nombre completo, anteponiendo el nombre de clase para
el nombre del mtodo. El programa siguiente muestra cmo acceder a
un mtodo de la clase base de la clase derivada:
inherit2.py
from __future__ import division
class rect:
def __init__(self):
self.l = 8
self.b = 5
def area(self):
print ("Area of rectangle is ", self.l * self.b)
class triangle(rect):
def __init__(self):
rect.__init__(self)
self.x = 17
self.y = 13
def area(self):
rect.area(self)
print ("Area of triangle is ", 1/2*self.x * self.y)
r=triangle()
r.area()
Output:
Area of rectangle is 40
Area of triangle is 110.5

El programa contiene dos clases, rect y el tringulo, los dos


consistentes en los mtodos __ init__ y area(). La clase tringulo
hereda de la clase Rect, por lo que anula el metodo rea() de la
clase base, rect. Se crea una instancia r de tringulo, y el rea()
se invoca en l. Como era de esperar, se invocar el mtodo area()
de la clase derivada, tringulo. En el mtodo de rea() de la clase
tringulo, el mtodo de la area() de la clase base, Rect, se invoca,
y el programa imprime el rea del rectngulo, as como el rea del
tringulo.
Ahora vamos a aprender acerca de la herencia de varios niveles.

Multilevel Inheritance
herencia multinivel
Cuando una clase hereda de una clase que a su vez es heredado por
alguna otra clase, usted lo llama herencia multinivel, como se
muestra en la Figura 5.2.

La clase B hereda de la clase A, que a su vez es heredada por la


clase C. B puede tener acceso a los miembros pblicos de A y C puede
tener acceso a los miembros pblicos de B y por lo tanto de A.
Por ejemplo, considere lo siguiente:

class worker:
...
...
class officer(worker):
...
...
class manager(officer):
...
...
La clase de administrador hereda de la clase de oficiales, que es
una clase derivada de la clase trabajadora. En este escenario,
worker es la clase base, officer es una clase base intermedia, y el
manager es una clase derivada.
Administrador hereda las propiedades de officer directamente y las
propiedades de la clase worker indirectamente a travs de la clase
de officer. La clase de administrador puede tener acceso a los
miembros pblicos de la clase de officer, que a su vez pueden tener
acceso a los miembros pblicos de la clase worker.
Vamos a examinar el concepto a travs de un programa.
multilevel.py

from __future__ import division


class worker:
def __init__(self, c, n, s):
self.code = c
self.name= n
self.salary = s
def showworker(self):
print ("Code is ", self.code)
print ("Name is ", self.name)
print ("Salary is ", self.salary)
class officer(worker):
def __init__(self, c,n,s):
worker.__init__(self,c,n,s)
self.hra = s*60/100
def showofficer(self):
worker.showworker(self)
print ("HRA - House Rent Allowance is ", self.hra)
class manager(officer):
def __init__(self, c,n,s):
officer.__init__(self,c,n,s)
self.da = s*98/100
def showmanager(self):
officer.showofficer(self)
print ("DA - Dearness Allowance is ", self.da)
w=worker(101, 'John' , 2000)
o=officer(102, 'David', 4000)
m=manager(103, 'Ben' , 5000)
print ("Information of worker is ")
w.showworker()
print ("\nInformation of officer is ")
o.showofficer()
print ("\nInformation of manager is ")
m.showmanager()
Output:
Information of worker is
Code is 101
Name is John
Salary is 2000
Information of officer is
Code is 102
Name is David
Salary is 4000
HRA - House Rent Allowance is 2400.0
Information of manager is
Code is 103
Name is Ben
Salary is 5000
HRA - House Rent Allowance is 3000.0
DA - Dearness Allowance is 4900.0

El programa contiene tres clases: worker, officer, y manager.

officer hereda de worker. La clase de administrador hereda de


officer. La clase de administrador puede tener acceso a los mtodos
de la officer, que a su vez puede tener acceso a los mtodos de la
clase trabajador.
Las instancias del trabajador, oficial, y el gerente son creados por
los nombres de w, o, y m. trabajador se supone que debe mostrar el
cdigo, el nombre y el salario. La clase de los oficiales se supone
que mostrar el cdigo, nombre, salario y hra. gerente se supone que
mostrar el cdigo, nombre, salario, hra, y da.
En la herencia de varios niveles, una clase se hereda de otra clase
que a su vez es heredada por una tercera clase. Puede una clase
heredar de dos o ms clases?

Two Classes Inheriting from the Same Base Class


Dos clases que heredan de la misma clase base
Considere una situacin en la que desea crear dos clases, A y B, que
tienen atributos en comn. Clase A se compone de atributos p, q, y
r, y B se compone de atributos p, q, y s. Se puede ver que tanto las
clases tienen p y q en comn. En esta situacin, es mejor crear una
tercera clase C con dos atributos p y q y dejar que A y B se heredan
de C. Este enfoque ayuda a reducir el cdigo y esfuerzo, ya que slo
es necesario escribir cdigo para el atributo r para A y para el
atributo s para B.
En el siguiente programa, dos clases heredan de la misma clase base.
Usted desea almacenar el cdigo, el nombre y la informacin del
sueldo de los officers y managers. Los atributos necesarios para la
recogida de informacin para los officer son de cdigo, nombre,
salario y hra, y que para los gerentes es de cdigo, nombre,
salario, hra, y da. Ambas clases tienen tres atributos en comn:
cdigo, nombre y salario. As que, para ahorrar tiempo y esfuerzo,
es mejor crear una clase llamado trabajador que consiste en tres
atributos: cdigo, nombre y sueldo y permiten tanto oficiales como
gerente heredan de esta clase. Aqu est el cdigo completo:
inherit3.py
from __future__ import division
class worker:
def __init__(self, c, n, s):
self.code = c
self.name= n
self.salary = s
def showworker(self):
print ("Code is ", self.code)
print ("Name is ", self.name)
print ("Salary is ", self.salary)
class officer(worker):

def __init__(self, c,n,s):


worker.__init__(self,c,n,s)
self.hra = s*60/100
def showofficer(self):
worker.showworker(self)
print ("HRA - House Rent Allowance is ", self.hra)
class manager(worker):
def __init__(self, c,n,s):
worker.__init__(self,c,n,s)
self.hra=s*60/100
self.da = s*98/100
def showmanager(self):
worker.showworker(self)
print ("HRA - House Rent Allowance is ", self.hra)
print ("DA - Dearness Allowance is ", self.da)
w=worker(101, 'John' , 2000)
o=officer(102, 'David', 4000)
m=manager(103, 'Ben' , 5000)
print ("Information of worker is ")
w.showworker()
print ("\nInformation of officer is ")
o.showofficer()
print ("\nInformation of manager is ")
m.showmanager()
Output:
Information of worker is
Code is 101
Name is John
Salary is 2000
Information of officer is
Code is 102
Name is David
Salary is 4000
HRA - House Rent Allowance is 2400.0
Information of manager is
Code is 103
Name is Ben
Salary is 5000
HRA - House Rent Allowance is 3000.0
DA - Dearness Allowance is 4900.0

Este programa define una clase trabajador que consta de tres


atributos: cdigo, nombre y salario. La clase de oficial hereda de
la clase trabajador y su mtodo __ init__, y, adems de llamar al
mtodo __ init__ de la clase trabajador, tambin calcula el atributo
hra. Del mismo modo, la clase de administrador hereda de la clase
trabajador, y su mtodo __ init__, despus de llamar al mtodo __
init__ de la clase trabajador, calcula los atributos hra y da. La
idea es que los atributos comunes tratados por una clase comn y de
los dems tratados por la clase heredada, lo que reduce el cdigo y
esfuerzo.
Echemos un vistazo a un programa ms que demuestra una clase de ser

heredado por dos clases. Supongamos que desea almacenar la


informacin de los estudiantes de ciencia y los de artes. Los
atributos que desea almacenar para los estudiantes de ciencias son
rollo, el nombre, la fsica y la qumica. Para los estudiantes de
artes que desea almacenar rollo, nombre, historia y geografa. Ambas
clases tienen dos atributos en comn, rollo y el nombre. Una clase
de estudiantes se crea con estos dos atributos comunes, rollo y el
nombre, y ambas clases se heredan de la clase de los estudiantes.
Aqu est el cdigo completo:
inherit4.py
class student:
def __init__(self, r, n):
self.roll = r
self.name= n
def showstudent(self):
print ("Roll : ", self.roll)
print ("Name is ", self.name)
class science(student):
def __init__(self, r,n,p,c):
student.__init__(self,r,n)
self.physics = p
self.chemistry=c
def showscience(self):
student.showstudent(self)
print ("Physics marks : ", self.physics)
print ("Chemistry marks : ", self.chemistry)
class arts(student):
def __init__(self, r,n,h,g):
student.__init__(self,r,n)
self.history = h
self.geography=g
def showarts(self):
student.showstudent(self)
print ("History marks : ", self.history)
print ("Geography marks : ", self.geography)
s=science(101, 'David', 65, 75)
a=arts(102, 'Ben', 70, 60)
print ("Information of science student is ")
s.showscience()
print ("\nInformation of arts student is ")
a.showarts()
Output:
Information of science student is
Roll : 101
Name is David
Physics marks : 65
Chemistry marks : 75
Information of arts student is
Roll : 102
Name is Ben

History marks : 70
Geography marks : 60

El programa crea dos instancias de la clase ciencia y de artes, s y


a, y dos de ellos pasan la informacin para el estudiante como un
argumento a sus mtodos __ init__. Dado que ambas clases heredan de
la clase del estudiante, su mtodo __ init__ invoca el mtodo __
init__ de la clase del estudiante para inicializar las variables de
instancia, rollo y el nombre, que son comunes a ambas instancias.
Despus de eso, los mtodos __ init__ de las clases de ciencias y
artes se invocan para asignar las marcas para el resto de los
atributos, como la fsica y la qumica marcas de los estudiantes de
ciencias e historia y las marcas de la geografa de los estudiantes
de artes. Para mostrar la informacin del estudiante de la ciencia,
el metodo showscience () en la instancia de s se invoca, que a su
vez invoca el metodo showstudent() de la clase del estudiante para
imprimir el atributos comunes, rollo y el nombre. La informacin de
los otros atributos, la fsica y la qumica, se muestra a travs de
la mtodo showscience (). Del mismo modo, la informacin del
estudiante de artes se muestra a travs del metodo showarts(), que
invoca el metodo showstudent() para mostrar los atributos comunes,
rollo y el nombre.
Puede una clase heredar una o ms clases? S! Y el procedimiento
se llama herencia mltiple.

Multiple Inheritance
herencia mltiple
Si una clase se deriva de ms de una clase base, usted lo llama
herencia mltiple, como se muestra en la Figura 5.3. Por lo general,
cuando se necesita para utilizar los miembros de dos o ms clases
(sin relacin) a travs de otra clase, que combina las
caractersticas de todas las clases heredando ellos.

La clase C hereda de ambos A y B. Ahora C puede tener acceso a los


miembros pblicos de A y B.
Por ejemplo, considere lo siguiente:
class worker

{ ...
...
}
class officer
{ ...
...
}
class manager(worker,officer)
{ ...
...
}

Ya ves que, sin conexin entre ellos, las dos clases de bases,
trabajador y oficial, se heredan de la clase manager. Ahora
administrador puede tener acceso a los miembros pblicos de los
trabajadores, as como de oficiales.
nota
Todas las clases de base que han de ser heredado tienen que ser
separados por comas.
El siguiente programa explica la herencia mltiple. Dos clases, los
estudiantes y la ciencia, son heredadas por tercera clase,
resultados.
multiple.py
from __future__ import division
class student:
def __init__(self, r, n):
self.roll = r
self.name= n
def showstudent(self):
print ("Roll : ", self.roll)
print ("Name is ", self.name)
class science:
def __init__(self, p,c):
self.physics = p
self.chemistry=c
def showscience(self):
print ("Physics marks : ", self.physics)
print ("Chemistry marks : ", self.chemistry)
class results(student,science):
def __init__(self, r,n,p,c):
student.__init__(self,r,n)
science.__init__(self,p,c)
self.total = self.physics+self.chemistry
self.percentage=self.total/200*100
def showresults(self):
student.showstudent(self)
science.showscience(self)
print ("Total marks : ", self.total)
print ("Percentage marks : ", self.percentage)
s=results(101, 'David', 65, 75)

print ("Result of student is ")


s.showresults()
Output:
Result of student is
Roll : 101
Name is David
Physics marks : 65
Chemistry marks : 75
Total marks : 140
Percentage marks : 70.0

estudiante est definido por dos atributos, r y n, que representan


roll y el nombre. Una clase ms, ciencia, se define que tiene
atributos p y c, que representa a la fsica y la qumica. Una clase
de resultados se define que se hereda de ambos estudiante y la
ciencia, por lo que los resultados pueden tener acceso a los
atributos de los estudiantes y la ciencia: r, n, p, y c. La clase de
resultados calcula total y el porcentaje de p y c (fisica y la
qumica) y muestra todos los seis atributos.
En caso de herencia mltiple, puede surgir un estado confuso.

Two Base Classes Having a Method with the Same Name and
Signature
Dos clases de base que tiene un mtodo con el mismo nombre
y firma
Qu suceder si las dos clases que se derivan de una tercera clase
contiene un mtodo con la misma firma? Supongamos que hay dos
clases, A y B, que tienen un mtodo con el mismo nombre y la firma,
area(), y una tercera clase C hereda de ambos A y B. La instancia de
C tendr dos copias del mtodo rea(). Qu mtodode area() va a
ejecutar, el de A o el de B?
La respuesta es que se ejecutar el mtodo de la clase A. El
siguiente programa confirma que ser visitada el mtodo de la
primera clase, si dos clases tienen un procedimiento de la misma
firma en la herencia mltiple:
basefunc.py
from __future__ import division
class rect:
def __init__(self):
self.l = 8
self.b = 5
def area(self):
return self.l * self.b
class triangle:

def __init__(self):
self.x = 17
self.y = 13
def area(self):
return 1/2*self.x * self.y
class both(rect, triangle):
pass
r=both()
print ("Area of rectangle is ", r.area())
Output:
Area of rectangle is 40

El programa contiene dos clases, rect y el tringulo, los dos


consistentes en __ init__ y mtodos area(). Ambas clases se accede
por una clase denominada both. tanto no tiene mtodos propios.
Adems, su instancia r tendr dos copias del mtodo rea(). Al
acceder area() a travs de r, se observa que se accede al mtodode
area() de rect, mostrando el rea del rectngulo.
Puede aplicar operaciones aritmticas sobre las instancias de la
clase de la misma manera como se las aplica en los nmeros. Vamos a
aprender ms sobre l.

Operator Overloading
sobrecarga de operadores
Para sobrecargar un operador estndar significa que usted solicita
operadores aritmticos para una instancia de clase para realizar las
operaciones deseadas. Puede sumar, restar, multiplicar y dividir los
casos utilizando los operadores estndar de la misma forma en que se
utilizan con los nmeros. Por ejemplo, el mtodo __ add__ se utiliza
para agregar instancias al igual que hace el operador de suma (+).
Cuando se utiliza un operador como +, Python llama al mtodo
especial __ add__ en el fondo. Todo lo que necesitas hacer es
implementar __ add__ para agregar dos instancias.
El siguiente programa, aade las instancias r1 y r2 de la clase rect
mediante el operador +:
operatorovr1.py
class rect:
def __init__(self, x,y):
self.l = x
self.b = y
def __str__(self):

return 'Length is %d, Breadth is %d' %(self.l, self.b)


def __add__(self, other):
return rect(self.l+ other.l, self.b+other.b)
def rectarea(self):
return self.l * self.b
r1=rect(5,8)
r2=rect(10,20)
r3=r1+r2
print (r3)
print ("Area of rectangle is ", r3.rectarea())
Output:
Length is 15, Breadth is 28
Area of rectangle is 420

En este programa, r1 y r2 son creados de la clase Rect. Las


variables de instancia L y B de la instancia de r1 se inicializan a
valores de 5 y 8. L y B de la instancia de r2 se inicializan a los
valores 10 y 20. Entonces, r1 y r2 se aaden a travs del operador
+, y el resultado se almacena en el recin creado instancia r3.
El operador + se invoca a travs de instancias r1, hacindose pasar
y la segunda instancia, r2, al metodo __ add__, donde l y b ambaos
instancias son aadidas, regresando y asignando a la instancia r3.
El mtodo __ str__ se invoca al llamar una sentencia print para
mostrar la representacin de cadena dela instancia r3 . El mtodo __
str__ muestra los valores de las variables de instancia de r3. El
programa tambin calcula y muestra el rea del rectngulo en la
instancia aadida.

Overloading the Comparison Operator (==)


La sobrecarga del operador de comparacin (= =)
El siguiente programa explica cmo sobrecargar el operador de
comparacin (==) para ver si las dos instancias tienen variables de
instancia con el mismo valor.
operatorovr2.py
class rect:
def __init__(self, x,y):
self.l = x
self.b = y
def __str__(self):
return 'Length is %d, Breadth is %d' %(self.l, self.b)
def __eq__(self, other):
return ((self.l== other.l) and (self.b==other.b))
def rectarea(self):
return self.l * self.b
r1=rect(5,8)
r2=rect(10,20)
if r1==r2 :
print('The two instances are equal')
else:
print('The two instances are not equal')

Output:
The two instances are not equal

El programa crea dos instancias de la clase rect, r1 y r2. Las


variables de instancia l y b de la instancia de r1 se inicializan a
5 y 8. Las variables de instancia l y b de la instancia de r2 se
inicializan a 10 y 20. Las instancias r1 y r2 son comparados a
travs del operador igual (==) para ver si son la misma. Dado que
los valores de las variables de instancia de las dos instancias no
son iguales, el programa muestra un mensaje, Las dos instancias no
son iguales.

Polymorphism
polimorfismo
Poli significa muchos, y metamorfosis significa cambio. A travs de
polimorfismo, se puede tener un mtodo con el mismo nombre en
diferentes clases para realizar diferentes tareas. Usted puede
manejar objetos de diferentes tipos de la misma manera.
Para implementar el polimorfismo, se define un nmero de clases o
subclases que tienen el mtodo (s) con el mismo nombre. Estas clases
o subclases son polimrficos. Puede acceder a los mtodos
polimrficos sin saber que clase o subclase es incovado.
Por ejemplo, el porcentaje de comisin por la venta de un libro
puede ser diferente para un almacenero, un distribuidor y un
minorista. Se puede definir un mtodo de comisin() en tres clasesalmacenistas, distribuidores y minoristas, donde cada mtodo calcula
un porcentaje diferente de comisin.
En la ejecucin del programa, el mtodo respectiva comisin() se
llama en cada instancia. Este es un programa completo que muestra
polimorfismo.
polymorphism.py
class book:
def __init__(self,x):
self.price = x
class stockist(book):
def __init__(self,x):
book.__init__(self,x)
def commission(self):
self.comm=self.price*5/100
print ("Commission of Stockist is %.2f" %self.comm)
class distributor(book):
def __init__(self,x):
book.__init__(self,x)
def commission(self):
self.comm=self.price*8/100
print ("Commission of Distributor is %.2f" %self.comm)
class retailer(book):

def __init__(self,x):
book.__init__(self,x)
def commission(self):
self.comm=self.price*10/100
print ("Commission of Retailer is %.2f" %self.comm)
r = stockist(100)
s = distributor(100)
t = retailer(100)
prncomm = [r,s,t]
for c in prncomm:
c.commission()
Output:
Commission of Stockist is 5.00
Commission of Distributor is 8.00
Commission of Retailer is 10.0

El programa crea r, s, y t instancias del almacenista, distribuidor


y minorista. Las tres clases, almacenista, distribuidor y minorista,
heredan la clase book.
Las tres instancias inicializa su instancia de la variable price
mediante la invocacin del mtodo __ init__ de la clase book. Se
crea una lista prncomm que contiene los tres casos.
Se accede a una instancia a la vez de prncomm, y se accede a su
mtodo de comisin () para calcular y mostrar la comisin de la
clase respectiva. Desde la salida, se observa que el mtodo de
comisin() de cada clase calcula y muestra a la Comisin, por lo
tanto, la implementacin de polimorfismo.

Properties - Propiedades
Las propiedades se utilizan para administrar los atributos con
mtodos get / set. En versiones anteriores de Python, la gestin de
los atributos se hace reemplazando con metodos __ getattr__ y __
setattr__.
Para evitar la sobrecarga de anular estos dos mtodos, se utilizan
las propiedades. Se utiliza propiedades para redirigir conjunto de
un atributo, obtener, o incluso borrar la operacin a una funcin.
propertyex.py
class product(object):
def __init__(self, name):
self._name = name
def set_name(self, name):
print ('Setting product name: %s' % name)
self._name = name
def get_name(self):
return self._name
def del_name(self):
del self._name
name = property(get_name, set_name)

p = product('Camera')
print('Getting product name ', p.name)
p.name='Cell'
print('Getting product name ', p.name)
Output:
Getting product name Camera
Setting product name: Cell
Getting product name Cell

Este programa crea una propiedad de nombre que consta de dos


mtodos, get_name y set_name, en la clase de producto. Una instancia
de productos, p, se crea que inicializa su instancia de variable
_name para la Camara mediante la invocacin de su mtodo __ init__.
El acceso a la propiedad name en p, el mtodo get_name de la
propiedad se invocar automticamente y devolver el valor de la
variable de instancia _name. Del mismo modo, en la asignacin de
valor a la propiedad del nombre, el mtodo set-name se invocar,
asignando el valor pasado a la propiedad a la variable de instancia,
_name.
Hay otra manera de administrar los atributos de instancia,
descriptores. Un descriptor es un superconjunto de propiedades.

Descriptors Descriptor
Los descriptores son las clases que nos permiten gestionar instancia
atribuye de manera eficiente. Para administrar los atributos de
instancia, se utilizan tres mtodos: __ set__, __ get__ y __
delete__. Los descriptores son de dos tipos:
-Los datos no descriptor.-La clase que implementa slo el
mtodo __ get__ para un objeto se conoce como un descriptor no
datos.
-Descriptor de datos.- La clase que implementa los metodos __
delete__ y __ set__ as como el mtodo __ get__ para un objeto
que se conoce como un descriptor de datos.
Al acceder a un atributo de instancia, Python obtiene el valor del
atributo llamando __ get__ en el descriptor correspondiente. Del
mismo modo, cuando se asigna un valor a una instancia de atributo
con un descriptor correspondiente, el valor de ese atributo se
establece llamando __ set__ en el descriptor.
La sintaxis de los descriptores de codificacin es la siguiente:

class Descriptor:

def __get__(self, instance, owner):


...
def __set__(self, instance, value):
...
def __delete__(self, instance):
...
El programa siguiente muestra cmo utilizar los metodos __ set __ y
__ get__ en establecer y obtener instancia atributos:
descript.py
class product:
def __init__(self, name, x=5):
self.name = name
self.price=x
def __set__(self, obj, value):
print ('Setting attribute' , self.name)
self.price = value
def __get__(self, obj, objtype):
print ('Getting attribute',self.name)
return self.price
class cart:
p = product('butter',7)
k=cart()
print(k.p)
k.p=10
print(k.p)
Output:
Getting attribute butter
7 Setting attribute butter
Getting attribute butter
10

Una clase de producto se define, que consta de tres mtodos, __


init__, __ set__ y __ get__. Otra clase, cart, se define que
contenga una instancia p de producto. p inicializa su variables de
instancia, el nombre y el precio, a butter y 7.
Se crea una instancia k de la clase cart. Se accede a la instancia p
de producto a travs de k en una sentencia de impresin. El mtodo
__ get__ se invoca automticamente al acceder a una instancia. El
mtodo __ get__ devuelve los valores de las variables de instancia
name y precio para mostrar la informacin en ellos.
Adems, el programa asigna 10 a la instancia de p de la instancia de
k. Como era de esperar, el mtodo __ set__ se invoca en la
asignacin de un valor a cualquier variable de instancia. El mtodo
__ set__ asigna el valor pasado 10 a la variable instancia de precio
de la instancia de p.

Para leer y escribir los atributos de clase, puede utilizar los


metodos de __ getattr__ y __setattr__.

The __setattr__ Method


El mtodo __ setattr__
El mtodo __ setattr__ se llama cada vez que se intenta asignar un
valor a una variable de instancia. Al asignar un valor a un
atributo, se debe tener cuidado de que el valor no se puede asignar
de la forma habitual, como se muestra aqu:
self.name = value,
Esto dar lugar a un nmero infinito de llamadas recursivas a __
setattr__. Por lo tanto, se utiliza el diccionario para asignar
valores a las variables de instancia:
def __setattr__(self, name, value):
self.__dict__[name] = value
El mtodo __ setattr__ tambin se puede utilizar para llevar a cabo
la comprobacin de tipos en los valores antes de asignarlos a
variables de instancia.

The __getattr__ Method


El mtodo __ getattr__ obtiene un atributo de una instancia mediante
un objeto de cadena y se llama cuando se produce un error de
bsqueda de atributos, es decir, cuando se intenta acceder a un
atributo definido. El mtodo __ getattr__ debe devolver el valor (de
cualquier tipo) de la variable de instancia o lanzar una excepcin
AttributeError.
def __getattr__(self, name):
return self.name

The __delattr__ Method


El mtodo __ delattr__ se llama cuando un atributo de una instancia
se elimina a travs de la sentencia del.
def __delattr__(self, name):
del self.name
El siguiente programa muestra el uso delos metodos __ setattr__ y
__getattr__ para establecer y obtener atributos de instancia:

getsetattr.py

class product:
price=25
def __init__(self, name):
self.name=name
def __setattr__(self,name,value):
self.__dict__[name]=value
def __getattr__(self,name):
return self.name
p=product('Camera')
print (p.price)
print (p.name)
p.price=15
p.name="Cell"
print (p.name)
print(p.price)
Output:
25
Camera
Cell
15
Una clase de producto se define mediante tres mtodos: __ init__, __
setattr__ , __getattr__. La clase contiene un atributo de clase,
precio, inicializado a 25. Se crea una instancia p de producto que
inicializa su variable de instancia nombre a la cmara.
A continuacin se accede a precio y name de los atributos de
instancia, lo que resulta en la invocacin __ getattr__. El mtodo
__ getattr__ devuelve el valor de la variable de instancia nombre.
Adems, el programa asigna los valores 15 y Cell al precio y nombre,
lo que resulta en __ setattr__ est invocando. En el mtodo __
setattr__, los valores se asignan a las variables de instancia
utilizando el diccionario para evitar las llamadas recursivas.

Summary -

resumen

En este captulo se centra en clases. Usted aprendi a definir una


clase, definir funciones para ello, inicializar sus variables de
instancia, y el uso de clases y mtodos estticos. Tambin aprendi
a utilizar los atributos de clase para mostrar informacin
especfica relacionada con la clase. Nos fijamos en la recoleccin
de basura y su papel en la liberacin de memoria consumida por los
objetos que estn fuera de su alcance. Usted aprendi a aplicar la
herencia simple, multinivel, y mltiples a travs de ejemplos de
funcionamiento. Usted aprendi el uso de especificadores de acceso
pblico y privado y la forma de aplicar el mtodo de primer orden y
la sobrecarga de operadores para realizar operaciones aritmticas
sobre instancias. Por ltimo, usted aprendi sobre el polimorfismo y
la configuracin y obtener los valores de los atributos de instancia

a travs de las propiedades y los descriptores.


En el prximo captulo usted aprender sobre el manejo de archivos.
Usted aprender a abrir los archivos en diferentes modos y realizar
diferentes tareas como la lectura, actualizacin, eliminacin y
aadiendo contenido a un archivo. Usted aprender a copiar el
contenido de un archivo a otro.

Chapter 6. File Handling


Captulo 6. Manejo de Archivos
En este captulo se tratan los siguientes temas:
La apertura de un archivo
Realizar acciones en un archivo
Visualizacin de la informacin de un objeto de archivo
La lectura de un archivo
Aadir el contenido a un archivo
Copiar un archivo
Eliminacin de contenido de un archivo
Actualizacin de contenido de un archivo
Leyendo el contenido de un archivo al azar
El acceso a contenido especfico de un archivo
Creacin de un archivo binario
Serializacin (pickling)
El manejo de excepciones
El uso de un bloque try / except
El uso de un try / finally
Lanzar excepciones
Un archivo es un contenedor para una secuencia de objetos de datos,
representados como secuencias de bytes. Manejo de archivos es una
tcnica mediante la cual es posible almacenar datos y puede
recuperar ms tarde. Cuando se ejecuta un programa, ste le pide que
introduzca algunos datos (para transformacin), y la informacin
procesada se muestra en la pantalla.
Los datos que introduzca durante la ejecucin de un programa se
almacena en la memoria RAM, que es de carcter temporal, por lo que
si ms adelante desea ver los datos que se ha especificado, no se
puede conseguir. Para recuperar los datos en el futuro, es necesario
que sea persistente.
Usted tendr que lidiar con tres tipos de archivos: texto, binario,
y los objetos pickle:

Los archivos de texto se codifican y se guardan en un formato


que puede ser visto por muchos programas, as como las
personas. Los archivos de texto son difciles de actualizar en
su lugar.
Los archivos binarios se formatean para optimizar la velocidad
de procesamiento. Un archivo binario tpicamente colocar datos

en desplazamientos conocidos, por lo que es posible acceder a


cualquier byte de particular usando el metodo seek().
Archivos pikled se formatean a los objetos almacenados. Los
objetos se almacenan en formato binario para optimizar el
rendimiento.

Se requieren los siguientes tres pasos para trabajar con archivos:

La apertura de un archivo
Realizacin de acciones en el archivo (lectura, escritura,
actualizacin de los contenidos)
Cierre el archivo

Opening a File Abriendo un Archivos


La sintaxis para la apertura de un archivo es la siguiente:
open(file_name, mode)
file_name representa el nombre del archivo, y el mode especifica el
propsito de abrir el archivo.
El mtodo open() devuelve un identificador de archivos que
representa el archivo en el disco. El manejador de archivos tambin
se puede colocar en lugares de bytes deseados en el archivo para
leer o escribir contenido especfico del archivo. La Tabla 6.1
muestra las opciones de modo de abrir un archivo.

For example:
f = open('xyz.txt', 'w')

Esto crea la xyz.txt archivo en modo de escritura y devuelve el


manejador de archivo para f variable. Cualquier contenido
anteriormente en xyz.txt se borrar.

Performing Actions on a File


Realizacin de acciones en un archivo
Despus de abrir un archivo, el siguiente paso es llevar a cabo
alguna tarea en el archivo, como la escritura, la lectura,
estableciendo el controlador de archivo en una ubicacin especfica,
o conseguir la ubicacin del controlador de archivo. Vamos a echar
un vistazo rpido a los mtodos de archivo diferentes. Tabla 6.2
muestra los mtodos utilizados para el funcionamiento de un archivo
en Python.
metodo

proposito

close()

Cierra el archivo, el lavado de


todos los datos.

read([n])

Lee el nmero n de caracteres o


bytes desde el archivo. Si el
valor de n es opcional
negativo o se omite, se lee el
resto del archivo.

readline([n])

Lee la siguiente lnea del


archivo. Si n es negativo o se
omite, la siguiente lnea
completa se lee. El valor
positivo del parmetro n es si se
proporciona leern n nmero de
caracteres del archivo. Si una
lnea completa se lee, se incluye
el carcter de nueva lnea, \ n.

readlines([n])

Lee las siguientes lneas del


archivo. Si se proporciona el
valor opcional n, el mtodo lee
las siguientes lneas de los
siguientes n caracteres del
archivo. Si n es negativo o se
omite, se lee el resto del
archivo. Todas las lneas tendrn
incluir el carcter de salto de
lnea final, \ n

flush()

Vaca todos los datos de los


buffers internos para el archivo
del sistema operativo.

write(string)

Escribe la cadena dada en el


fichero.

writelines(list)

Escribe la lista de cadenas en el


archivo.

seek(offset,location)

Establece la ubicacin del


controlador de archivo en el

desplazamiento especificado. La
ubicacin define si el
desplazamiento se refiere a la
posicin actual del controlador
de archivo, a partir del archivo,
o el final del archivo. El valor
predeterminado de la ubicacin es
0. Ejemplos: f.seek (0) mueve el
controlador de archivo al
principio del archivo. f.seek
(10, 1) se mueve el controlador
de archivo de 10 bytes a partir
de su posicin actual.Si el
desplazamiento offset es
negativo, el controlador de
archivo se mover hacia atrs
desde su posicin actual. f.seek
(10, 2) mueve el controlador de
archivo a la dcima de bytes
desde el final del archivo.
f.seek (0, 2) se mueve el
controlador de archivo en el byte
0 desde el final del archivo.
Esto posiciona el manejador de
archivo al final del archivo, por
lo que es posible anexar
contenidos en el fichero.
tell()

Para entender
programas. El
aboutbook.txt
escrito en el
pantalla.

Devuelve la posicin del


controlador de archivo.

el uso de estos mtodos, vamos a escribir algunos


siguiente programa crea un archivo denominado
y escribe un par de lneas en el mismo. El texto
archivo es entonces accede y se visualiza en la

createfile1.py
matter = '''Python is a great language
Easy to understand and learn
Supports object Oriented Programming
Also used in web development '''
f = open('aboutbook.txt', 'w')
f.write(matter)
f.close()
f = open('aboutbook.txt')
while True:
line = f.readline()
if len(line) == 0:
break
print (line,)

f.close()
Output:
Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development

Texto multilnea se asigna a la variable asunto. Un archivo llamado


aboutbook.txt se abre en modo de escritura, borrar su contenido, si
la hay. El manejador de archivo para el archivo aboutbook.txt se
asigna a la variable f. El texto de varias lneas en la variable de
asunto se escribe en el archivo con el metodo write(), y se cierra
el archivo. Para confirmar el contenido est escrito en el archivo,
se abre en modo de lectura, y se accede y se asigna a una variable
de la lnea, que luego se muestra en la pantalla las lneas de texto
en el archivo.
nota
Una lnea en blanco lleva un carcter de nueva lnea \n y se
considera una cadena de longitud 1.

Displaying Information from a File Object


Visualizacin de la informacin de un objeto File
En la creacin de un objeto de archivo, puede utilizar diferentes
mtodos y atributos para obtener informacin detallada sobre el
estado del objeto. Mtodos y atributos del objeto de archivo se
muestran en la Tabla 6.3.
Table 6.3. Methods and Attributes of a File Object
Method/Attribute

Method/Attribute

fileno()

Devuelve el descriptor de fichero


interno utilizado por la
biblioteca OS cuando se trabaja
con este archivo.

isatty()

Devuelve true si el archivo est


conectado a la consola o el
teclado.

closed

Este atributo es true si el


archivo est cerrado.

mode

Este atributo es el modo del


archivo que se utiliz para crear
el objeto de archivo a travs de
la funcin open().

name

Este atributo es el nombre del


archivo que se pasa a la funcin
open() al crear el objeto de

archivo.

Lo que sigue es un programa que muestra los atributos de un objeto


de archivo:
fileattrib.py
f = open("aboutbook.txt", "r")
print ("Name of the file:", f.name)
print ("Closed?", f.closed)
print ("Opening mode:", f.mode)
print ("File number descriptor is:", f.fileno())
f.close()
Output:
Name of the file: aboutbook.txt
Closed? False
Opening mode: r
File number descriptor is: 3

El programa se abre aboutbook.txt en modo de escritura. El manejador


de archivo del archivo est representado por una variable f. El
nombre del archivo, su modo, su descriptor de archivo y su estado
(abierto o cerrado) se muestran llamando a los mtodos y los
atributos respectivos.

Reading from a File


Leer en un archivo
En el programa createfile1.py que utiliz readLine () en un bucle
para acceder a una lnea a la vez desde el archivo para que aparezca
en la pantalla. El programa siguiente muestra cmo leer todo el
contenido del archivo.
fileread.py
f = open('aboutbook.txt', 'r')
lines = f.read()
print (lines)
f.close()
Output:
Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development

El programa abre el archivo aboutbook.txt que cre en el programa


anterior en modo de lectura. Se accede al contenido del archivo a
travs de read() y se asigna a la variable lneas, que luego se
muestran en la pantalla. Por ltimo, se cierra el archivo.

En este programa, que se abri el archivo aboutbook.txt en modo de


lectura. Y si el aboutbook.txt archivo no existe? Python muestra un
mensaje de error tcnico cuando se intenta abrir un archivo que no
existe, como se muestra aqu:
Traceback (most recent call last):
File "C:\pythonprograms\fileread.py", line 1, in <module>
f = open('aboutbook.txt', 'r')
IOError: [Errno 2]No such file or directory: 'aboutbook.txt'

El mensaje de error se muestra a travs del controlador de errores


Python por defecto. Puede hacer que el mensaje de error ms legible
a travs de la gestin de excepciones. Usted aprender el manejo de
excepciones en detalle en la siguiente seccin, pero aqu est un
pequeo ejemplo:
filereadtry.py
import sys
try:
f = open('aboutbook.txt', 'r')
lines = f.read()
except IOError:
print ('File aboutbook.txt does not exist')
sys.exit(1)
f.close()
print (lines)
Output:
File aboutbook.txt does not exist
Traceback (most recent call last):
File "C:\pythonprograms\filereadtry.py", line 7, in <module>
sys.exit(1)
SystemExit:1

Al abrir un archivo para lectura, se produce una excepcin IOError


si el archivo no existe. Sin un bloque try / except, Python
simplemente imprime el mensaje de error en el lenguaje tcnico, como
se vio en un programa anterior
Cuando se utiliza el mismo enfoque con un bloque try / except, la
IOException es capturado por la clusula de excepcin, y la
declaracin, en la clusula salvo que se ejecuta para mostrar el
mensaje de error legible(s) con el fin de guiar al usuario a tomar
medidas correctivas.
La clusula de excepcin se omitir si el archivo que est
intentando abrir ya existe. El contenido del archivo se mostrarn
sin ningn mensaje de error en ese caso.
Los stdin, stdout y stderr variables contienen objetos de flujo
correspondientes a flujos a E / S estndar . Usted las puede
utilizar para tener un mejor control sobre los flujos. El siguiente
programa muestra el uso de la salida estndar para la visualizacin
de los contenidos en la pantalla:
fileread2.py

import sys
f = open('aboutbook.txt', 'r')
lines = f.readlines()
f.close()
print('The contents in the file are:', lines)
print('\nThe contents in the file are:')
for line in lines:
sys.stdout.write(line)
print('\n\nThe contents in the file are:')
for i in range(0, len(lines)):
sys.stdout.write(lines[i])
Output:
The contents in the file are: ['Python is a great language\n', 'Easy to
understand and
learn\n', 'Supports Object Oriented Programming\n', 'Also used in web
development ']
The contents in the file are:
Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development
The contents in the file are:
Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development

El mdulo sys se importa en el programa. El archivo aboutbook.txt se


abre en modo de lectura. Se accede a todo el texto en el archivo y
se almacena en una variable de lines. lines es una lista en la que
cada elemento representa una lnea del archivo. Entonces la salida
estndar stdout se utiliza para mostrar cada elemento en lines.

Appending Content to a File - Aadiendo contenido a un


archivo
El programa siguiente muestra cmo anexar el contenido en un
archivo:
fileappend.py
import sys
matter2 = ''' Its very hot today
Lets have a Cold drink '''
f = open('aboutbook.txt', 'a' )
f.write("\n%s" %matter2)
f.close()
f = open('aboutbook.txt', 'r' )
lines = f.readlines()
f.close()
print('The contents in the file are:')

for line in lines:


sys.stdout.write(line)
Output:
The contents in the file are:
Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development
Its very hot today
Lets have a Cold drink

Texto multilnea se asigna a una variable, matter2. Un archivo


aboutbook.txt se abre en modo de adicin de forma que su manejador
de archivo se coloca en el extremo del archivo. El texto en matter2
se aade al final de aboutbook.txt. El archivo se cierra. Para
confirmar si el texto es realmente anexa al archivo, puede abrirlo
en el modo de lectura, y se accede y se almacena en una variable de
las lines de su contenido. En la visualizacin de los contenidos en
lnes, usted observa que el contenido en matter2 se aaden a los
contenidos anteriores en aboutbook.txt.

Copying a File Copiando

un archivo

El programa siguiente muestra cmo hacer una copia del archivo


aboutbook.txt y el nombre de copyaboutbook.txt:
filecopy.py
f = open('aboutbook.txt', 'r')
lines = f.read()
f.close()
g = open('copyaboutbook.txt', 'w' )
g.write(lines)
g.close()
print('The copy of the file is made')
g = open('copyaboutbook.txt', 'r' )
lines = g.read()
print (lines)
g.close()
Output:
The copy of the file is made
Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development

El programa se abre aboutbook.txt en modo de lectura, lee su


contenido, y lo almacena en la varable lnes. El archivo se cierra.
Despus de eso, un archivo llamado copyaboutbook.txt se abre en modo
de escritura. El contenido del archivo aboutbook.txt en lnes se
escribe en copyaboutbook.txt. Para confirmar si el contenido se
copia correctamente al copyaboutbook.txt, puede abrirlo en el modo
de lectura, y se accede y se muestra su contenido.

Deleting Content from a File Borrando el contenido de un


archivo
El programa siguiente muestra el procedimiento de borrar el
contenido de un archivo. El procedimiento es bastante simple.
Primero se abre el archivo en modo de lectura, y su contenido
existente se copia temporalmente en una lista. Entonces el contenido
sera borrado y se borran de la lista. El archivo se abre en modo de
escritura, borrar todo su contenido. El contenido de la lista que
representa los datos deseados y de la que ya se extrae el contenido
no deseado se copia en el archivo. El cdigo para borrar el
contenido de un archivo aparece como se muestra aqu:
delfilecontent.py
import sys
f = open('aboutbook.txt', 'r' )
lines = f.readlines()
print('Original content of the file:')
for line in lines:
sys.stdout.write(line)
f.close()
del lines[1:3]
f = open('aboutbook.txt', 'w' )
f.writelines(lines)
f.close()
print('\nThe content of the file after deleting second and third line:')
f = open('aboutbook.txt', 'r' )
lines = f.read()
print (lines)
f.close()
Output:
Original content of the file:
Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development
The content of the file after deleting second and third line:
Python is a great language
Also used in web development

El programa abre aboutbook.txt en modo de lectura y recuperaciones y


almacena su contenido en las lnes. El archivo se cierra. El
contenido que se va a eliminar del archivo se borra de lnes.
aboutbook.txt y se abre en modo de escritura, borrando su contenido
existente. El contenido de las lnes se escribe en aboutbook.txt, y
se cierra el archivo. Para confirmar que los datos se eliminan del
archivo, puede abrirlo en el modo de lectura, y se muestra su
contenido. La salida confirma que el contenido no deseado se elimina
del archivo.

Updating the Content of a File actualizando el contenido


de un archivo
El programa siguiente muestra la tarea de actualizar el contenido de

un archivo. Primero se abre el archivo en modo de lectura, y su


contenido existente se copia temporalmente en una variable, lneas.
El contenido original en el archivo se muestra a partir de lneas.
Entonces se le pide al usuario que especifique el nmero de lnea
para actualizar. El nuevo contenido introducido por el usuario se
almacena en la ubicacin en lneas especificadas por el usuario, la
sustitucin de su contenido anterior. El archivo se abre en modo de
escritura, borrar todo su contenido. El contenido de la lista que
representa los datos actualizados se copia en el archivo. El cdigo
para la actualizacin de contenidos en un archivo aparece aqu:
updatefilecont.py
import sys
f = open('aboutbook.txt', 'r')
lines = f.readlines()
print('Original content of the file:')
for line in lines:
sys.stdout.write(line)
f.close()
n=int(input ("\n\nEnter the line number to change: "))
if n <=len(lines):
r=input("Enter the new content: ")
lines[n-1]=r+"\n"
f = open('aboutbook.txt', 'w' )
f.writelines(lines)
f.close()
print('The content of the file after updating line' , n)
f = open('aboutbook.txt', 'r' )
lines = f.read()
print (lines)
f.close()
else:
print ("The line number", n, "is not found in the file" )
Output:
Original content of the file:
Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development
Enter the line number to change: 2
Enter the new content: Easy to develop applications
The content of the file after updating line 2
Python is a great language
Easy to develop applications
Supports Object Oriented Programming
Also used in web development

El programa se abre aboutbook.txt en modo de lectura y


recuperaciones y almacena su contenido en las lneas. El contenido
original del archivo se muestran mostrando elementos en lneas. El
archivo se cierra. Se le pide al usuario que especifique el nmero
de lnea (s) para modificar y su nuevo contenido. El nuevo contenido
introducido por el usuario se almacenan en la lista en los lugares
de ndice especificadas, sustituyendo el contenido anterior. El

contenido de las lneas se escribe en aboutbook.txt, seguido de


cerrar el archivo. Para confirmar que los datos se actualizan en el
archivo, ste se abre en modo de lectura, y su contenido se
muestran. La salida confirma que el contenido en el archivo se
actualiza.

Reading the Content of a File Randomly


Leyendo el contenido de un archivo al azar
Se puede leer el contenido del archivo al azar? Es decir, en lugar
de leer el contenido del archivo desde el principio, se puede leer
desde cualquier ubicacin que desea? S! Este programa hace eso.
filerandomread.py
f = open('aboutbook.txt', 'r')
line=f.readline()
print('A line from file is:', line)
f.seek(5)
line=f.readline()
print('The line from character 6 till end of line is:', line)
print ('The pointer is at location', f.tell())
f.seek(10)
line=f.read(15)
print ('The fifteen characters starting at location 11 are as:', line)
Output:
A line from file is: Python is a great language
The line from character 6 till end of line is: n is a great language
The pointer is at location 28
The fifteen characters starting at location 11 are as: a great language

El programa abre aboutbook.txt en modo de lectura. Al abrir el


archivo, el controlador de archivo se coloca en el principio del
archivo por defecto. Por lo tanto, la lectura de una lnea desde el
archivo cuando el manejador de archivos est en el principio del
archivo se mostrar la primera lnea del archivo. A continuacin, el
controlador de archivo se coloca en el quinto byte desde el
principio del archivo con el metodo seek() para leer toda la lnea
que comienza en el sexto carcter. Una vez ms, el controlador de
archivo se coloca en el dcimo byte desde el principio del archivo
para leer 15 caracteres iniciales desde el carcter undcima.

Accessing Specific Content in a File


Acceso a contenido especfico en un archivo
Hay alguna manera de acceder a una lnea especfica de texto del
archivo en lugar de acceder al archivo completo? S, y aqu est el
cdigo para hacerlo. El siguiente programa accede y visualiza la
tercera lnea de aboutbook.txt.
fileanyline.py
import linecache
line=linecache.getline('aboutbook.txt', 3)
print ('The content of the third line is:', line)

Output:
The content of the third line is: Supports Object Oriented Programming

Esto supone que aboutbook.txt tiene el siguiente contenido:


Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development

Este programa importa el mdulo linecache y utiliza su mtodo


getline para acceder a la tercera lnea de aboutbook.txt, que luego
se muestra en la pantalla.
Ahora vamos a ver cmo crear un archivo numrico. El siguiente
programa crea un archivo y almacena nmeros en ella:
filenumerical.py
f = open('numbers.txt', 'w' )
n=int(input('How many numbers? ' ))
print('Enter', n, 'numbers' )
for i in range(0,n):
m=input()
f.write("%s\n" %m)
f.close()
f = open('numbers.txt')
lines = f.readlines()
f.close()
print('The numbers stored in the file are')
for line in lines:
print (int(line),)
print('The numbers in the file multiplied by 2')
for line in lines:
print (int(line)*2,)
Output:
How many numbers? 5
Enter 5 numbers
1
2
3
4
5
The numbers stored in the file are
1
2
3
4
5
The numbers in the file multiplied by 2
2
4
6
8

10

Este programa abre un archivo numbers.text en modo de escritura y


pide al usuario que especifique cuntos nmeros se van a almacenar
en l. Los nmeros introducidos por el usuario se almacenan en el
archivo y el archivo es cerrado. Para confirmar que el archivo fue
creado y ha entrado en el contenido, que se abre en modo de lectura,
y se accede a su contenido y se muestra en la pantalla. Para
confirmar que el contenido en el archivo es de tipo numrico, el
programa muestra todos los nmeros en l despus de multiplicarlos
por 2.

Creating a Binary File


Creacin de un archivo binario
El siguiente programa crea un archivo binario y almacena una cadena
en el mismo:
binaryfile1.py
str = 'Hello World!'
f = open("filebinary.bin","wb" )
f.write(str.encode('utf-8'))
f.close()
f = open("filebinary.bin","rb" )
fcontent=f.read()
f.close()
print('The content in the file is:')
print (fcontent.decode('utf-8'))
Output:
The content in the file is:
Hello World!

El programa abre un archivo llamado filebinary.bin en modo de


escritura y almacena una cadena, Hello World!, En el mismo. La
cadena se codifica primero en UTF-8 antes de ser escritos en el
archivo. El archivo se cierra. Para confirmar si la cadena se
almacena correctamente en el archivo, ste se abre en modo de
lectura, y la cadena almacenada en ella se recupera, decodifica y
muestra en la pantalla.

Serialization(Pickling) - Serializacin(decapado)
Serializacin (tambin conocido como pickling - decapado) es un
proceso de conversin de datos estructurados en formato de flujo de
datos. A travs de la serializacin, estructuras como listas,
tuplas, funciones y clases se conservan utilizando caracteres ASCII
entre valores de datos. El formato de datos en serie est
estandarizada, por lo que las estructuras serializados con la
serializacin se pueden deserializar con cPickle y viceversa.

La serializacin se hace cuando el almacenamiento de datos, y


deserializacin se hace cuando la recuperacin de datos. Para
decapado- pickling, puede utilizar cualquiera de los mdulos, Pickle
o cPickle. Ambos mdulos funcionan de la misma, excepto que el
mdulo cPickle est escrito en el lenguaje C y es ms rpido y da
como resultado un mejor rendimiento. El siguiente programa utiliza
el mdulo Pickle para almacenar una instancia en un archivo:
pickleprog.py
import pickle
class rect:
def __init__(self, x,y):
self.l = x
self.b = y
def rectarea(self):
return "Area of rectangle is", self.l * self.b
r=rect(5,8)
f = open('studentinfo.bin', 'wb')
pickle.dump(r, f)
f.close()
del r
f = open('studentinfo.bin','rb')
storedobj = pickle.load(f)
print (storedobj.rectarea())
Output:
('Area of rectangle is',40)

El programa define una clase Rect que consta de dos mtodos,


__ init__ y rect-area(). Se crea una instancia r de la clase rect,
y sus variables de instancia, l y b, se inicializa a 5 y 8.
Un archivo binario, studentinfo.bin, se abre en modo de escritura, y
r es pickled y vertid - dumped en l. El archivo se cierra. r se
elimina despus de que se copia en el archivo binario. Para leer r
desde el archivo y lo puso de nuevo en forma utilizable, se abre el
archivo en modo de lectura, y la instancia se lee desde el archivo
con pickle.load(), unpickled, y se asigna a storedobj. El rea del
rectngulo se calcula y visualiza llamando rectArea() en el objeto
storedobj.
Este programa demuestra decapado y deserialiacin(pickling y
unpickling) una instancia de un archivo. Vamos a usar el proceso
para conservar en pickle y unpickle ms de una instancia. El
siguiente programa almacena la informacin por decapado una
instancia de la clase de user. Adems, el programa unpickles los
casos para mostrar la informacin almacenada.
pickleprog2.py
import pickle
class user:
def __init__(self, x,y,z):

self.id = x
self.name = y
self.emailadd=z
def dispuser(self):
print('User ID:', self.id)
print('User Name:', self.name)
print('Email Address:', self.emailadd)
f = open('UsersInfo.bin', 'wb')
n=int(input('How many users? ' ))
print('Enter', n, 'numbers')
for i in range(0,n):
u=input('User ID: ')
n=input('User Name: ')
e=input('Email Address: ')
usrobj=user(u,n,e)
pickle.dump(usrobj,f)
f.close()
print('\nInformation of the users is:')
f = open('UsersInfo.bin','rb')
while True:
try:
usrobj = pickle.load(f)
except EOFError:
break
else:
usrobj.dispuser()
f.close()
Output:
How many users? 3
Enter 3 numbers
User ID: johny111
User Name: John
Email Address: johny@gmail.com
User ID: kelly222
User Name: Kelly
Email Address: kelly@hotmail.com
User ID: bintu333
User Name: Bintu
Email Address: bintu@yahoo.com
Information of the users is:
User ID: johny111
User Name: John
Email Address: johny@gmail.com
User ID: kelly222
User Name: Kelly
Email Address: kelly@hotmail.com
User ID: bintu333
User Name: Bintu

Email Address: bintu@yahoo.com

El programa define una clase de usuario que consta de dos mtodos,


__ init__ y disp-user(). El mtodo __ init__ es para inicializar las
variables de instancia de la instancia respectiva del identificador
de clase de usuario, el nombre y emailadd. El mtodo dispuser() es
para la visualizacin de la informacin almacenada en las variables
de instancia. Un archivo binario UsersInfo.bin se abre en modo de
escritura. Se le pide al usuario que especifique el nmero de
usuarios cuya informacin debe ser almacenada en el archivo. Con la
ayuda de un bucle, el ID de usuario, nombre, direccin de correo
electrnico y la informacin de un determinado nmero de usuarios se
introducen y se utilizan para inicializar el id, nombre y emailadd
variables de instancia de la instancia usrobj de la clase usuario.
La instancia usrobj que contiene informacin de un usuario que se
pickled y dumped en el archivo binario. El archivo se cierra. Para
leer las instancias del archivo y ponerlos de nuevo en una forma
utilizable, se abre el archivo en modo de lectura y, a travs
pickle.load(), las instancias se leen desde el archivo uno por uno,
unpickled, y asignados a usrobj. La informacin en usrobj se muestra
llamando dispuser() en el objeto usrobj.

Exception Handling
Manejo de excepciones
Las excepciones se producen cuando ciertas situaciones surgen en un
programa. Por ejemplo, la divisin de un valor de 0, el acceso a un
elemento de la lista fuera de su rango de ndice, o la lectura de un
archivo que no existe, son situaciones que provocan excepciones.
Cuando se produce una excepcin, Python normalmente muestra un
mensaje tcnico que es un poco difcil de entender. Para hacerlo ms
fcil para un usuario para entender lo que sali mal y ofrecer una
oportunidad de corregir el error, puede capturar las excepciones
especficas y mostrar mensajes de uso fcil. Los errores de sintaxis
son diferentes de las excepciones en que los errores de sintaxis se
producen cuando cualquier declaracin no coincide con la gramtica
de la intrprete de Python. Falta de ortografa en una declaracin o
un parntesis o comilla faltante son todos los errores de sintaxis.
Para controlar las excepciones, se escribe el cdigo en un bloque
que comienza con la palabra try. Hay dos tipos de bloques try:
try/except: El cdigo que podra generar un error se escribe en
el bloque try, y todos los errores y las excepciones se manejan
a travs de la clusula de excepcin. La clusula except puede
manejar un solo error o excepcin especificada. Si no se
especifica ningn nombre de error o excepcin, salvo se
encargar de todos los errores y excepciones que aparecen en el

cdigo escrito en el bloque try. Tiene que haber al menos una


clusula except asociado con cada bloque try. Si no se maneja
cualquier error o excepcin, entonces el manejador de Python
por defecto se invoca, lo que detiene la ejecucin del programa
y muestra el mensaje de error.
try/finally: El cdigo escrito en el bloque finally siempre se
ejecuta si se produce una excepcin o no. Es decir, el cdigo
que se desea ejecutar en todas las situaciones se escribe en un
bloque finally. Por lo general, las declaraciones de cierre los
archivos abiertos, liberando la memoria, y como se escriben en
un bloque finally.

Using a try/except Block


El uso de un bloque try / except
Para el manejo de excepciones a travs de un bloque try / except, se
especifica el cdigo que podra dar lugar a una excepcin, junto con
un grupo de clusulas except. Cada excepto nombres clusula una
clase de excepcin y proporciona las instrucciones a ejecutar en
respuesta a esa excepcin.
Syntax:
try:
statement(s)
except SomeException:
code for handling exception
[else:
statement(s)]
Usted puede
bloque try.
controlador
try/excepto

tener un nmero ilimitado de clusulas except en un solo


El cuerpo de cada clusula except es conocido como un
de excepciones. Manejo de exception con bloque un
se hace de la siguiente manera:

1. Python ejecuta las sentencias en el bloque try.


2. Si ninguna de las sentencias del bloque try lanza una excepcin,
la excepcin de las clusulas son ignorados.
3. Si alguna de las sentencias del bloque try lanza una excepcin,
el resto de las sentencias en el bloque try se omiten, y cada una de
las clusulas de excepcin se examina para localizar una clusula
que coincide con la excepcin planteada. Si hay una coincidencia,
Python ejecuta la clusula except.
4. Si la excepcin planteada no coincide con ninguna de las
clusulas de excepcin, Python busca un manejador de excepciones
coincidente en cualquier cdigo que el bloque try se anida pulg Si
Python no encuentra un controlador de excepciones coincidente,
Python usa su base de en manejador de excepciones e imprime el
mensaje de error tcnico.

5. La clusula else se ejecuta slo si el bloque try se ejecuta


correctamente y completamente. Es decir, si no es la excepcin se
eleva o se ejecuta ninguna instruccin de bloque de salir, la
clusula else se ejecuta. Las sentencias que desea que se ejecutarn
si la clusula try no plantea una excepcin estn escritos en la
clusula else.
Una vez que una excepcin se ha manejado, el programa contina su
ejecucin de la primera lnea despus del bloque try / except.
nota
Puede anidar los bloques try.
Tabla 6.4 muestra excepciones que se pueden controlar, mientras que
un programa se ejecuta.
Tabla 6.4. Las excepciones que se pueden manejar durante la
ejecucin de un Programa:

Exception

Description

AssertionError

Se produce cuando asertion falla.

AttributeError

Se produce cuando un atributo no se


encuentra en un objeto.

EOFError

Se produce cuando se intenta leer


ms all del final de un archivo.

FloatingPointError

Se produce cuando falla una


operacin de punto flotante.

IOError

Se produce cuando una operacin


de E / S ha fallado.

IndexError

Se produce cuando se utiliza un


valor de ndice que est fuera de
rango.

KeyError

Se produce cuando no se encuentra


una clave de mapeo.

OSError

Se produce cuando falla una


llamada al sistema operativo.

OverflowError

Se produce cuando un valor es


demasiado grande para ser
representado.

TypeError

Se produce cuando se suministra


un argumento de tipo inapropiado.

ValueError

Se produce cuando se suministra

un valor de argumento
inapropiado.
ZeroDivisionError

Se produce cuando un nmero se


divide por 0 o cuando el segundo
argumento en una operacin de
mdulo es cero.

Vamos a ver cmo se produce una excepcin y cmo se maneja para


mostrar un mensaje fcil de usar y de adoptar medidas correctivas a
travs de un ejemplo de ejecucin. El siguiente programa demuestra
ocurrencia y manejo de una excepcin EOFError:
try1.py
import sys
try:
n = input('Enter your name ')
except EOFError:
print ('EOF error has occurred' )
sys.exit(1)
except:
print ('Some error has occurred' )
print ('The name entered is', n)
Output:
Enter your name
EOF error has occurred
Traceback (most recent call last):
File "C:\pythonprograms\try1.py", line 6, in <module>
sys.exit(1)
SystemExit:1
Enter your name Bintu
The name entered is Bintu
Este programa pide al usuario que introduzca un nombre. La
declaracin pide el nombre de usuario est encerrado en un bloque
try. Si el usuario presiona Ctrl + D en lugar de introducir un
nombre, se generar una excepcin EOFError, mostrando error EOF ha
ocurrido seguido de salir de la aplicacin. El programa tambin
muestra ha producido algn error si se produce alguna excepcin que
no sea EOFError. No hay ningn mensaje de error se mostrar si el
usuario introduce un nombre. El nombre introducido por el usuario se
muestra en la pantalla cuando se produce una excepcin. Puede volver
a escribir el programa anterior mediante el uso de la clusula else
en el bloque try / except. Recuerde que la declaracin en el bloque
else se ejecuta solamente cuando se produce una excepcin.
tryelse.py

import sys
try:
n = input('Enter your name ')
except EOFError:
print ('EOF error has occurred' )
sys.exit(1)
except:
print ('Some error has occurred' )
else:
print('The name entered is', n)
Output:
Enter your name
EOF error has occurred
Traceback (most recent call last):
File "D:\pythonprograms\tryelse.py", line 6, in <module>
sys.exit(1)
SystemExit:1
Enter your name John
The name entered is John
El programa siguiente muestra cmo se producen execpciones TypeError
y ZeroDivisionError y cmo se manejan. Recuerde que una excepcin
TypeError ocurre cuando se suministra un argumento de tipo
inadecuado, y una excepcin ZeroDivisionError ocurre cuando un
nmero se divide por 0.
try2.py
from __future__ import division
import sys
n = input('Enter a number ')
if n.isdigit():
n=int(n)
try:
m=15/n
except TypeError as ex:
print ('You have not entered a numeric value:', ex)
sys.exit(1)
except ZeroDivisionError as ex:
print ('You have entered zero value:', ex)
sys.exit(1)
print ('The result is', m)
Output:
Enter a number John
You have not entered a numeric value unsupported operand type(s) for /: 'int' and 'str'

Traceback (most recent call last):

File "D:\pythonprograms\try2.py", line 11, in >module>


sys.exit(1)
SystemExit: 1
Enter a number 0
You have entered zero value: division by zero
Traceback (most recent call last):
File "C:\pythonprograms\try2.py", line 14, in >module>
sys.exit(1)
SystemExit: 1
Enter a number 5
The result is 3.0
El programa pide al usuario que introduzca un nmero que se utiliza
en una operacin de divisin. Si el nmero introducido no es de tipo
numrico, una excepcin TypeError se produce y no se ha introducido
un valor numrico se muestra en la pantalla, seguido por salir de la
aplicacin. Si la informacin ingresada es de tipo numrico y su
valor es 0, ocurre una excepcin ZeroDivisionError y Ha introducido
se visualiza el valor cero, seguido de salir de la aplicacin. Si
ninguna de las dos excepciones se produce, lo que significa que el
usuario introduce un valor numrico distinto de cero, el resultado
de la operacin de divisin se muestra en la pantalla.

Using a try/finally Block


El uso de un bloque try / finally
Cuando se produce una excepcin, el programa normalmente detiene la
ejecucin y se cierra. Hay ciertas declaraciones esenciales que
usted desea para ser ejecutado si se produce una excepcin o no.
Estas declaraciones, que pueden incluir la liberacin de memoria o
cerrar un archivo abierto, estn escritos en un bloque finally.
El try/finally sigue estos pasos:
1. Python ejecuta las sentencias en el bloque try.
2. Si ninguna de las sentencias del bloque try lanza una excepcin,
se ejecutan las sentencias en el bloque finally.
3. Si hay un bloque que sale de la declaracin en el bloque try,
como return, break, o continue, la clusula finally se ejecuta en la
salida.
4. Si se produce una excepcin en el bloque try, Python se salta el
resto del bloque, se ejecuta la clusula finally y, a continuacin,
lanza la excepcin de nuevo.
El programa siguiente muestra cmo utilizar el bloque finally para
ejecutar las sentencias que desea ejecutar si se produce una

excepcin o no:
filetryfinal.py
import sys
try:
f = open('aboutbook.txt', 'r')
try:
lines = f.read()
finally:
f.close()
except IOError:
print ('File aboutbook.txt does not exist')
sys.exit(1)
print (lines)
Output:
File aboutbook.txt does not exist
Traceback (most recent call last):
File "D:\pythonprograms\filertryfinal.py", line 11, in >module>
sys.exit(1)
SystemExit: 1
Este programa abre aboutbook.txt en modo de lectura en el bloque
try. Si una excepcin IOError se produce al abrir el archivo, a
continuacin, Archivo aboutbook.txt no existe en la pantalla,
seguido por salir de la aplicacin. Adems, las lneas del archivo
se leen a travs de read(), y si se produce una excepcin o no, el
archivo se cierra a travs del bloque finally.

Raising an Exception
Lanzar una excepcin
Las excepciones son lanzados de forma automtica cuando alguna
situacin no deseada se produce durante la ejecucin del programa.
Puede provocar una excepcin explcita a travs de la sentencia
raise en un bloque try/except.
Syntax:
raise customException, statement for customException
Al plantear una excepcin en un bloque try, el formato ser el
siguiente:
try:
if condition:
raise customException, statement for customException
except customException, e:
statements for customException

El programa siguiente muestra cmo crear y elevar una excepcin:


raiseexcepclass.py
class myException(Exception):
def __init__(self, quantity):
Exception.__init__(self)
self.quantity = quantity
try:
s = int(input('Enter quantity '))
if s <=0 :
raise myException(s)
except EOFError:
print ('You pressed EOF ')
except myException as ex:
print ('myException: The quantity entered is %d, it must be
some positive value' % ex.quantity)
else:
print ('No exception raised.')
Output:
Enter quantity -3
myException: The quantity entered is -3, it must be some positive value

Enter quantity 5
No exception raised.
El programa crea una clase MyException que hereda de la clase
Exception. La clase contiene __ init__, que inicializa la variable
de instancia la cantidad de la clase y que llama al mtodo __ init__
de la superclase, Excepcin. Se le pide al usuario que introduzca la
cantidad de un artculo que se asigna a la variable s. Si el valor
introducido es inferior a cero, el excepcin personalizada
MyException se eleva, la invocacin de la clase y pasar el valor de
la cantidad a la misma. Si el usuario presiona Ctrl + D en lugar de
proporcionar un valor para la cantidad, se produce una excepcin
EOFError, mostrando Ha pulsado EOF. Cuando se eleva MyException,
MyException: La cantidad introducida es _, debe ser que aparezca
algn valor positivo. Si la excepcin no es lanzada , se ejecuta la
sentencia en el bloque de los dems, mostrando ninguna excepcin
lanzada.
The program creates a myException class that inherits from the Exception class. The class
contains __init__, which initializes the quantity instance variable of the class and that
calls the __init__ method of the super class, Exception. The user is asked to enter the
quantity of an item that is assigned to variable s. If the value entered is less than zero, the
custom exception myException is raised, invoking the class and passing the value of
quantity to it. If the user presses Ctrl+D instead of providing a value for quantity, an
EOFError exception is raised, displaying You pressed EOF. When myException is raised,
myException: The quantity entered is _, it must be some positive value is
displayed. If no exception is raised, the statement in the else block will be executed,

displaying No exception raised.

The assert Statement - La sentencia assert


La sentencia assert se utiliza para colocar una declaracin de
comprobacin de errores en el programa. Es una manera conveniente
para depurar un programa. A travs de una sentencia assert, puede
comprobar los valores de las variables en la mitad del programa.
La sentencia assert devuelve true si todos los valores de las
variables son como se esperaba, no importa lo que las entradas son
proporcionados. Si algo est mal en el programa, la sentencia assert
devuelve false. La excepcin AssertionError se provoca cuando la
sentencia assert devuelve false.
assertex.py
n=int(input('Enter a positive value: '))
assert(n >=0), "Entered value is not a positive value"
Output:
Enter a positive value: -5
Traceback (most recent call last):
File "D:\python\assertex.py", line 2, in >module>
assert(n >=0), "Entered value is not a positive value"
AssertionError: Entered value is not a positive value
Enter a positive value: 5

Summary
En este captulo usted aprendi a realizar diferentes operaciones en
los archivos. Usted aprendi a abrir un archivo en diferentes modos
y para leer su contenido, actualizar el contenido existente, borrar
el contenido, y aadir nuevo contenido. Tambin vio cmo copiar un
archivo, leer un archivo secuencialmente o al azar, y slo lectura
de contenido especfico. Tambin ha aprendido a crear un archivo
binario y de pickle y objetos unpickle. Por ltimo, ha aprendido
para implementar el control de excepciones y el procedimiento de
elevar excepciones.
En el prximo captulo usted aprender a desarrollar aplicaciones
GUI en Python a travs de PyQt. Usted aprender a instalar y
utilizar PyQt Qt Designer para desarrollar Aplicaciones GUI.

Chapter 7. PyQt
En el captulo anterior usted aprendi sobre el manejo de archivos.
Usted aprendi a abrir un archivo en diferentes modos, leer su
contenido, actualizar el contenido existente, borrar el contenido,
aadir nuevos contenidos, y hacer una copia. Usted aprendi a leer

los archivos de forma secuencial, as como al azar. Adems de esto,


tambin aprendi a crear archivos binarios, pickle y objetos
unpickle, y poner en prctica el manejo de excepciones.
Las aplicaciones que se han creado hasta ahora son las aplicaciones
basadas en la consola. De ahora en adelante ser aprender a
desarrollar la interfaz grfica de usuario (GUI) aplicaciones en
Python a travs de PyQt. En este captulo se tratan los siguientes
temas:

Introduccin a Qt toolkit y PyQt


instalacin PyQt
Ventana y dilogos
Creacin de aplicaciones GUI a travs de la codificacin
Usar el diseador de Qt
La comprensin fundamental widgets Label, Line Editar y Push
Botn
Manipulacin Evento en PyQt
Primera aplicacin en Qt Designer
Conexin a las ranuras(slots) predefinidas
El uso de ranuras(slots) personalizados
Conversin de tipos de datos
Definicin de buddies y establecer el orden de tabulacin

Vamos a comenzar el captulo con una introduccin a Qt toolkit.

Qt Toolkit
Toolkit Qt, conocido simplemente como Qt, es una aplicacin multiplataforma y un marco de interfaz de usuario desarrollado por
Trolltech que se utiliza para el desarrollo de aplicaciones GUI. Se
ejecuta en varias plataformas, incluyendo Windows, Mac OS X, Linux y
otras plataformas UNIX. Tambin se le conoce como un conjunto de
herramientas Widget porque proporciona widgets, como botones,
etiquetas, cuadros de texto, botones y cuadros de lista, que son
necesarios en el diseo de una interfaz grfica de usuario. lo
incluye un conjunto de plataformas cruzadas de las clases, las
herramientas de desarrollo integradas y un IDE multiplataforma.

PyQt
PyQt es un conjunto de enlaces Python para el conjunto de
herramientas Qt. PyQt combina todas las ventajas de Qt y Python. Con
PyQt, puede incluir libreras Qt en el cdigo Python, lo que le
permite escribir aplicaciones grficas en Python. En otras palabras,
PyQt le permite acceder a todos los servicios proporcionados por Qt
a travs del cdigo Python. Desde PyQt necesita las libreras Qt

para ejecutar, al instalar PyQt, la versin necesaria de Qt tambin


se instala automticamente en el equipo.

Installing PyQt
You need to have Python Interpreter installed on your system before
you install PyQt. Recall from Chapter 1, Python and its Features,
that you have already installed Python 3.2 on your system, so you
can go ahead and download PyQt from
http://www.riverbankcomputing.co.uk/software/pyqt/download. The
latest version at the time of this writing is PyQt version 4.8.5 for
Python 3.2. The name of the downloaded file is PyQt-Py3.2-x86-gpl4.8.5-1.exe. Just double-click the downloaded file to begin
installation. The first screen that you see is a welcome screen to
the PyQt Setup Wizard, as shown in Figure 7.1. The screen displays
general information about the components that come with PyQt. Select
Next to move forward.

Note
Your operating system may complain, saying the program is from
an unknown publisher and may harm your computer. Select the Yes
button to proceed with the installation. If you dont see a Yes
button, select Actions to see the list of possible actions. In the
dialog that appears, select the More Options drop-down and select
Run to begin with the installation procedure.

The next screen shows the License Agreement, which you need to read

and agree to before installing PyQt. Select I Agree to continue


installation. Next, you get a screen that shows the list of
components that you can install with PyQt (see Figure 7.2). You can
select or deselect any component. The dialog also shows the disk
space that will be required for installing the selected components.

Lets go ahead with Full Installation and select Next to move on.
The next screen will prompt you to specify the name and location of
the folder where Python 3.2 is installed. The reason is that PyQt is
installed in the sitepackages folder of the Python installation. The
wizard auto-detects and shows the location of the Python
installation by default, as shown in Figure 7.3. You can also select
Browse to modify the folder name. After specifying the location of
the Python installation, select Install to begin copying and
installing the PyQt files.

When PyQt files are copied and installed, you will be prompted to
select Finish to close the wizard.
Note
Dont forget to set the path of the PyQt folder so that you can
access it from any folder on your computer.

Felicitaciones! Ha instalado con xito PyQt en su ordenador. Ahora


puede empezar a crear sus aplicaciones GUI. Al hacerlo, se le
solicitar que especifique si desea crear una aplicacin de ventana
principal o una aplicacin de dilogo. Qu quiere decir esto? Vamos
a ver.

Window and Dialogs


Ventana y cuadros de dilogo
Una aplicacin de interfaz grfica de usuario puede constar de una
ventana principal con varios cuadros de dilogo o slo dilogos. Una
aplicacin de interfaz grfica de usuario pequea por lo general
consiste de al menos un cuadro de dilogo. Una aplicacin de dilogo
contiene botones. No contiene una barra de mens, barra de

herramientas, barra de estado, o un widget en el centro, mientras


que una aplicacin ventana principal normalmente tiene todo eso. Un
widget central es aquella que contiene otros widgets.
Los dilogos son de dos tipos: modales y no modales. Un cuadro de
dilogo modal es el que impide que el usuario interacta con otras
partes de la aplicacin. El cuadro de dilogo es la nica parte de
la aplicacin que el usuario que puede interactuar con el. Hasta que
el dilogo se cierra, se puede acceder a ninguna otra parte de la
aplicacin. El dilogo no modal es lo contrario de un cuadro de
dilogo modal. Cuando un cuadro de dilogo no modal est activo, el
usuario es libre para interactuar con el cuadro de dilogo y con el
resto de la aplicacin.

Ways of Creating GUI Applications


Maneras de Crear aplicaciones GUI
Hay dos maneras de escribir una aplicacin de GUI:
Desde el principio con un editor de texto simple.
Con Qt Designer, una herramienta de diseo visual que viene con
PyQt.
Obviamente, usted va a usar Qt Designer para desarrollar
aplicaciones GUI en PyQt. Antes de hacer eso, para entender la
estructura de una aplicacin con interfaz grfica, vamos a crear una
a travs de la codificacin.

Creating a GUI Application with Code


Crear una aplicacin GUI con Cdigo
La aplicacin que se va a crear mostrar un botn con el texto en l
Close. Al hacer clic en el botn Cerrar, la aplicacin terminar.
Escriba el siguiente cdigo en cualquier editor de texto y guarde el
archivo con la extensin .pyw. Sin embargo, no incluya los nmeros
de lnea en el cdigo, ya que son slo la intencin de identificar
cada declaracin individual para explicar su papel.
nota
Las aplicaciones de consola que cre antes de este captulo se
guarda con la extensin .py. Las aplicaciones GUI que se van a
desarrollar ahora se guardarn con la extensin .pyw. Esta es
invocar el intrprete pythonw.exe lugar del python.exe
intrprete, de manera que no aparece ninguna ventana de consola en
la ejecucin de una aplicacin Python GUI.

1. import sys
2. from PyQt4 import QtGui, QtCore
3. class demowind(QtGui.QWidget):
4.
def __init__(self, parent=None):
5.
QtGui.QWidget.__init__(self, parent)
6.
self.setGeometry(300, 300, 200, 200)
7.
self.setWindowTitle('Demo window')
8.
quit = QtGui.QPushButton('Close', self)
9.
quit.setGeometry(10, 10, 70, 40)
10.
self.connect(quit, QtCore.SIGNAL('clicked()'), QtGui.qApp,
QtCore.SLOT('quit()'))
11. app = QtGui.QApplication(sys.argv)
12. dw = demowind()
13. dw.show()
14. sys.exit(app.exec_())

en pyscriter:

Antes de ejecutar esta aplicacin, vamos a ver lo que hace el cdigo


en diferentes lneas.
1, 2. Importaciones de los mdulos necesarios. Los widgets bsicos
interfaz grfica de usuario se encuentran en el mdulo de QtGui.
3. QWidget es la clase base de todos los objetos de la interfaz de
usuario en PyQt4, por lo que estn creando una nueva clase demowind
que hereda de la clase base, Qwidget.
4, 5. Proporciona el constructor predeterminado para QWidget. El
constructor por defecto no tiene padre, y un widget con ningn padre
se le conoce como una ventana.
6. SetGeometry() establece el tamao de la ventana y define dnde
colocarlo. Los dos primeros parmetros son los x y Y ubicaciones a
las que se colocar la ventana. La tercera es la anchura, y la
cuarta es la altura de la ventana. Una ventana de 200 pxeles de

alto y se posicionar en las coordenadas 300,300.


7. Esta declaracin establece el ttulo de la ventana de Demo
Window. El ttulo ser visible en la barra de ttulo.
8. Crea un botn con el texto Cerrar.
9. Define la anchura y la altura del boton como 70 y 40 pxeles,
respectivamente, y posicionarla en el QWidget (ventana) en las
coordenadas 10,10.
10. Manipulacin de evento en PyQt4 utiliza seales y slots. Una
seal es un evento, y un slot es un mtodo que se ejecuta sobre la
aparicin de una seal. Por ejemplo, al hacer clic en un botn, un
evento clicked(), tambin conocida como una seal, se produce, o se
dice que es emitida. El mtodo QtCore.QObject.connect() conecta las
seales con los slots. En este caso, el slot es un mtodo PyQt4
predefinido: quit(). Es decir, cuando el usuario hace clic en el
botn, se invocar el mtodo quit(). Vas a aprender sobre el manejo
de eventos con detalle en breve.
11. Crea un objeto de aplicacin con el nombre de app a travs del
mtodo QApplication() del mdulo QtGui. Cada aplicacin PyQt4 debe
crear un objeto de aplicacin. sys.argv, que contiene una lista de
argumentos de la lnea de comandos, se pasa al mtodo al crear el
objeto de aplicacin. sys.argv ayuda al pasar y controlar los
atributos de inicio de una secuencia de comandos.
12. Se crea una instancia de la clase demowind con el nombre dw.
13. El mtodo show() mostrar el widget en la pantalla.
14. Comienza el bucle de control de eventos de la aplicacin. El
bucle del manejador de eventos espera un evento que ocurra y luego
lo enva evento para realizar alguna tarea. El bucle de control de
eventos contina trabajando hasta que el metodo exit() se llama o el
widget principal se destruye. El mtodo sys.exit() garantiza una
salida limpia, la liberacin de recursos de memoria.
nota
El mtodo exec_() tiene un guin porque exec es una palabra
clave de Python.
Al ejecutar el programa anterior, se obtiene una ventana titulada
Demo Window con un botn con el texto Close en l, como se muestra
en la Figura 7.4. Cuando se selecciona el botn, el mtodo quit() se
ejecutar, de terminar la aplicacin.

Ahora, vamos a ver cmo la herramienta Qt Designer, que viene con


PyQt, hace que la tarea de crear interfaces de usuario ms rpida y
ms fcil.

Using Qt Designer -Usar el diseador de Qt


Aunque se pueden escribir programas PyQt desde cero utilizando un
simple editor de texto, tambin puede utilizar Qt Designer, que
viene con PyQt. Para el desarrollo de aplicaciones GUI en PyQt,
utilizando Qt Designer es una manera rpida y fcil de disear
interfaces de usuario sin necesidad de escribir una sola lnea de
cdigo. Para abrir Qt Designer, haga clic en el botn Inicio y
seleccione Todos los programas> PyQt GPL v4.8.5 para Python v3.2
(x86)> Qt Designer.
Qt Designer es para la creacin de interfaces grficas de usuario.
Esto hace que sea muy fcil para usted para crear cuadros de dilogo
o ventanas principales el uso de plantillas predefinidas, como se
muestra en la Figura 7.5.

probando:

Qt Designer ofrece plantillas predefinidas para una nueva


aplicacin:

De dilogo con botones en la parte inferior: Crea un formulario


con botones Aceptar y Cancelar en la esquina inferior derecha.

Dilogo con botones a la derecha: Crea un formulario con


botones Aceptar y Cancelar en la parte derecha.

Dilogo sin botones: Crea un formulario vaco en la que puede


colocar widgets. La superclase para los dilogos es QDialog.
Usted aprender ms acerca de estas clases pronto.

Ventana principal: Proporciona una ventana principal de la


aplicacin con una barra de mens y una barra de herramientas
que se puede quitar si no es necesario.

Widget: Crea un formulario cuya superclase se QWidget mejor que


Qdialog.

nota
Al crear una aplicacin GUI, es necesario especificar un widget de
nivel superior, que suele ser QDialog, Qwidget o QmainWindow. Si
crea una aplicacin basada en la plantilla de Dilogo, el widget de
nivel superior o la primera clase que se hereda es QDialog. Del
mismo modo, si la solicitud se basa en la plantilla de la ventana
principal, el widget de nivel superior ser QmainWindow, y si se
utiliza la plantilla Widget para su aplicacin, el widget de nivel
superior ser QWidget. Los widgets que utiliza para la interfaz de
usuario se tratan como widgets hijos de las clases.
Qt Designer muestra una barra de men y barra de herramientas en la
parte superior. Muestra un cuadro del widget en su izquierda que
contiene una variedad de widgets que se utilizan para desarrollar
aplicaciones, agrupados por secciones. Todo lo que tienes que hacer
es arrastrar y soltar los widgets que desee en el formulario.
Puede organizar los widgets en los diseos, puesto su apariencia,

proporcionar atributos iniciales, y conectar sus seales a los


slots. La interfaz de usuario que se crea con Qt Designer se
almacena en un archivo de interfaz de usuario que incluye toda la
informacin de la forma: Sus widgets, diseo, etc. El archivo de ui.
Es un archivo XML, y hay que convertirlo a cdigo Python.
De esa manera, usted puede mantener una clara separacin entre la
interfaz visual y el comportamiento implementado en el cdigo.
Pronto vers los mtodos de conversin .ui en cdigo Python.
nota
Puede crear widgets con cdigo, tambin.
En el lado derecho de Qt Designer se encuentran tres ventanas por
defecto, como se muestra en la Figura 7.6.

probando:

Inspector de Objetos: muestra una lista jerrquica de todos los


objetos presentes en el formulario. Usted puede seleccionar
cualquier objeto en un formulario haciendo clic en el nombre
correspondiente en el Inspector de Objetos. Por lo general,
seleccione un objeto en la ventana Inspector de objetos cuando
se tiene objetos superpuestos. La ventana tambin muestra el
estado de diseo de los contenedores. Los contenedores son los
widgets que pueden almacenar otros widgets u objetos.
Contenedores incluyen marcos - frames, cuadros de grupo -group
boxes, widgets, widgets apilados, tab widgets y caja de
herramientas widgets.

Editor de propiedades: Se utiliza para ver y cambiar las


propiedades de la form y widgets. Se compone de dos columnas,
la propiedad y valor. La columna de propiedades enumera los
nombres de propiedades, y la columna Valor muestra los valores
correspondientes. Para cambiar una propiedad en el mismo valor
para un conjunto de widgets, seleccione todos ellos. Para
seleccionar un conjunto de widgets, haga clic en uno de los
widgets y luego Shift + clic en los dems, uno por uno. Cuando
se selecciona un conjunto de widgets, la ventana del Editor de
Propiedades mostrar las propiedades que son comunes en todos
los widgets seleccionados, y cualquier cambio realizado en una
propiedad ser aplicada a los widgets seleccionados.

Navegador de recursos: Qt Designer le permite mantener los


recursos como imgenes, audio, vdeo, etc, de sus aplicaciones
a travs del explorador de recursos. Para todas las formas de
su aplicacin, se mantiene un archivo de recursos
independiente. Puede definir, cargar y editar archivos de
recursos de su aplicacin a travs del explorador de recursos.
Por debajo de la ventana del Explorador de recursos, se
encuentran dos pestaas ms, el Editor de seales / slots y
Editor de acciones.

Signal/Slot Editor: Esta ventana muestra las conexiones de


seal /slot entre objetos. Puede editar las conexiones de
seal/slot a travs de esta ventana.

Editor de acciones: El Editor de acciones le permite gestionar


las acciones de sus aplicaciones. Para iniciar las acciones, la
barra de la barra de herramientas y el men estn diseados en
una aplicacin. La accin respectiva o tarea para cada uno de
los iconos de la barra de herramientas y elementos de men de
la barra de men se definen a travs del Editor de acciones.
Puede crear nuevas acciones, las acciones de eliminacin,
editar acciones y definir iconos para las acciones a travs del
Editor de acciones.
Adems, se puede asociar acciones respectivas con los elementos
de men y barras de herramientas.
nota

Para las acciones rpidas y manejables, Qt Designer proporciona


un men contextual que se obtiene haciendo clic derecho en un
objeto.

El componente principal utilizado para la creacin de una interfaz


de usuario es widgets. Button, mens y scrollbars - barras de
desplazamiento son ejemplos de widgets y no slo se utilizan para
recibir la entrada del usuario, sino tambin para la visualizacin
de los datos y la informacin de estado. Los widgets se pueden
anidar dentro de otro en una relacin padre-hijo.
Un widget que no tiene ningn widget padre se llama una ventana. La
clase de widgets, QWidget, proporciona mtodos para hacerlos en la
pantalla, recibir entradas del usuario, y manejar diferentes
eventos. Todos los elementos de interfaz de usuario que Qt ofrece
son subclases de QWidget. Qt Designer muestra una lista de los
widgets en una Caja Widget que muestra en el lado izquierdo.

Widget Box caja Widget


El Widget Box (vase la Figura 7.7) muestra una lista categorizada
de widgets y otros objetos que se pueden utilizar para el diseo de
una interfaz de usuario rpida y fcilmente. Widgets con funciones y
usos similares se agrupan en categoras. Es muy simple para crear
una interfaz grfica de usuario al pasar al modo de edicin de
Widget. Seleccione un icono de la barra de herramientas y desplazar
los widgets deseados al formulario.

Figure 7.7. Widget Box.

Usted puede tambin agrupar widgets que utiliza a menudo en una


categora creada por usted, tambin conocida como una categora
scratch pad. Para colocar los widgets en la categora scratch pad,
simplemente arrstrelos desde la forma y soltarlos en la categora.
Estos widgets se pueden utilizar en la misma forma que cualquier
otro control. Puede cambiar el nombre de cualquier widget y retrela
del scratch pad con el men de contexto.
Los widgets son objetos de sus respectivas clases. (Qt Designer no
utiliza nombres de clase para sus widgets, el nombre del widget
significa la clase se refiere.)

Los widgets en Widget Box se agrupan en las siguientes categoras:

Layouts - presentaciones
Spacers - espaciadores
Buttons - botones
Item Views (Model-Based)- Articulos Vistas(basado en modelos)
Item Widgets (Item-Based)
Containers - contenedores
Input Widgets
Display Widgets
Phonon

Una descripcin de los widgets en cada categora es la siguiente.

Layouts

Layouts se utilizan para la organizacin de los widgets de una


manera deseada. El layout controla el tamao de los widgets dentro
de ella, y los widgets se redimensionan automticamente cuando se
cambia el tamao del formulario. Los widgets en el grupo Layouts se
muestra en la Tabla 7.1.
Table 7.1. Widgets in the Layouts Group
Widget

Description

Vertical Layout
(QVBoxLayout)

Organiza los widgets


verticalmente, uno debajo del
otro.

Horizontal Layout
(QHBoxLayout)

Organiza los widgets


horizontalmente, uno al lado del
otro.

Grid Layout (QGridLayout

Organiza los widgets en filas y


columnas.

Form Layout (QFormLayout

Organiza los widgets en un diseo


de dos columnas. La primera
columna muestra generalmente
mensaje (s) en las etiquetas, y
la segunda, por lo general
contiene los widgets, que permite
al usuario introducir / editar
los datos correspondientes a las
etiquetas en la primera columna.

Spacers

Los espaciadores no son visibles durante la ejecucin de un


formulario y se utilizan para insertar espacios entre widgets o
grupos de widgets. Los widgets en el de grupo Los espaciadores se
muestran en la Tabla 7.2.
Table 7.2. Widgets in the Spacers Group
Widget

Description

Horizontal Spacer
(Spacer)

Inserta espacios horizontales


entre widgets.

Vertical Spacer
(Spacer)

Inserta espacios verticales entre


widgets.

Buttons

Los botones se utilizan para iniciar una accin. Son generadores de


eventos o seales que se pueden utilizar para realizar tareas. Los
widgets en el grupo de botones se muestran en la Tabla 7.3.
Table 7.3. Widgets in the Buttons Group

Widget

Description

Push Button (QPushButton)

Muestra un botn de comando.

Tool Button (QToolButton)

Muestra un botn para acceder a


comandos u opciones. Se utiliza
en el interior de una barra de
herramientas.

Radio Button
(QRadioButton)

Muestra un botn de radio con una


etiqueta de texto.

Check Box (QCheckBox)

Muestra una casilla de


verificacin con una etiqueta de
texto.

Command Link Button


(QCommandLinkButton)

Muestra un botn de vnculo de


comando.

Button Box
(QDialogButtonBox)

Una subclase de QWidget que


presenta un conjunto de botones
en un diseo.

Item Views (Model-Based)

Artculo Vistas widgets se utilizan para la visualizacin de grandes


volmenes de datos. Modelo basado significa que los widgets son
parte de un marco de modelo / vista y le permiten presentar los
datos en diferentes formatos ya travs de mltiples puntos de vista.
Las clases de estos widgets implementan las interfaces definidas por
la clase QAbstractItemView para que pueda visualizar los datos
proporcionados por los modelos derivados de la clase
QAbstractItemModel. Los widgets en el grupo de artculos Vistas
(basado en modelos) se muestran en la Tabla 7.4.

Table 7.4. Widgets in the Item Views (Model-Based) Group

Widget

Description

List View (QListView)

Se utiliza para mostrar una lista


de elementos. Se debe utilizar
con una subclase
QAbstractItemModel.

Tree View
(QTreeView)

Se utiliza para mostrar datos


jerrquicos. Se debe utilizar con
una subclase QAbstractItemModel.

Table View
(QTableView

Se utiliza para mostrar los datos


en forma de tabla. Puede mostrar
iconos, as como el texto en cada
celda. Debe ser usado en
conjuncin con una subclase
QAbstractItemModel.

Column View
(QColumnView)

Proporciona una implementacin de


modelo / vista de una columna de
vista. Muestra los datos de una
serie de vistas de listas.

Item Widgets (Item-Based)

Reproductores de elementos - item Widgets tienen vistas


independientes. Los widgets en los widgets elemento de grupo (ItemBased) se muestran en la Tabla 7.5.
Table 7.5. Widgets in the Item Widgets (Item-Based)Group
Widget
Description
List Widget
(QListWidget)

Se utiliza para mostrar una lista


de elementos. Tiene un modelo
integrado, por lo que los
elementos se puede agregar a l
directamente.

Tree Widget
(QTreeWidget)

Se utiliza para mostrar datos


jerrquicos. Tiene un modelo
integrado, por lo que los
elementos se puede agregar a l
directamente.

Table Widget
(QTableWidget)

Se utiliza para mostrar los datos


en forma de tabla. Puede mostrar
iconos, as como el texto en cada
celda. Tiene un modelo integrado,

por lo que los elementos se puede


agregar a l directamente.

Containers

Widgets de contenedores se utilizan para controlar una coleccin de


objetos en un formulario. Un widget se dej caer en un recipiente se
convierte en un objeto secundario del contenedor. Los objetos
secundarios en un contenedor tambin se pueden organizar en los
diseos deseados. Los widgets en el grupo de contenedores se
muestran en la Tabla 7.6.
Table 7.6. Widgets in the Containers Group
Widget

Description

Group Box (QGroupBox)

Se utiliza para agrupar un


conjunto de widgets de funcin
similar.

Scroll Area (QScrollArea)

Se utiliza para mostrar el


contenido de un widget hijo
dentro de un marco. Si el widget
hijo supera el tamao del marco,
las barras de desplazamiento
aparecen para que pueda ver todo
el widget hijo.

Tool Box (QToolBox)

Muestra una serie de pginas o


secciones en una caja de
herramientas.

Tab Widget (QTabWidget)

Muestra pestaas que se pueden


utilizar para mostrar
informacin. Un gran volumen de
informacin se puede mostrar
mediante su divisin en trozos y

mostrarla en fichas individuales


Stacked Widget
(QStackedWidget)

Muestra una pila de widgets donde


slo un widget es visible a la
vez.

Frame (QFrame)

Se utiliza para encerrar y


agrupar widgets. Tambin puede
ser utilizado como un marcador de
posicin en las formas.

Widget (QWidget)

La clase base de todos los


objetos de la interfaz de
usuario.

MdiArea (QMdiArea)

Proporciona un rea para la


visualizacin de ventanas MDI.

Dock Widget (QDockWidget)

Puede ser acoplado dentro de una


ventana principal o flotaba como
una ventana de herramientas
independiente.

Input Widgets

Reproductores de entrada-input widgets son para utilizar para


interactuar con el usuario. El usuario puede suministrar datos a la
aplicacin a travs de estos widgets. Los widgets del grupo
Reproductores de entrada se muestran en la Tabla 7.7.

Table 7.7. Widgets in the Input Widgets Group

Widget

Description

Combo Box (QComboBox)

Muestra una lista desplegable.

Font Combo Box


(QFontComboBox)

Muestra un cuadro combinado que


permite la seleccin de la
fuente.

Line Edit (QLineEdit)

Muestra un cuadro de texto de una


lnea para introducir / editar
texto sin formato.

Text Edit (QTextEdit)

Se utiliza para editar texto


plano o HTML.

Plain Text Edit


(QPlainTextEdit)

Se utiliza para editar y mostrar


el texto sin formato.

Spin Box (QSpinBox)

Muestra un cuadro de nmero.

Double Spin Box


(QDoubleSpinBox)

Muestra un cuadro de nmero de


valores dobles.

Time Edit (QTimeEdit)

Se utiliza para la edicin de los


tiempos

Date Edit (QDateEdit)

Se utiliza para las fechas de


edicin.

Date/Time Edit
(QDateTimeEdit)

Se utiliza para fechas y horas de


edicin.

Dial (QDial)

Muestra un control de rango


redondeado.

Horizontal Scrollbar (QScrollBar)

Muestra una barra de


desplazamiento horizontal.

Vertical Scrollbar
(QScrollBar)

Muestra una barra de


desplazamiento vertical.

Horizontal Slider (QSlider)

Muestra un deslizador horizontal.

Vertical Slider (QSlider)

Muestra un control deslizante


vertical.

QsciScintilla

Scintilla es un componente de

edicin que realiza el estilo de


sintaxis, autocompletado de
cdigo, romper puntos, sangra
automtica, y otras tareas.
Es muy til en la edicin y
depurar el cdigo fuente. El
componente Scintilla est dentro
QsciScintilla y utiliza de Qt
Designer para desarrollar
aplicaciones GUI como cualquier
otro widget de Qt.

Display Widgets

Mostrar los widgets se utilizan para la visualizacin de informacin


o mensajes al usuario. Los widgets del grupo Reproductores-widgets
Display se muestran en la Tabla 7.8.
Table 7.8. Widgets in the Display Widgets Group
Widget
Description

Label (QLabel)

Muestra el texto o imgenes.

Text Browser
(QTextBrowser)

Muestra una de slo lectura


casilla de texto de varias lneas
que puede mostrar tanto texto
como HTML plano, incluyendo
listas, tablas e imgenes. Es
compatible con hacer clic en
enlaces, as como las hojas de
estilo en cascada.

Graphics View
(QGraphicsView)

Se utiliza para displays


grficos.

Calendar
(QCalenderWidget)

Muestra un calendario mensual que


le permite seleccionar una fecha.

LCD Number (QLCDNumber)

Muestra los dgitos en la


pantalla LCD similares.

Progress Bar
(QProgressBar)

Muestra barras de progreso


horizontales y verticales.

Horizontal Line (QFrame)

Muestra una lnea horizontal.

Vertical Line (QFrame)

Muestra una lnea vertical.

QDeclarativeView

Una subclase QGraphicsView


proporcionado para la
visualizacin de las interfaces
QML. Para mostrar una interfaz
QML dentro de las aplicaciones
basadas en GUI QWidget que no
utilizan el marco Vista Grfica,
se utiliza Qdeclarative.
QDeclarativeView inicializa
QGraphicsView para un rendimiento
ptimo con QML para que los
objetos de la interfaz de usuario
se pueden colocar en un
QGraphicsScene estndar y se
muestran con Qgraphics-View.
QML es un lenguaje declarativo
utilizado para describir la
interfaz de usuario en un rbol
de objetos con propiedades.

QWebView

Se utiliza para ver y editar


documentos Web.

Phonon

Phonon es una API de multimedia que ofrece una capa de abstraccin


para capturar, mezclar, procesamiento y reproduccin de audio y

vdeo. Los widgets en el grupo de Phonon se muestran en la Tabla


7.9.
Table 7.9. Widgets in the Phonon Group
Widget

Description

Phonon::VideoPlayer

Se utiliza para mostrar el vdeo.

Phonon::SeekSlider

Muestra slider para ajustar las


posiciones de flujo de medios.

Phonon::VolumeSlide

Muestra control deslizante para


controlar el volumen de salida de
audio.

Qt Designer muestra una barra


que muestra los iconos de las
guardar archivos, cambiar los
Echemos un vistazo a la barra

de herramientas en la parte superior


tareas ms frecuentes, como abrir y
modos, y la aplicacin de diseos.
de herramientas.

Toolbar
En la parte superior de Qt Designer es una barra de herramientas con
iconos como se muestra en la Figura 7.8.
Figure 7.8. Qt Designer toolbar.

La siguiente es una breve descripcin de los iconos mostrados en la


barra de herramientas:
New: Muestra un cuadro de dilogo nuevo formulario (consulte la
Figura 7.5) muestra diferentes plantillas para la creacin de
una nueva forma.
Open: Abre el cuadro de dilogo Abrir formulario, que se puede
utilizar para navegar por el disco duro para buscar y
seleccionar un archivo .ui para trabajar.
Save: Se usa para guardar el formulario.
Enviar al fondo send to back: enva el widget seleccionado al
fondo en los widgets de solapamiento, por lo que es invisible.
Consideremos dos botones superpuestos, PushButton1 y
PushButton2. Si selecciona PushButton1 y haga clic en Enviar al
fondo, PushButton1 se ocultar detrs PushButton2, como se
muestra en la Figura 7.9 (a).

Traer al frente Bring to front: Trae el widget seleccionado


en la parte delantera, por lo que es visible. Este icono slo
funciona cuando los widgets se solapan entre s. Si selecciona
PushButton1 y haga clic en Traer al frente, se har visible,
como se muestra en la Figura 7.9 (b).
Editar Widgets: El modo Widget edicin le permite editar las
propiedades de widgets. Adems, se puede eliminar widgets en
diseos existentes en el formulario en este modo. Tambin puede
arrastrar los widgets entre las formas. Tambin puede clonar un
widget arrastrndolo con la tecla Ctrl pulsada. Para activar el
modo de edicin de Widget, puede elegir cualquiera de las tres
opciones: presione F3, seleccione Edicin> Editar Widgets desde
el men, o haga clic en el icono Editar Widgets en la barra de
herramientas.
Edit Signals/Slots:Las Seales y metodos mode de edicin se
utiliza para la representacin y edicion de signal / slots
conectados entre objetos en un formulario. Para cambiar a las
seales y metodos en modo de edicin, puede pulsar la tecla F4,
seleccione Edit> Editar Signal / Slots Edit, o seleccione el
icono Editar Signals / slots desd barra de herramientas. El
modo muestra todas las conexiones de seal y metodos-slots en
forma de flechas para que usted sepa qu objeto est conectado
a qu. Tambin puede crear nuevas conexiones de seal y slot
entre los widgets en este modo y borre una seal existente. Las
seales y los slots se refieren a diferentes eventos y los
mtodos correspondientes que se ejecutan en la ocurrencia de un
evento. Para establecer la seal y la conexin de metodo entre
dos objetos en un formulario, seleccione un objeto haciendo
clic con el botn izquierdo del ratn y arrastre el ratn hacia
el objeto al que se quiere conectar y suelte el botn del
ratn. Tambin puede cancelar la conexin mientras se arrastra
el ratn pulsando la tecla Esc.Cuando suelte el ratn sobre el
objeto de destino, aparece un cuadro de dilogo de conexin,
que le pide que seleccione una seal desde el objeto de origen
y un slot- metodo del objeto de destino. Despus de seleccionar
la seal y el slot correspondiente, seleccione Aceptar para
establecer la conexin de seal / slot. Tambin puede
seleccionar Cancelar en el cuadro de dilogo Conexin de
cancelar la operacin de conexin. La seal y slot seleccionada
aparecern como etiquetas en la flecha que conectan los dos
objetos. Para modificar una conexin, haga doble clic en la
ruta de conexin o una de sus etiquetas para mostrar el cuadro
de dilogo de conexin. Desde el dilogo de conexin se puede
editar una seal o un slot como se desee. Para eliminar una
conexin de seal / slot, seleccione la flecha en el formulario
y pulse la tecla Supr. La conexin de signal /slot tambin se
puede establecer entre un objeto y formulario; usted puede

conectar seales de los objetos a los slots en el formulario.


Para conectar un objeto del formulario, seleccione el objeto,
arrastre el ratn y suelte el botn del ratn sobre el
formulario. El punto final de la conexin cambia al smbolo de
tierra elctrica. Para salir de las seales y el modo de slots
Edicin, seleccione Edicin> Editar Widgets o presione la tecla
F3.
Edit Buddies: Modo de Edicin de Buddy-amigo se utiliza para
ajustar el foco del teclado en los widgets que no pueden
aceptar la entrada del teclado. Es decir, al hacer un widget
que puede aceptar la entrada de teclado a un compaero, los
widgets que no pueden aceptar la entrada del teclado tambin
obtendrn el foco del teclado. Aparecen flechas para mostrar
las relaciones entre los widgets-controles y sus buddiescompinches. Para activar el modo de edicin de Buddy -amigos,
puede seleccionar la opcin Edit> Edit Buddies en el men, o
haga clic en el icono Editar Buddies-Amigos en la barra de
herramientas.
Edit Tab Order:En este modo, puede especificar el orden en que
los widgets de entrada pueden obtener el foco del teclado. El
orden de tabulacin predeterminado se basa en el orden en que
los widgets se colocan en el formulario.
Lay Out Horizontally:Distribuye los widgets seleccionados en
una disposicin horizontal junto a la otra. Tecla de mtodo
abreviado es Ctrl +1.
Lay Out Vertically:Organiza los widgets seleccionados en un
diseo vertical, uno debajo de otro. Tecla de mtodo abreviado
es Ctrl +2.
Lay Out Horizontally in Splitter:En este diseo, los widgets se
colocan en un divisor, dispuestas de forma horizontal y que le
permite ajustar la cantidad de espacio asignado para cada
widget. Tecla de mtodo abreviado es Ctrl +3.
Lay Out Vertically in Splitter: Los widgets estn dispuestos
verticalmente, lo que permite al usuario ajustar la cantidad de
espacio asignado para cada widget. Tecla de mtodo abreviado es
Ctrl +4.
Lay Out in a Grid:Organiza los widgets en una cuadrcula
similar a una tabla (filas y columnas). Cada widget ocupa una
celda de la tabla que se puede modificar para abarcar varias
celdas.
Lay Out in a Form Layout:Organiza los widgets seleccionados en
un formato de dos columnas. La columna de la izquierda es por
lo general para los widgets de la etiqueta que muestra los
mensajes, y la columna de la derecha muestra widgets para la
escritura / edicin / mostrar los datos de las etiquetas
correspondientes en la primera columna, como la lnea de
edicin-line edit, cuadro combinado-combo box, y fecha de
edicin-Date edit.
Break Layout:Una vez que los widgets se arreglan en un diseo,
no se puede mover y cambiar el tamao de forma individual, ya
que su geometra se controla con el diseo. Este icono es
romper el diseo. Tecla de mtodo abreviado es Ctrl +0.
Adjust Size:Ajusta el tamao del diseo para dar cabida a los

widgets contenidas y para asegurar que cada uno tiene el


espacio suficiente para que sea visible. Tecla de mtodo
abreviado es Ctrl + J.
En casi todas las aplicaciones, necesita algunos widgets muy
fundamentales como etiquetas, Lnea ediciones y pulsadores-Push
Buttons. Se requiere que estos widgets para mostrar mensajes de
texto, para aceptar la entrada del usuario, y para iniciar alguna
accin, respectivamente. Echemos un vistazo a estos widgets
fundamentales.

Understanding Fundamental Widgets


Entender Reproductores Fundamentales
El primer widget vamos a discutir es el widget Label, una forma muy
popular de mostrar informacin de texto o en una aplicacin GUI.

Displaying Text
Para mostrar texto no editable o una imagen, se utilizan widgets de
etiquetas; Una etiqueta es una instancia de la clase QLabel. Un
widget Label es un widget muy popular para la visualizacin de
mensajes y la informacin al usuario. Los mtodos proporcionados por
la clase QLabel se muestran en la Tabla 7.10.
Tabla 7.10. Mtodos proporcionados por la clase Qlabel
Methods

Usage

setText()

Asigna texto para el widget


Label.

setPixmap()

Asigna un mapa de pxeles, una


instancia de la clase QPixmap, al
widget Label.

setNum()

Asigna un nmero entero o doble


valor al widget Label.

clear()

Borra el texto desde el widget


Label.

El texto predeterminado de un QLabel es TextLabel. Es decir, cuando


se agrega un QLabel a un formulario arrastrando un widget Label y
soltndolo en el formulario, se mostrar "TextLabel." Adems de
utilizar setText (), tambin puede asignar texto a un QLabel
seleccionado estableciendo su propiedad de texto en la ventana del
Editor de propiedades. Por ejemplo, si establece la propiedad de
texto para introducir su nombre, el QLabel seleccionada se mostrar
el texto "Escriba su nombre" en el formulario.

Entering Single-Line Data


Entrando en una sola lnea de datos

Para permitir al usuario introducir o editar los datos de una sola


lnea, se utiliza el widget Line Edit, que es una instancia de
QLineEdit. El widget soporta mecanismos simples de edicin, como
deshacer, rehacer, cortar y pegar. Los mtodos proporcionados por
QLineEdit se muestran en la Tabla 7.11.
Table 7.11. Methods Provided by QlineEdit
Tabla 7.11. Mtodos proporcionados por QlineEdit
Method

Usage

setEchoMode()

Se utiliza para establecer el


modo de repeticion del widget
Line Editar para determinar cmo
se muestra el contenido del
widget Line Edit. Las opciones
disponibles son las siguientes:
Normal: El modo por defecto.
Muestra los caracteres a medida
que se introducen.
NoEcho: No muestra nada.
Password: Muestra los asteriscos
que el usuario introduzca datos.
PasswordEchoOnEdit: muestra
caracteres al editar; de lo
contrario, se muestran
asteriscos.

maxLength()

Se utiliza para especificar la


longitud mxima del texto que el
usuario puede entrar. Para la
edicin de mltiples lneas,
utilice QTextEdit.

setText()

Asigna texto para el widget Line


Edit.

text()

Obtiene el texto introducido en


el widget Line Edit.

clear()

Borra el contenido del widget


Line Edit.

setReadOnly()

Pasa el valor Booleano true para


este mtodo para hacer el widget
Line Edit slo lectura. El
usuario no puede modificar el
contenido del widget Line Edit
pero puede copiarlo. El cursor se
convertir en invisible en modo
de slo lectura.

isReadOnly()

Devuelve true si el widget Line


Edit se encuentra en modo de slo

lectura.

setEnabled()

El widget de edicin de lnea


ser borrosa, lo que indica que
est desactivada. No se puede
editar el contenido de un widget
de edicin de lnea desactivada,
pero puede asignar un texto a
travs del mtodo setText().

setFocus()

Se utiliza para establecer el


cursor en el widget de edicin de
lnea- Line Edit especificado.

Las seales emitidas por el widget Line Edit son los siguientes:
TextChanged(): La seal se emite cuando se cambia el texto en el
widget Line Edit.
returnPressed(): La seal se emite cuando se pulsa Return o Enter.
editingFinished (): La seal se emite cuando el foco se pierde en el
widget Line Edit, lo que confirma la tarea de edicin ha terminado
en l.
El siguiente widget es la forma ms comn de iniciar acciones en
cualquier aplicacin.

Displaying Buttons
Viendo Botones
Para mostrar botones (normalmente Botones de comando) en una
aplicacin, es necesario crear una instancia de la clase
QpushButton. Al asignar texto a los botones, puede crear teclas de
acceso directo precediendo cualquier carcter en el texto con un
smbolo de unin. Por ejemplo, si el texto asignado a un pulsador es
&Click Me, se subray el carcter C para indicar que se trata de una
tecla de acceso, y el usuario puede seleccionar el botn pulsando
Alt + C. El botn emite una seal clicked() si se activ.
Adems de texto, un icono tambin se puede mostrar en el pulsadorpushbutton. Los mtodos para la visualizacin de texto y un icono de
un botn son estas:
setText(): Se utiliza para asignar el texto al pulsador.
setIcon(): Se utiliza para asignar icono para el botn.
El nico concepto dej de examinar antes de comenzar con su primera
aplicacin en QtDesigner es la gestin de eventos. Vamos a ver cmo
los eventos se manejan en PyQt.

Event Handling in PyQt

Control de eventos en PyQt


En PyQt, el mecanismo de control de eventos tambin se conoce como
seales y slots. Cada control emitir seales cuando cambia su
estado. Cada vez que se emite una seal, simplemente se va a
producir. Para realizar una tarea en respuesta a una seal, la seal
tiene que ser conectado a un slot. Un slot se refiere al mtodo que
contiene el cdigo que se desea ejecutar en la aparicin de una
seal. La mayora de los widgets se han predefinido slots, usted no
tiene que escribir cdigo para conectar una seal predefinida a un
slot predefinida. Para responder a las seales emitidas, se
identifica el QObject y la seal que emite y llama al mtodo
asociado. Puede usar Qt Designer para conectar seales con slots
incorporadas. Cmo? Veamos mediante la creacin de una aplicacin.
nota
Seales difieren segn el tipo de widget.

First Application in Qt Designer


Primera aplicacin en Qt Designer
Vamos a crear una aplicacin en Qt Designer para demostrar cmo
conectar seales con slots incorporadas. En la apertura, Qt Designer
le pedir que seleccione una plantilla para su nueva aplicacin,
como se mostr anteriormente en la Figura 7.5.

Qt Designer proporciona una serie de plantillas que son adecuados


para diferentes tipos de aplicaciones. Usted puede elegir cualquiera
de estas plantillas y, a continuacin, seleccione el botn Crear.
Seleccione dilogo con botones inferior y haga clic en el botn
Crear.
Un nuevo formulario se cre con una leyenda o caption "sin ttulo".
El formulario contiene un cuadro de botn que tiene dos botones,
Aceptar y Cancelar, como se muestra en la figura 7.10. Las
conexiones de seal-slot del botones Aceptar y Cancelar ya estn

configurados por defecto.


Figure 7.10. Dialog box with two buttons, OK and Cancel.

Con el fin de aprender a conectar seales con los slots de forma


manual, seleccione la casilla de botn haciendo clic cualquiera de
los botones, a continuacin, elimnelo (que elimina los botones).
Ahora usted tiene una forma completamente en blanco.
Aadir una QLabel, QLineEdit y QPushButton al formulario arrastrando
y soltando un Label, Line Edit, y empuje el control Botn de la caja
del widget en el formulario. La propiedad de texto predeterminado de
la etiqueta es TextLabel, como se muestra en la Figura 7.11 (a). Se
puede cambiar si cambia la propiedad de texto en el Editor de
propiedades. Seleccione el widget Label y establezca su propiedad de
texto para introducir texto a travs del Editor de propiedades. Del
mismo modo, establecer el texto del widget Button Push a Clear, como
se muestra en la figura 7.11 (b).
Figure 7.11. (a) Three widgets dropped on the form. (b) Widgets on
the form with the text property set.
Figura 7.11. (a) Tres reproductores- widgtes arrastrados en el
formulario. (b) Widgets en el formulario con el conjunto de
propiedades de texto.

En pratica:

nota
Para una vista previa de un formulario durante la edicin,
seleccione el Formulario, Vista previa o Ctrl + R.
Quieres un poco de accin a pasar cuando el usuario selecciona
Borrar en el formulario, por lo que necesita para conectar la seal
de empuje de Button al slots de la lnea de edicin.

Connecting to Predefined Slots


Coneccion a slots predefinidos
Actualmente, est en el modo de edicin del widget, y para aplicar
las conexiones de seal / slot, es necesario cambiar primero a las
seales y slots modo de edicin. Seleccione el icono Editar
Seales / slots de la barra de herramientas para cambiar a seales y
slots modo de edicin.
En el formulario, seleccione el botn Borrar y arrastre el ratn

para el widget Line Edit y suelte el botn del ratn. El cuadro de


dilogo Configurar conexin aparecer, lo que le permite establecer
una conexin de seal-slot entre el botn Borrar y el widget Line
Edit, como se muestra en la figura 7.12.
Figure 7.12. Configure Connection dialog displaying predefined
slots.

Cuando el usuario selecciona el botn Borrar, usted quiere ningn

texto en el widget Line Editar para ser eliminado. Para que esto
suceda, usted tiene que conectar la seal clicked() del botton al
slot clear() de la lnea de edicin. As, en el cuadro de dilogo
Configurar conexin, seleccione la seal clicked () de la columna de
PushButton y el slot clear() de la columna de la lnea de edicin y
seleccione Aceptar. En el formulario, ver que aparece una flecha,
lo que representa la conexin de la seal-slot entre las dos
widgets, como se muestra en la figura 7.13.
Figure 7.13. The signal-slot connection in widgets represented with
arrows.

Vamos a guardar el formulario con el nombre FirstApp. La ubicacin


predeterminada en la que se guardar el formulario es C: \
Python32 \ Lib \ site-packages \ PyQt4. El formulario se guarda en
un archivo con la extensin .ui. El archivo FirstApp.ui contendr
toda la informacin del formulario, sus widgets, diseo, etc. . El
archivo ui es un archivo XML, y contiene el siguiente cdigo:

el codigo lo podemos ver con notepad++ y lo configuramos al color


de un xml en herramientas/complemento/Macroformater y seria asi:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>40</x>
<y>70</y>
<width>61</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Enter Text</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>140</x>
<y>190</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Clear</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit">
<property name="geometry">
<rect>
<x>140</x>
<y>70</y>
<width>113</width>
<height>20</height>
</rect>

</property>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>pushButton</sender>
<signal>clicked()</signal>
<receiver>lineEdit</receiver>
<slot>clear()</slot>
<hints>
<hint type="sourcelabel">
<x>193</x>
<y>196</y>
</hint>
<hint type="destinationlabel">
<x>208</x>
<y>82</y>
</hint>
</hints>
</connection>
</connections>
</ui>
Para utilizar el archivo, primero debe convertirlo en script Python.
La utilidad del sistema que va a utilizar para convertir un archivo
de ui. En un script de Python es pyuic4.
En Windows, la utilidad pyuic4 se la con PyQt. Para realizar la
conversin, usted necesita abrir una ventana de smbolo del sistema
y navegue a la carpeta donde est guardado el archivo y ejecuta la
orden:
C:\Python32\Lib\site-packages\PyQt4>pyuic4 FirstApp.ui -o FirstApp.py

El comando muestra la conversin del archivo FirstApp.ui en un


script de Python, FirstApp.py
nota
El cdigo Python que genera este mtodo no debe ser modificado
de forma manual, ya que cualquier cambio se sobrescribirn la
prxima vez que se ejecuta el comando pyuic4.
El archivo de script Python FirstApp.py puede tener el siguiente
cdigo. El cdigo generado puede variar ligeramente en comparacin
con el siguiente cdigo, ya que depende de varios factores,
incluyendo el tamao de la ventana, ubicacin del botn, y as
sucesivamente:
# -*- coding: utf-8 -*# Form implementation generated from reading ui file 'FirstApp.ui'
#
# Created: Thu Jul 17 16:48:13 2014
#
by: PyQt4 UI code generator 4.9.6
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig,
_encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(400, 300)
self.label = QtGui.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(40, 70, 61, 16))
self.label.setObjectName(_fromUtf8("label"))
self.pushButton = QtGui.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(140, 190, 75, 23))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.lineEdit = QtGui.QLineEdit(Dialog)

self.lineEdit.setGeometry(QtCore.QRect(140, 70, 113, 20))


self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.retranslateUi(Dialog)
QtCore.Qobject.connect(self.pushButton,QtCore.SIGNAL(_fromUtf8("clicked()")
),self.lineEdit.clear)

QtCore.QMetaObject.connectSlotsByName(Dialog)

def retranslateUi(self, Dialog):


Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
self.label.setText(_translate("Dialog", "Enter Text", None))
self.pushButton.setText(_translate("Dialog", "Clear", None))
Este script es muy fcil de entender. Se crea una clase con el
nombre del objeto de nivel superior, con Ui_ antepondr. Desde
entonces, el objeto de nivel superior usado en nuestra aplicacin es
de dilogo, la clase Ui_Dialog se crea y almacena los elementos de
la interfaz de nuestro widget. Esa clase tiene dos mtodos,setupUi()
y retranslateUi().
El mtodo setupUi() establece los reproductores o widgets; crea los
widgets que usted utiliz durante la definicin de la interfaz de
usuario en Qt Designer. El mtodo crea los widgets de uno en uno y
tambin establece sus propiedades. El mtodo setupUi() toma un
nico argumento, que es el widget de nivel superior en el que se
crea la interfaz de usuario (widgets hijos). En nuestra aplicacin,
que es una instancia de QDialog. El mtodo retranslateUi() traduce
la interfaz. El archivo de las importaciones de todo, desde los dos
mdulos, QtCore y la QtGui, ya que va a necesitar en el desarrollo
de aplicaciones GUI.
QtCore: El mdulo QtCore constituye la base de todas las
aplicaciones basadas en Qt. Contiene las clases ms
fundamentales, como QCoreApplication, QObject, y as
sucesivamente. Estas clases realizan varias tareas importantes,
tales como el manejo de archivos, manejo a travs del bucle de
eventos, la aplicacin de las seales y el mecanismo de slot,
control de concurrencia, y mucho ms caso. El mdulo incluye
varias clases, incluyendo QFile, QDir, QIODevice, QTimer,
QString, mtodo QDate y mtodo Qtime.
QtGui: El mdulo QtGUI contiene las clases necesarias en el
desarrollo de aplicaciones GUI multiplataforma. El mdulo
contiene la mayora de las clases de interfaz grfica de
usuario, incluyendo QCheckBox, QComboBox, QDateTimeEdit,
QLineEdit, QPushButton, QPainter, QPaintDevice, QApplication,
QTextEdit, y QtextDocument.
Usted estara tratando el cdigo como un archivo de cabecera, y se le
importarla al archivo de origen desde el que se va a invocar su
diseo de interfaz de usuario. Vamos a crear el archivo de origen
con el nombre callFirstApp.pyw e importar el cdigo FirstApp.py a
ella. El cdigo en el archivo es como se muestra aqu:

el archivo CallFirstApp.pyw debe estar en la misma carpeta de


FirstApp.py
El mdulo sys es importado para que pueda acceder a los argumentos
de la lnea de comandos almacenados en la lista sys.argv. En primer
lugar se crea un objeto QApplication. Todas las aplicaciones PyQt
GUI debe tener un objeto QApplication para proporcionar acceso a
informacin como el directorio de la aplicacin, tamao de la
pantalla, y as sucesivamente.
Al crear un objeto QApplication, se pasa los argumentos de lnea de
comandos a la misma por la sencilla razn de que PyQt puede actuar
sobre los argumentos de lnea de comandos, si es necesario. Se crea
una instancia de MyForm y llama a su mtodo show(), que aade un
nuevo evento a la cola de eventos del objeto QApplication: una
solicitud para pintar los reproductores o widgets especificados en
la clase, MyForm. El app.exec_() se llama para iniciar ciclo de
eventos del objeto QApplication.
Una vez que el ciclo de eventos comienza, el widget de nivel
superior usado en la clase, MyForm, se muestra junto con sus widgets
hijos. Todos los eventos que se producen, ya sea a travs de la
interaccin del usuario o generado por el sistema, se agregan a la
cola de eventos. Bucle de eventos de la aplicacin comprueba
continuamente para ver si ha ocurrido algn evento. Si es as, el
bucle de eventos procesa y, finalmente, pasa al mtodo asociado.
Cuando se cierra el widget de nivel superior que se muestra, se
entra en el modo oculto y PyQt elimina el widget y realiza una
terminacin limpia de la aplicacin.

En PyQt, cualquier control puede ser utilizado como una ventana de


nivel superior. Declarar QDialog como una ventana de nivel superior,
todo lo que necesita es declarar que el padre de la clase MyForm
como None. As que para el mtodo __ init__() de nuestra clase
MyForm, se pasa un padre por defecto None para indicar que el
QDialog muestra a travs de esta clase es una ventana de nivel
superior.
nota
Un widget que no tiene padre se convierte en una ventana de
nivel superior.
Recordemos que el diseo de la interfaz de usuario se crea una
instancia llamando al setupUI() de la clase que se cre en el cdigo
Python (Ui_Dialog). Lo que necesita es crear una instancia de la
clase Ui_Dialog, la clase que se cre en el cdigo Python, e invocar
su mtodo setupUi(). El widget de dilogo se crear como el padre de
todos los elementos de interfaz de usuario y se muestra en la
pantalla.
nota
QDialog, QMainWindow, y todos PyQt de widgets se derivan de
Qwidget.
En la ejecucin del script Python anteriormente, la aplicacin
solicitar introducir texto en el widget Line Edit, como se muestra
en la figura 7.14.
Figure 7.14. Output of FirstApp application.

Cualquier texto en el widget Line Edit se borrar cuando se


selecciona el botn Borrar.
Enhorabuena por la creacin y ejecucin de su primera aplicacin GUI
con xito.
En esta aplicacin, usted vio cmo conectar las seales integradas
con slots. Qu pasa si usted quiere un mtodo personalizado para
ejecutar una ocurrencia de un evento?

Using Custom Slots


Usando Slots personalizados

Das könnte Ihnen auch gefallen