Inicio    Contáctenos  Qué es DatoSoft Descargas


Datos y Software - Soluciones

 

DatoSoft


Datos y Software - Soluciones

 

 

Ir a otros temas...

 

Titulo del tema



INTRODUCCION

Pendiente de editar

CONTENIDO

 

 

El IDE de activestate es incompatible con treepad ligth, cuando este está en memoria, no importa como sea minimizado, si en el system tray o normal.
Hay que cerrar treepad para que el IDE funcione bien

La manera estandar de salir de un programa python es sys.exit(numero)
os. _exit() should normally only be used in the child process after a fork().

*********************************************************
Exceptions:
De la ayuda, language reference 4 Execution Model - 4.2 Exceptions:

Python uses the ``termination'' model of error handling: an exception handler
can find out what happened and continue execution at an outer level, but it
cannot repair the cause of the error and retry the failing operation (except by
re-entering the offending piece of code from the top).

La idea general: Se recorre (backtrace) el stack de funciones recorriendo hacia
arriba a ver si alguna maneja la excepción. Si nada, pues se termina, si si pues
se sigue en el nivel de la función que la maneje, con la instruccion que sigue
al except.

Si se quiere repetir el código y corregir el error que generó la exception debe
hacerse algo como: (del tutorial))
while True:
try:
x = int(raw_input("Please enter a number: "))
break
except ValueError:
print "Oops! That was no valid number. Try again..."

La idea con raise, es colocarla en un except que no tenga especificada la
exception, a fin de que en un nivel mas arriba, las llamadoras de pronto la
sepan manejar.

import sys # del tutorial

try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except IOError, (errno, strerror):
print "I/O error(%s): %s" % (errno, strerror)
except ValueError:
print "Could not convert data to an integer."
except:
# a diferencia de C++ no se pasa explicitamente un objeto exception por
# referencia, para hacer algo como e.Message(), toca con sys.
print "Unexpected error:", sys.exc_info()[0]
# Si el objeto exception tiene parametros ver el tutorial
raise


*********************************************************


IDLE is Python's Tkinter-based Integrated DeveLopment Environment.
Para verlo correr: idle.bat
IDLE emphasizes a lightweight, clean design with a simple user interface.
Although it is suitable for beginners, even advanced users will find that
IDLE has everything they really need to develop pure Python code.

IDLE features a multi-window text editor with multiple undo, Python colorizing,
and many other capabilities, e.g. smart indent, call tips, and autocompletion.

The editor has comprehensive search functions, including searching through
multiple files. Class browsers and path browsers provide fast access to
code objects from a top level viewpoint without dealing with code folding.

There is a Python Shell window which features colorizing and command recall.

IDLE executes Python code in a separate process, which is restarted for each
Run (F5) initiated from an editor window. The environment can also be
restarted from the Shell window without restarting IDLE. etc.


*********************************************************

Hay varios demos en el propio Python, en:
Python22\Lib\site-packages\Pythonwin\pywin\Demos
D:\Python22\Lib\site-packages\win32\Demos
D:\Python22\Lib\site-packages\win32comext\Demos

*********************************************************

:I had installed python21 and I have no problem running the Python.exe
:but PythonW.exe(Pythonwin) does not run at all.
:Am I missing out something ?? My computer is window NT

Pythonw.exe is just the same python interpreter as python.exe, except
that it hides the MSDOS console window.

PythonWin is a completely separate program (unless you downloaded and
installed ActiveState Python, in which case it is included).

Look on your Start Menu, under programs. You should find Python21
listed
there somewhere.

