Je cherche à comprendre urllib
Pour examiner la façon dont fonctionne le module urllib, j'ai truffé son code d'instructions
print 'passage 1'
print 'passage 2'
print 'passage 3'
print 'passage 4'
print 'passage 5'
print 'passage 6' etc
J'ai ainsi observé qu'avant d'exécuter quelque instruction que ce soit, la progression dans urllib passe par toutes les instructions détectrices print 'passage x' situées en non indentation.
La dernière instruction qui soit exécutée est print 'passage 19', qui est située avant les 3 dernières de mon urllib modifié:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| print 'passage 18'
def main():
import getopt, sys
try:
opts, args = getopt.getopt(sys.argv[1:], "th")
except getopt.error, msg:
print msg
print "Use -h for help"
return
t = 0
for o, a in opts:
if o == '-t':
t = t + 1
if o == '-h':
print "Usage: python urllib.py [-t] [url ...]"
print "-t runs self-test;",
print "otherwise, contents of urls are printed"
return
if t:
if t > 1:
test1()
test(args)
else:
if not args:
print "Use -h for help"
for url in args:
print urlopen(url).read(),
print '_name_ = ',__name__
print 'passage 19'
# Run test program when run as a script
if __name__ == '__main__':
print 'passage 20'
main() |
Puis il y a exécution de l'instruction print "J'entre dans urlopen"
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| print 'passage 3'
_urlopener = None
print type(_urlopener)#eee
def urlopen(url, data=None, proxies=None):
print "J'entre dans urlopen"
"""urlopen(url [, data]) -> open file-like object"""
global _urlopener
if proxies is not None:
opener = FancyURLopener(proxies=proxies)
elif not _urlopener: # si _urlopener = None alors not _urlopener vaut True
print 'ICI je passe dans elif not _urlopener'#eee
opener = FancyURLopener()
_urlopener = opener
print type(opener)
print type(_urlopener)#eee
else:
opener = _urlopener
if data is None:
print 'LA je passe par if data is none'
return opener.open(url)
else:
return opener.open(url, data)
print 'passage 4' |
Je ne comprends pas comment le déroulement du programme peut appeler la fonction urlopen() après être passé par l'instruction print 'passage 19',
puisqu'aprés il n'y a que 3 lignes avec une condition qui n'est même pas vérifiée ( print '_name_ = ',__name__ indique que __name__ vaut 'urllib').