Python中将数据类型转化成原始类型

eval函数

将字符串string对象转化为有效的表达式参与求值运算返回计算结果。

>>> s='8*8'
>>> eval(s)
64
>>> eval('2+5*4')
22
>>> x=1
>>> y=4
>>> eval('x+y')
5
>>> eval('98.9')
98.9
>>> eval('9.9\n')
9.9
>>> eval('9.9\n\t\r  \t\r\n')
9.9

eval可以将字符串转换成字典,列表,元组

str_list = '[1, 2, 3, 4]'
result = eval(str_list)
print(result)  # [1, 2, 3, 4]
str_dict = "{'name':'python','age':20}"
result = eval(str_dict )
print(result)  # {'name': 'python', 'age': 20}

ast.literal_eval

ast.literal_eval是python针对eval方法存在的安全漏洞而提出的一种安全处理方式。ast模块就是帮助Python应用来处理抽象的语法解析的,而该模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的Python类型,如果是则进行运算,否则就不进行运算。

import ast

x = "{'a':10,'b':20,'c':30}"
print(ast.literal_eval(x))
# {'a': 10, 'b': 20, 'c': 30}

y = "[5,10,15]"
print(ast.literal_eval(y))
# [5, 10, 15]

z = "(1,2,3)"
print(ast.literal_eval(z))
# (1, 2, 3)

出于安全考虑,对字符串进行类型转换的时候,最好使用ast.literal_eval()。
ast.literal_eval 不能执行上述 eval 函数的计算操作。

import ast
ast.literal_eval('2+6')

'''
Traceback (most recent call last):
  File "d:\program files\python37\Lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
  File "d:\program files\python37\Lib\ast.py", line 91, in literal_eval
    return _convert(node_or_string)
  File "d:\program files\python37\Lib\ast.py", line 90, in _convert
    return _convert_signed_num(node)
  File "d:\program files\python37\Lib\ast.py", line 63, in _convert_signed_num
    return _convert_num(node)
  File "d:\program files\python37\Lib\ast.py", line 55, in _convert_num
    raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.BinOp object at 0x000001AC3D88FB70>
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值