2016-04-06 1 views
2

Y at-il quelque chose qui se passe lorsque le formatage de chaîne qui utilise la fonction de module tout en appelant soitformatage de chaînes avec le signe module/pour cent

StringOperand % TupleOperand ou

StringOperand % DictionaryOperand

Ou est-ce juste une utilisation arbitraire de% pour la fonction de formatage de chaîne?

Je suppose que l'opérateur de mise en forme de chaîne n'est pas un appel à l'arithmétique modulaire les suivantes:

tuple = (1,2,3) 
print '%d %d %d'%tuple 

impressions: 1 2 3, mais

print '%d %d %d %d'%tuple 

retours TypeError: pas assez arguments pour le format str

+3

Ceci est appelé * surcharge d'opérateur * et est commun en python. Une classe peut implémenter un opérateur pour signifier tout ce qu'il aime en implémentant une méthode spéciale, dans ce cas '__mod __()'. Par exemple, essayez 'print 'bonjour" * 3'. Voir aussi https://docs.python.org/2/library/operator.html – cdarke

Répondre

3

Ceci est operator overloading. Ce dont vous parlez, c'est l'intégration de la langue, mais vous pouvez surcharger les méthodes par vous-même. Par exemple, l'opérateur surcharge + qui est décoré en python par __add__ méthode:

class YourMath(object): 
    def __init__(self, param): 
     self.param = param 

    def __add__(self, x): 
     return int(str(self.param) + str(x.param)) # concatenation 


x = YourMath(5) 
y = YourMath(4) 

+ concaténera au lieu de conclure. Le résultat de x+y dans ce cas est 54.

+0

Est-ce également un exemple de surcharge d'opérateur: "import math as m"? –

+0

Aucun "import math comme m" est l'importation du module 'math' avec l'alias' m' –