Syntaxe pas comprise

2 réponses
Avatar
ast
Bonjour

Dans cette fonction:

def get4(srcpages):
scale = 0.5
srcpages = PageMerge() + srcpages
x_increment, y_increment = (scale * i for i in srcpages.xobj_box[2:])
for i, page in enumerate(srcpages):
page.scale(scale)
page.x = x_increment if i & 1 else 0
page.y = 0 if i & 2 else y_increment
return srcpages.render()

trouvée ici:

https://www.blog.pythonlibrary.org/2018/06/06/creating-and-manipulating-pdfs-with-pdfrw/

je ne comprends pas cette ligne:

x_increment, y_increment = (scale * i for i in srcpages.xobj_box[2:])

(scale * i for i in srcpages.xobj_box[2:]) est un générateur, un seul
objet, on ne devrait pas pouvoir le dérouler dans 2 variables.

x, y = 1 génère une erreur
x, y = (i for i in range(10)) aussi

mais pas:

x_increment, y_increment = (scale * i for i in srcpages.xobj_box[2:])

pourquoi ?

2 réponses

Avatar
Benoit Izac
Bonjour,
Le 04/11/2021 Í  13:45, ast a écrit dans le message
<6183d5e8$0$1344$ :
Dans cette fonction:
def get4(srcpages):
scale = 0.5
srcpages = PageMerge() + srcpages
x_increment, y_increment = (scale * i for i in srcpages.xobj_box[2:])
for i, page in enumerate(srcpages):
page.scale(scale)
page.x = x_increment if i & 1 else 0
page.y = 0 if i & 2 else y_increment
return srcpages.render()
trouvée ici:
https://www.blog.pythonlibrary.org/2018/06/06/creating-and-manipulating-pdfs-with-pdfrw/
je ne comprends pas cette ligne:
x_increment, y_increment = (scale * i for i in srcpages.xobj_box[2:])
(scale * i for i in srcpages.xobj_box[2:]) est un générateur, un seul
objet, on ne devrait pas pouvoir le dérouler dans 2 variables.
x, y = 1 génère une erreur
x, y = (i for i in range(10)) aussi

Mais c'est normal, dans le premier cas il n'y a pas assez d'objets, dans
le second il y en a trop.
x, y = (i for i in range(2))
x



0
y



1
mais pas:
x_increment, y_increment = (scale * i for i in srcpages.xobj_box[2:])
pourquoi ?

Parce que «Â srcpages.xobj_box[2:] » contient pile-poil deux éléments.
--
Benoit Izac
Avatar
ast
Le 04/11/2021 Í  17:30, Benoit Izac a écrit :
x, y = 1 génère une erreur
x, y = (i for i in range(10)) aussi

Mais c'est normal, dans le premier cas il n'y a pas assez d'objets, dans
le second il y en a trop.

oui
Comme il y avait 2 variables Í  gauche du =, j'attendais 2 objects
Í  droite, comme dans:
x, y = 8, 9
Mais si il y un seul object itérable Í  droite du = qui fournit
le bon nombre de données, ça marche aussi, comme dans:
x, y = (i for i in range(2))