zoukankan      html  css  js  c++  java
  • Python之eval的使用

    eval的使用

    eval()函数十分强大,将字符串 当成 有效的表达式 来求值 并 返回计算结果。

    举个栗子

    >ipython
    Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]
    Type 'copyright', 'credits' or 'license' for more information
    IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
    
    In [1]: eval("1 + 1")  # 基本的数学计算
    Out[1]: 2
    
    In [2]: eval("'*' * 10")  # 字符串重复
    Out[2]: '**********'
    
    In [3]: type(eval("[1, 2, 3, 4, 5]"))  # 将字符串转换成列表
    Out[3]: list
    
    In [4]: type(eval("{'name': 'xiaoming', 'age': 18}"))  # 将字符串转换成字典
    Out[4]: dict
    
    In [5]: exit
    
    >
    

    不要滥用 eval,就像下面:

    简单计算器——实现加减乘除混合运算
    input_str = input("请输入一个算术题:")
    print(input_str+"的结果是:", eval(input_str))
    

    在开发时千万不要使用 eval 直接转换 input 的结果

    原因:

    __import__('os').system('ls')
    
    # 等价代码
    import os
    os.system("终端命令")
    
    • 执行成功,返回 0
    • 执行失败,返回错误信息

    附录:windows下常用新建文件命令:

    # 创建文件夹:md 文件夹名
    # 创建空的文件:type nul>文件名
    # 创建有内容文件:echo "内容">文件名
    # 查看文件内容:type +文件名
    # 查看目录及子文件:dir
    # 删除空文件夹:rd 文件夹名
    # 删除文件及所有子文件:rd /s/q 文件夹名
    # 删除文件:del 文件名
    

    接着上面计算器的代码执行:

    用户在输入框内执行如下非破坏性代码

    # 新建文件
    > 请输入一个算术题:__import__('os').system('echo "new file"> 新文件.txt')
    __import__('os').system('echo "new file"> 新文件.txe')的结果是: 0
    # 删除文件
    > 请输入一个算术题:__import__('os').system('del 新文件.txt')
    __import__('os').system('del 新文件.txe')的结果是: 0
    

    不要滥用eval,尤其是在开发时千万不要使用 eval 直接转换 input 的结果!!!

  • 相关阅读:
    小程序排错(redis导致)
    linux系统删除-开头文件或目录
    nginx 反向代理
    memcache
    一次故障过程
    json.Decoder vs json.Unmarshal
    ssl中间证书
    作业10:String类
    Angular6如何引入jQuery-knob
    OpenJdk源码下载
  • 原文地址:https://www.cnblogs.com/onefine/p/10499383.html
Copyright © 2011-2022 走看看