Função exec
Uma função similar exec
eval(s)
avalia uma expressãos
;eval('r = 1 + 1')
é ilegal porque é uma declaração, não uma expressão;- ...mas podemos usa o
exec
para transformar uma ou mais declarações completas para dentro do código.
declaracao = 'r = 1+1' #armazena a declaração em uma cadeia de caracteres
exec(declaracao)
print r #imprime 2
Para códigos longos podemos utilizar as cadeias de caracteres multilinha:
import math
umcodigo = '''
def f(t):
term1 = math.exp(-a*t)*math.sin(w1*x)
term2 = 2*math.sin(w2*x)
return term1 + term2
'''
exec(umcodigo) #executa a cadeia de caracteres como um código Python
exec
para função em tempo de execução
O exec
pode ser utilizado para contruir uma função em tempo de execução.
Embutindo uma formula de usuário em uma função Python:
import math
formula = raw_input('Escreva uma fórmula envolvendo x: ')
codigo = """
def f(x):
return %s
""" % formula
exec(codigo) #converte a cadeia de caracteres em código
#pergunte ao usuário valores de x e avalie f(x)
x = 0
while x is not None:
x = eval(raw_input('Valor de x (Digite None para sair): '))
if x is not None:
y = f(x)
print 'f(%g)=%g' % (x, y)
Enquanto o programa está rodando o usuário digita a equação, que se transforma em uma função Python, então o usuário fornece um valor para x até que a resposta seja None
, e o programa avalia a função f(x).
O programador não tem idéia da escolha do usuário para a função f(x) quando ele escreve o programa!