面试中的一道题:
修改函数,使之输入func_2能运行,并且输出结果为123。
def func_1(a):
return a()
def func_2():
return '123'
b = input('>>')
print(func_1(b))
分析一下,输入func_2,b就被赋值为'func_2'。然后执行func_1函数,将字符串'func_2'传入,在执行a()。但是'func_2'是个字符串类型,如何才能执行func_2()函数呢?这里就用到了eval()方法。
eval() 将字符串str当成有效的表达式来求值并返回计算结果。
def func_1(a):
print(type(a))
return a()
def func_2():
return '123'
b = eval(input('>>'))
print(func_1(b))
#未添加eval()函数前的结果
>>func_2
Traceback (most recent call last):
<class 'str'>
File "xxxxxx", line 7, in func_1
print(func_1(b))
File "xxxxxx", line 3, in func_1
return a()
TypeError: 'str' object is not callable
#添加eval()函数后的结果
>>func_2
<class 'function'> #变成了一个函数
123
小例子:
def func():
print('aaaaaaa')
func()
print(type(func))
#运行结果
aaaaaaa
<class 'function'>
Process finished with exit code 0
再举几个eval()的例子:
print(eval('4 + 5'))
#9
n = 1
print(eval('n + 1'))
#2
a = 1
p = {'a':20}
print(eval('a+1',p))
#21
网友评论