相当于python 2.7.5中的eval()

1 python python-2.7

我们可以使用eval(input())允许用户在python3中输入列表这是一个例子:

  L = eval(input('Enter a list: '))
  print('The first element is ', L[0])
  Enter a list: [5,7,9]
  The first element is 5
Run Code Online (Sandbox Code Playgroud)

eval()不能在python2.7中工作

我想输入数据的列表[5,7,9] 和要采取的每个值L[0]5,L[1]7,等使用python 2.7.

Mar*_*ers 7

input()在Python 2中已经适用eval().

Python 3 input()是Python 2 raw_input(),重命名.在Python 2中,input()与以下内容相同eval(raw_input()):

L = input('Enter a list: ')  # includes a call to `eval()` in Python 2
Run Code Online (Sandbox Code Playgroud)

但是,更好的选择是使用ast.literal_eval(); 它只允许Python文字,同时eval()允许任意 Python表达式.对于带有数字的列表输入,ast.literal_eval()很多并且不对安全问题持开放态度:

from ast import literal_eval

L = literal_eval(raw_input('Enter a list: '))  # safe alternative to eval
Run Code Online (Sandbox Code Playgroud)

请注意,您仍然需要传入有效的Python文字; 使用['a', 4, 7], [a, 4, 7] ; 只是 a没有引号不是有效的Python字符串文字.

  • 今天登陆地球的外星人会发现令人惊讶的是,Python 2阻止你用"sum"添加字符串,因为它效率低,推荐使用`''.join()`,但你很高兴使用`input()`一言不发,关于`raw_input()`和`ast.literal_eval()`更安全.向后兼容性是一个苛刻的主人. (3认同)