**************************************************************
Tomado de la FAQ, 6.13:
Note that the main script executed by Python, even if its filename ends
in .py, is not compiled to a .pyc file. It is compiled to bytecode, but
the bytecode is not saved to a file.
Sin embargo yo observo que los modulos mios, llamados por mis programas
si son compilados a pyc. (aun no se bajo que circunstancias)
Pero existe un módulo:
import compiler
compiler.compileFile('xxx'') que produce el .pyc
**************************************************************

La versión Python de Windows tiene un debugger particular para el
ambiente Windows: View-Toolsbar-Debuggin

**************************************************************

Para poder importar mis módulos tengo que copiarlos a la ruta
donde está la librería y agregar la ruta de búsqueda al ambiente.
Se puede hacer de dos maneras: (a menos que el programa y el módulo
estén en la misma carpeta.)
Dentro del IDE:
import sys
sys.path.append("e:\\src\\python")
Es sensible a mayúsculas, ej: import tkinter no funciona pero Tkinter
si.

o con la variable de ambiente, por ejemplo:
set PYTHONPATH=e:\src\python
En esta ruta el busca los .py adicionales (os.py etc.)
**************************************************************

Dentro del IDE, para correr un módulo que ya fue cargado parece
que no hay comando, toca por las opciones del menú
Falso: observar la respuesta en la FAQ 7.10
"use the built-in function reload() to re-read the imported module"
Ej: reload("tkinter3"), donde tkinter3.py es el módulo.
También sirve si se está desarrollando y probando un módulo, pues si
se cambia y no se hace reload(el modulo), el llamador no verá los cambios.
En caso de duda probar en DOS.
**************************************************************

Para instalar los "runtime" de python en una máquina windows, de modo
que se puedan ejecutar los .py sin instalar completo python:

- copiar python.exe y pythonw.exe a c:\windows (o algo en el path)
- copiar python22.dll, pywintypes22.dll a \windows\system
- copiar las librerias de python22\lib a c:\pythonlib
- copiar la librería de las extensiones de windows,
win32api.pyd desde lib\site-packages\win32 a c:\pythonlib
- En el autoexec.bat poner set PYTHONPATH=c:\pythonlib

Con estos archivos ademas se puede programar, porque ahí está el
interprete, lo que no tenemos es un IDE bonito etc.


****************************************************
#OJO CON ESTE ERROR:
Se tenía en el directorio de trabajo otro odbc.py y se usaba ese y no
el de PYTHONPATH.

En la FAQ explican que son dll's, hechos seguramente en C, pero con la
convencion de que deben tener cierta funcion y de que se deben renombrar
de dll a pyd.


****************************************************
# Que significa curses.ascii? EN windows curses es un directorio y ascii.py
# esta ahí
# Explicacion del manual:
# Hierarchical module names: when the module names contains one or more
# dots,the module search path is carried out differently.
# The sequence of identifiers up to the last dot is used to find a
# ``package'' ;
# the final identifier is then searched inside the package.
# A package is generally a subdirectory of a directory on sys.path that has
#a file __init__.py.

****************************************************

#import curses.ascii
# (En Library reference - Generic Operating System Services)

for Letra in range(158,166):
# no funciona en modo consola
#print Letra,': ',curses.ascii.unctrl(Letra)+'a ',str(Letra)+'b ',chr(Letra)+'c '
print Letra,': ',str(Letra)+'b ', chr(Letra)+'c '
#Error print Letra+'b' no se puede sumar int y str hay que hacer str(Letra)+'b'

#notar que al correrlo en consola el ASCII sale bien, 160 es á etc
# pero al correrlo en windows sale diferente, en python se menciona algo
# del locale

****************************************************

Para poder leer archivos en el directorio actual del script toca:
En el modo interactivo: os.chdir("e:\\src\\python")
porque el directorio de trabajo es c:\windows por default
y se puede verificar con os.getcwd()
Tambien se puede cambiar de directorio, abriendo un script desde el IDE
(pero no con archivos recientes).


****************************************************
Para sacar los parámetros que saca el sistema operativo
print sys.argv[0] # path y nombre del ejecutable
print os.path.split(sys.argv[0])[0] # path
print os.path.split(sys.argv[0])[1] # nombre del ejecutable


****************************************************
Importación de módulos:
Si se usa import module
hay que usar module.metodo()
Ejemplo: import string

print string.lower("HOLA")

Si se usa from string import lower
Podemos llamar print lower("HOLA") directamente
Porque los nombres del modulo forman parte del namespace del nuestro.

****************************************************
Tuples vs list
Tuple es una list inmutable (no se puede cambiar)

list: (Igual a un vector en libstd++)
codigos=[1,2,"222","etc"]

tuple: (se parece mas a un enum)
Meses="Enero", "Febrero", "etc"
Sin los [], solo con comas y opcionalmente entre parentesis.
****************************************************


Hay una "ayuda en línea", typeando help() en el interprete, tanto en consola
como en windows.


*****************************************************
Para bases de datos:
Un buen documento general: UsosDePython.html
1. Con object persistence.
2. En general con odbc: foxpro, dbase, paradox. Aunque tambien mysql.
3. Módulos especializados: PyGreSQL para accedesr a postgre (en linux)
Ademas de PyGreSQL.tgz, en el manual de postgres en linux hay
abundante información (pygresql.html, etc.)


*****************************************************
Scope de las variables:
En un script las variables definidas en main son globales, de modo que
si hay funciones definidas, estas conocen las variables.
Pero a diferencia del Foxpro, las variables definidas en otro script,
el llamador, no son conocidas en el script llamado, afortunadamente.

*****************************************************
La funcion getpass.getpass() funciona solo en DOS porque usa el módulo
msvcrt que es DOS


*****************************************************
#Para imprimir en la misma posici¢n:
for i in range(0,10):
print i,'\r',


*******************************************************************
here are RAD tools also available in python for different diffrent GUI
libraries, most of them are developed within python only. Boa, wxGlade
are few of developers choice , can be used for only wxPython
libraries.Spectix is for Tkinter-Tix,rc files generated from VC++ can be
also used with PythonWin32. Qt editor can be also used for this purpose,
but today we are going to talk about Glade and python libglade module
for PyGtk.

*******************************************************************
Si se está usando el objeto fileinput en el IDE y hay un error ante de fileinput.close()
no se puede volver a ejecutar el script porque dice que aun esta activo el input,
toca escribir fileinput.close() en la ventana de comandos


*******************************************************************
De Python reference manuals chapter 5:
When a list comprehension is supplied, it consists of a single expression
followed by at least one for clause and zero or more for or if clauses.
In this case, the elements of the new list are those that would be produced by
considering each of the for or if clauses a block, nesting from left to right,
and evaluating the expression to produce a list element each time the innermost
block is reached.

Está explicado también en el tutorial, More on lists - List Comprenhensions

De Dive into Python:
3.6. Mapping Lists
One of the most powerful features of Python is the list comprehension, which
provides a compact way of mapping a list into another list by applying a function
to each of the elements of the list.

Example 3.24. Introducing List Comprehensions
>>> li = [1, 9, 8, 4]
>>> [elem*2 for elem in li]
[2, 18, 16, 8]
>>> li
[1, 9, 8, 4]
>>> li = [elem*2 for elem in li]
>>> li
[2, 18, 16, 8]

Ver un ejemplo en mis programas, listComprenhension.py
*******************************************************************
activepython 2.3.5 no funciona bien con el mozilla firefox, pues los menus no hacen nada. Toca cerrar el mozilla.
Tambien pone problemas con el VIM...toca cerrar el vim!