2009-11-19 4 views
1

J'apprends Python d'un livre et suis tombé sur cet exemple:largeur et de précision à l'aide *

>>> '%f, %.2f, %.*f % (1/3.0, 1/3.0, 4, 1/3.0) 
# Result: '0.333333, 0.33, 0.3333' 

ne comprends pas bien ce qui se passe ici, en particulier le « 4 » entre les deux.

+1

Ce n'est pas un python valide. Il vous manque un devis de clôture pour la chaîne et la partie "1.3.0" devrait probablement être "1/3.0" je suppose. – truppo

Répondre

3

Je pense que vous vouliez dire quelque chose comme ceci:

>>> '%f, %2.f, %.*f' % (1/3.0, 1.3, 4, 1/3.0) 
'0.333333, 1, 0.3333' 

4 est une valeur de wild card qui est utilisé à la place d'astérisque *. Une fois développé, il serait équivalent à:

>>> '%f, %2.f, %.4f' % (1/3.0, 1.3, 1/3.0) 
+0

Oh, c'est ça? La forme développée n'est-elle pas plus lisible alors? – 3zzy

+0

il est peut-être plus lisible mais vous ne savez peut-être pas quelle sera la largeur du champ – SilentGhost

+0

Bien que plus lisible, il offre moins de flexibilité au moment de l'exécution. –

1

Il y a deux erreurs de syntaxe dans la ligne que vous avez publiée. 1.3.0 n'est pas un nombre valide et la chaîne n'est pas fermée.

Ceci est une version valide dudit format de chaîne.

'%f, %2.f, %.*f' % (1/3.0, 1/3.0, 4, 1/3.0) 

et sorties:

'0.333333, 0.33, 0.3333' 

je ne pouvais pas trouver de la documentation sur% * f dans the official docs.. Cependant, il semble que l'analyse du 4 soit le nombre de positions décimales auxquelles vous voulez faire l'argument suivant.

Par exemple:

'%.*f' % (5, 1/3.0) 

retours

'0.33333' 

et

'%.*f' % (6, 1/3.0) 

retours

'0.333333' 

Il semble être un moyen d'offrir une précision de longueur variable, donc vous pouvez autoriser vos utilisateurs à le spécifier.

Questions connexes