5
Moduly
def tiskarna(x): print x
% python
>>> import modul1 >>> modul1.tiskarna('Hello world!') Hello world!
>>> from modul1 import tiskarna >>> tiskarna('Hello world!') Hello world!
>>> from modul1 import * >>> tiskarna('Hello world!')
Hello world!
print 'načítáme ...',
import sys
jmeno = 42
def funkce(): pass
class klass: pass
print 'konec načítání.'
>>> import modul2
načítáme ... konec načítání.
>>> modul2.sys
<module 'sys'>
>>> modul2.jmeno
42
>>> modul2.funkce, module2.klass
(<function funkce at 765f20>, <class klass at 76df60>)
>>> modul2.__dict__.keys()
['__file__', 'jmeno', '__name__', 'sys', '__doc__', '__builtins__', 'klass', 'func']
% cat jednoduchy.py
print 'hello' neco = 1 % python
>>> import jednoduchy hello
>>> jednoduchy.neco
1
>>> jednoduchy.neco = 2 >>> import jednoduchy >>> jednoduchy.neco 2
% cat maly.py
x = 1
y = [1, 2]
% python
>>> from maly import x, y >>> x = 42 >>> y[0] = 42 >>> import maly >>> maly.x 1
>>> maly.y [42, 2]
import modul jmeno1 = modul.jmeno1 jmeno1 = modul.jmeno2 ...
del modul import modul
používáme atributy modulu
... reload(modul) používáme atributy čerstvě načteného modulu
% cat menavka.py
verze = "číslo jedna"
def oznamovatel():
print verze
% python
>>> import menavka
>>> menavka.oznamovatel()
číslo jedna
>>>
% cat menavka.py
verze = "číslo pět"
def oznamovatel():
print 'Po dalším načtení:', verze
>>> import menavka
>>> menavka.oznamovatel() číslo jedna
>>> reload(menavka) <module 'menavka' from 'C:\Python\menavka.pyc'>
>>> menavka.oznamovatel() Po dalším načtení: číslo pět
def testuj():
print "To 'sou supr baráky ..."
if __name__ == '__main__': testuj() % python
>>> import spustme
>>> spustme.testuj()
To 'sou supr baráky ...
% python spustme.py
To 'sou supr baráky ...
>>> import sys
>>> sys.path
['.', 'C:\\Python\\lib', 'C:\\Python\\lib\\tkinter']
>>> sys.path = ['.'] >>> sys.path.append('C:\\Python') >>> sys.path ['.', 'C:\\Python']
>>> import string
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
ImportError: No module named string
M.jmeno M.__dict__['jmeno'] sys.modules['M'].jmeno getattr(M, 'jmeno') ukecane = 1
def prochazej(modul):
"Fce vypisující obs. jm. prostoru (přes __dict__)"
if ukecane:
print "-"*32
print "Modul %s (%s)" % (modul.__name__, modul.__file__)
print "-"*32
pocet = 0
for atrib in modul.__dict__.keys(): print "%02d) %s \t" % (pocet, atrib),
if atrib[0:2] == "__": print "<standardní jméno>"
else: print getattr(modul, atrib) pocet += 1
if ukecane:
print "-"*32
print "Celkem jmen v %s: %d" % (modul.__name__, pocet)
if __name__ == "__main__":
import meta1 prochazej(meta1) C:\Python> python meta1.py
--------------------------------
Modul meta1 (C:\Python\meta1.py)
--------------------------------
00) prochazej <function prochazej at 0x011A595C>
01) __builtins__ <standardní jméno>
02) __name__ <standardní jméno>
03) __file__ <standardní jméno>
04) __doc__ <standardní jméno>
05) ukecane 1
--------------------------------
Celkem jmen v meta1: 6
>>> import "string"
Traceback ( File "<interactive input>", line 1
import "string"
^
SyntaxError: invalid syntax
>>> jmeno = "string"
>>> exec "import " + jmeno >>> string <module 'string'>
>>> jmeno = "string"
>>> string = __import__(jmeno)
>>> string
<module 'string'>
X = 99
def tiskX(): tisk X
% cat vnorene2.py
from nested1 import X, tiskX X = 88 tiskX() % python vnorene2.py
99
% cat vnorene3.py
import vnorene1
vnorene1.X = 88 vnorene1.tiskX()
% python vnorene3.py
88
fce1() def fce1():
print fce2() fce1() def fce2():
return "Hello"
fce1() % cat recur1.py
x = 1; import recur2; y = 2
% cat recur2.py
from recur1 import x; from recur1 import y; >>> import recur1
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "recur1.py", line 2, in ?
import recur2
File "recur2.py", line 2, in ?
from recur1 import y
ImportError: cannot import name y
from module import X import module něco dál
reload(module) X import module něco dál
reload(module) module.X % cat A.py
import B import C % python
něco děláme ... importujeme A
>>> reload(A)