首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python 2.7.5中eval()的等价物

python 2.7.5中eval()的等价物
EN

Stack Overflow用户
提问于 2013-10-21 16:56:48
回答 3查看 1.7K关注 0票数 1

我们可以使用eval(input())来允许用户在python3中输入列表。下面是一个示例:

代码语言:javascript
复制
  L = eval(input('Enter a list: '))
  print('The first element is ', L[0])
  Enter a list: [5,7,9]
  The first element is 5

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

我想以列表[5,7,9]的形式输入数据,并希望使用Python2.7将每个值作为L[0]5L[1]7,等等。

EN

回答 3

Stack Overflow用户

发布于 2013-10-21 16:58:11

Python2中的input() 已经应用了eval()

Python3 input()是Python2的raw_input(),已重命名。在Python2中,input()eval(raw_input())是一样的

代码语言:javascript
复制
L = input('Enter a list: ')  # includes a call to `eval()` in Python 2

然而,更好的替代方法是使用ast.literal_eval();它只允许Python文字,而eval()允许任意Python表达式。对于接受带有数字的列表输入,ast.literal_eval()是足够的,而且不会出现安全问题:

代码语言:javascript
复制
from ast import literal_eval

L = literal_eval(raw_input('Enter a list: '))  # safe alternative to eval

注意,您仍然需要传入有效的Python文本;使用['a', 4, 7],而不是[a, 4, 7];不带引号的a不是有效的Python字符串文本。

票数 7
EN

Stack Overflow用户

发布于 2013-10-21 17:01:04

Martijn的正确答案是:raw_input/input -但值得注意的是,为了更安全地评估简单的文字,这两种方法都应该是首选的:

代码语言:javascript
复制
from ast import literal_eval
L = literal_eval(raw_input('Enter a list: ')) # or `input` for Python 3.x
票数 0
EN

Stack Overflow用户

发布于 2013-10-21 17:01:24

只需在Python2.7.5中使用input

代码语言:javascript
复制
lst = input("Enter a list:")  
>> [1,2,3]  # lst = [1,2,3]

lst[0]  # 5
lst[1]  # 7
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19490054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档