今天在看中国大学MOOC的教程里,出现了这样一个语句:
我在命令行里试了下的确很强大。
可以通过一个input函数分别给三个变量赋值
问题来了,我只知道eval函数是可以解析字符串的,但是这种用途却是闻所未闻。
各位高手:
1.请问这种用法叫什么?
2.还有类似的,eval包裹非字符串方法产生奇妙的效果的方法吗?
今天在看中国大学MOOC的教程里,出现了这样一个语句:
我在命令行里试了下的确很强大。
可以通过一个input函数分别给三个变量赋值
问题来了,我只知道eval函数是可以解析字符串的,但是这种用途却是闻所未闻。
各位高手:
1.请问这种用法叫什么?
2.还有类似的,eval包裹非字符串方法产生奇妙的效果的方法吗?
eval('1+2') 结果:3
eval('{"a":1, "b":2}') 结果:字符串转字典(json)
......
但是要慎用,不能直接把用户提交的数据直接放eval里,否则,可能后患无穷。
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答857 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
這並不是什麼特殊的用法,內建函數
input
的返回值就是str
,當你輸入12, 23, 24
的時候,input
得到的返回值是字符串'12, 23, 24'
,經過eval
之後就會被估值為tuple
:(12, 23, 24)
,接著分別被 unpack 到 variablea
,b
和c
中才會有如此效果。所以這種用法只是一般的用法,所謂的奇妙效果也不是奇妙在
eval
上, 而且正如 @lejoy 所說,eval
太過強大導致直接估值用戶給予的字串符會產生巨大的風險, 例如:就能夠讓用戶隨意地引起各種例外, 更有甚者:
將有可能使系統遭受嚴重的入侵或破壞。
如果你想要省去
input
之後轉型的麻煩可以考慮使用這個套件: tinp範例:
我回答過的問題: Python-QA