Question

J'ai trouvé des objets de code en Python.Je suis curieux de savoir ce que font chacune des variables des constructeurs.Il n'y a pas beaucoup d'informations à leur sujet dans la fonction d'aide intégrée. Tout ce que j'ai obtenu, c'est :

 class code(object)
 |  code(argcount, nlocals, stacksize, flags, codestring, constants, names,
 |        varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])
 |  
 |  Create a code object.  Not for the faint of heart.

Ce n’est évidemment pas très informatif.Quels types chacune de ces entrées attend-elle et que font les valeurs ? NOTE: J'ai posé cette question par curiosité académique et non dans un but de codage spécifique.

Était-ce utile?

La solution

Un objet de code Python n'est principalement qu'un conteneur pour ses attributs.Chacun des arguments que vous voyez pour le constructeur devient un attribut avec un co_ préfixe (par ex.le argcount l'argument devient le co_argcount attribut).

Le constructeur effectue un peu de validation, donc si les arguments ne sont pas du bon type, il déclenchera immédiatement une exception (plutôt que d'échouer uniquement lorsque l'objet code est utilisé ultérieurement).

Quant à la signification des arguments et des attributs, elle est principalement documentée dans un grand tableau en la documentation pour le inspect module.Voici la partie pertinente :

code  co_argcount     number of arguments (not including * or ** args)   
      co_code         string of raw compiled bytecode    
      co_consts       tuple of constants used in the bytecode    
      co_filename     name of file in which this code object was created     
      co_firstlineno  number of first line in Python source code     
      co_flags        bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=**arg   
      co_lnotab       encoded mapping of line numbers to bytecode indices    
      co_name         name with which this code object was defined   
      co_names        tuple of names of local variables      
      co_nlocals      number of local variables      
      co_stacksize    virtual machine stack space required   
      co_varnames     tuple of names of arguments and local variables

Les attributs co_freevars et co_cellvars ne sont pas documentés à ma connaissance.Ils sont liés aux fermetures, je pense.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top