x = Maclasse()
f(x)
#j'aimerais être sur que l'appel de f ne modifie pas x
et donc empêcher que f appelle reset()
Voici l'état de mes réflexions:
Je peux faire de Maclasse un type 'terminal' comme str ou tupple que l'on ne peut pas modifier, mais je trouve cette solution
contraignante.
Soit je passe a f un copie de x ( ce que je trouve contraignant aussi, en plus d'être peut performant), de plus ça n'empêchera
pas f de modifier ma copie (pour rien).
Soit avant d'appeler f je supprime la methode reset() de x et je la remet après (?)
Sinon, à la Java je pourrais passer a f seulement une interface sur x ( mais cela ne doit pas avoir de sens en Python)
Bref je cherche une solution à la fois propre et performante.
def parse(template): state = 0 opened_brack = 0 static = "" fields = [] starts = [] j=0 print 'Examining n', template,'n' for c in template : i=j #print 'examine',c,'starts',starts,i if c == '$' : state = 1 elif c == '{' and state == 1 : opened_brack += 1 starts.append(i-1) elif c == '}' : st = starts.pop() fields.append( [st, template[st+len(STARTER):i] , opened_brack-1]) opened_brack -= 1 state = 0 else : if state == 0 : static += c j += 1 print 'Static Textnt',static,'n' return fields
tpl = "Un ${1:truc} avec son ${2:${3:bidule} dans un ${4:${5:${6:machin}}}}."
for el in parse(tpl) : print el ---------------------
Ca marche,
Tel que, ça ne correspond pas à ton cahier des charges.
mais bon, je trouve ça un peu 'bidouille'
Le fait de faire le parsing à la mano, dans un cas aussi simple, n'est pas nécessairement de la bidouille en soi. Par contre, ton code est AMHA inutilement compliqué.
def parse(template):
state = 0
opened_brack = 0
static = ""
fields = []
starts = []
j=0
print 'Examining n', template,'n'
for c in template :
i=j
#print 'examine',c,'starts',starts,i
if c == '$' :
state = 1
elif c == '{' and state == 1 :
opened_brack += 1
starts.append(i-1)
elif c == '}' :
st = starts.pop()
fields.append( [st, template[st+len(STARTER):i] ,
opened_brack-1])
opened_brack -= 1
state = 0
else :
if state == 0 :
static += c
j += 1
print 'Static Textnt',static,'n'
return fields
tpl = "Un ${1:truc} avec son ${2:${3:bidule} dans un
${4:${5:${6:machin}}}}."
for el in parse(tpl) : print el
---------------------
Ca marche,
Tel que, ça ne correspond pas à ton cahier des charges.
mais bon, je trouve ça un peu 'bidouille'
Le fait de faire le parsing à la mano, dans un cas aussi simple, n'est
pas nécessairement de la bidouille en soi. Par contre, ton code est AMHA
inutilement compliqué.
def parse(template): state = 0 opened_brack = 0 static = "" fields = [] starts = [] j=0 print 'Examining n', template,'n' for c in template : i=j #print 'examine',c,'starts',starts,i if c == '$' : state = 1 elif c == '{' and state == 1 : opened_brack += 1 starts.append(i-1) elif c == '}' : st = starts.pop() fields.append( [st, template[st+len(STARTER):i] , opened_brack-1]) opened_brack -= 1 state = 0 else : if state == 0 : static += c j += 1 print 'Static Textnt',static,'n' return fields
tpl = "Un ${1:truc} avec son ${2:${3:bidule} dans un ${4:${5:${6:machin}}}}."
for el in parse(tpl) : print el ---------------------
Ca marche,
Tel que, ça ne correspond pas à ton cahier des charges.
mais bon, je trouve ça un peu 'bidouille'
Le fait de faire le parsing à la mano, dans un cas aussi simple, n'est pas nécessairement de la bidouille en soi. Par contre, ton code est AMHA inutilement compliqué.