精华内容
下载资源
问答
  • 初学者问一个问题,number=eval("2" "2*3^2") ,number为啥是64
  • Python eval函数

    2019-10-26 21:35:02
    标题有非法字符,请修改,是不是和数据库有冲突了。 Python eval()函数 描述: python eval()函数用来执行一个字符串表达式,并返回表达式的值。 语法: eval(expression[, globals[, locals]]) 参数介绍:...

    标题有非法字符,请修改,是不是和数据库有啥冲突了。

    Python eval()函数

    描述:

    python eval()函数用来执行一个字符串表达式,并返回表达式的值。

    语法:

    eval(expression[, globals[, locals]])

    参数介绍:

    expression --- 表达式
    globals --- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象
    locals --- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象

    返回值:

    返回表达式计算结果

    下面例子展示eval()函数使用方法

    a = 4
    b = 5
    print(eval('3*a'))
    print(eval('pow(3,3)'))
    print(eval('6+6'))
    print(eval('b-3'))

    输出

    12
    27
    12
    2

    本期eval()函数就学到这里。

    展开全文
  • <div><p>执行 python test_dota_r3det_ms.py -...可是我经过测试后的图片为跟输入的图片一摸一样呢,原本应该怎样的呢?</p><p>该提问来源于开源项目:Thinklab-SJTU/R3Det_Tensorflow</p></div>
  • python之eval简述

    2018-11-27 09:58:25
    先说Python中它能干,怎么用。 函数原型: eval(expression, globals=None, locals=None) 参数:globals和locals表达式中变量所在的命名空间,一般默认全局,但是也可以自己指定,globals必须字典类型的数据...

    eval()函数在Python中出镜率较高,TF中也频频出现。初学时候经常看的一头雾水。根据自己自学经验的查找的资料总结一下:
    先说Python中它能干啥,怎么用。
    函数原型:
    eval(expression, globals=None, locals=None)
    参数:globals和locals是表达式中变量所在的命名空间,一般默认是全局,但是也可以自己指定,globals必须是字典类型的数据格式(随后由例子),locals可以是其他映射类型的,两个参数如果同时存在,并且空间的变量有重复冲突,那么locals会覆盖相应的globals。有兴趣的可以自行百度。参数expression必须是一个字符串,内容可以是一段简单的代码,也可以是函数调用,比如:

    a=10;
    print(eval("a+1"))
    

    输出结果为:11
    下面我们修改一下代码,指定global。

    g={"a":50}
    a=10;
    print("不带globals参数时候a+1的值:",eval("a+1"))
    print("带globals参数时候a+1的值:",eval("a+1",globals=g))
    

    输出结果为:
    不带globals参数时候a+1的值: 11
    带globals参数时候a+1的值: 51
    再看一个例子,同时指定globals和locals

    a=10
    b=20
    c=30
    g={'a':6,'b':8}
    t={'b':100,'c':10}
    print(eval('a+b+c',g,t))
    

    输出结果:
    116

    利用eval()函数我们还可以实现函数的动态调用:
    比如我们要一次测试好几个函数,这些函数在参数格式上有相同的地方,那么我们可以使用eval来减轻代码的书写量,更加灵活的测试这些函数:比如以下代码,我们依次测试tf的数据转换类函数对于不同类型数据的转换结果。

    d=0.1314926
    f=0.13
    i32=12
    i64=65
    vd=tf.Variable(d)
    vf=tf.Variable(f)
    vi32=tf.Variable(i32)
    vi64=tf.Variable(i64)
    sess.run(tf.global_variables_initializer())
    def to_xxx(fun_name,x):
        return sess.run(eval(fun_name)(x))
    funcs=["tf.to_double","tf.to_float","tf.to_int32","tf.to_int64"]
    parms=[d,f,i32,i64,vd,vf,vi32,vi64]
    for func in funcs:
        for parm in parms:
           print("当前变量值:",parm)
           print("当前函数:",func)
           print("运算结果:",to_xxx(func,parm))
           print("-----------------------------")
    

    点击这里运行代码

    展开全文
  • 没有作用因为,eval()函数可以调用被赋值的变量,作用很大是eval()可以自动区分全局变量和局部变量,并且可以优先调用局部变量。全局变量和局部变量在面向对象的使用中很重要。 eval函数里面有三个参数,...

    eval函数

    eval函数很有趣,在我的理解中,它没啥作用,但是作用又很大。没有啥作用是因为,eval()函数可以调用被赋值的变量,作用很大是eval()可以自动区分全局变量和局部变量,并且可以优先调用局部变量。全局变量和局部变量在面向对象的使用中很重要。
    eval函数里面有三个参数,expression,globals,locals。不详细解释,简单介绍下就好。expression就是你调用的变量,globals默认为None,它指的是全局变量。locals指的是局部变量。调用优先级是局部变量大于全部变量。
    了解eval函数之前得先知道eval的使用规则。eval无论传入的是什么。都得先掉一层皮,就是先让参数削掉一层引号。如果没有引号,就会把传入的参数当成一个变量,去局部或者全局查找,如果查找不到就会报错。如果查到变量之后,再削掉一层引号,如果是字符串就输出,如果不是就继续查找,直到查到的是字符串或者数值类型才停止然后输出。

    1 直接输出

    a = '10'
    print(eval(a))
    

    这里输出的是10,
    那这个a是什么类型的呢?我们可以用type查看一下

    a = '10'
    b = type(eval(a))
    print(b)
    

    这里输出的<class ‘int’>,a本来是字符串类型,可是经过eval之后就变成了int类型。这是我上面讲过的,就是先削掉一层皮,就是把引号去掉。所以’10’就变成10,也就是从string类型,变成了int类型

    2 有全局变量的情况

    首先看两个例子

    #实例1
    a = 10
    b={'a':20}
    print(eval('a+1',b)) #21
    
    #实例2
    a = '10'
    b={'a':20}
    print(eval(a+'1',b)) #101
    

    对于这两个实例,我刚开始也是一头雾水,但是只需要稍加分析就能得出答案。
    由于python解释代码的原理是边编译边执行,所以对于实例1来讲,执行到输出函数print的时候,先遇见的是’a+1’,这时候会去掉外层的’’,变成a+1,很明显这个a是一个变量,再往后执行,就遇见了全局变量b,程序会从前面执行过的语句中优先调用全局变量b,发现字典b里面有个键’a’,将其去掉引号后就是需要的变量a,其对应的是整数型20,再加上1就是21了。
    对于实例2来讲,查看到输出语句之后,发现有个a,但是没法去除引号,所以认定他就是个变量,这时不需要找全局变量,直接从程序里面取值即可。发现有个变量a=‘10’,而且是个字符串,再加上本来的字符串’1’,就输出了101这个字符串。

    3 有局部变量的情况

    # 局部变量
    a = '10'
    g = {'a':'10','b':'20'}
    t = {'b':'30','d':'40'}
    print(eval('a+b+d',g,t)) #103040
    

    这个题咋一看很简单,无非是字符串的拼接,问题在于,g和t里面都有b,为什么最终拼出来的结果是b=30?这是因为,当eval里面既有全局变量又有局部变量的时候,优先选择局部变量,所以当g和t都有b的时候,优先选择t里面的b=‘30’

    4 NameError情况

    #情况1
    str = 'abcd'
    print(eval('str')) #abcd
    
    情况2
    str = 'abcd'
    print(eval(str))
    
    Traceback (most recent call last):
      File "f:/练习python/np.py", line 22, in <module>
        print(eval(str))
      File "<string>", line 1, in <module>
    NameError: name 'abcd' is not defined
    

    对于情况1按照eval函数的特点,当输出的是eval(‘str’)的时候,先去除’‘留下str,会发现str=‘abcd’,这是后直接输出字符串abcd
    对于情况2,按照eval特点,输出的是eval(str),说明str是一个变量,查看执行过的程序会发现前面有一个str=‘abcd’,去除’'后发现留下的是abcd,按照eval特点,发现abcd是一个变量,但是程序里面没有发现abcd赋予的值,所以直接报错NameError

    展开全文
  • 经常会遇上这么一个问题 <?...$_POST['1']($_POST['2']); 在菜刀中一般1=assert&...看看熟悉的一句话,这个时候就会想,为不能这样1=eval&2连接。 $_POST['1']()这一个可变函数,...

    经常会遇上这么一个问题

    <?php
    $_POST['1']($_POST['2']);

    在菜刀中一般是1=assert&2做为密码连接,或者1=system&2=whoami来执行命令。

    <?php
    eval($_POST['2']);

    看看熟悉的一句话,这个时候就会想,为啥不能这样1=eval&2连接。


    $_POST['1']()这是一个可变函数,这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

    但值得注意的是不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构

    所以在看手册里面看eval函数就会发现有一行提示:

    Note: 因为是一个++语言构造器++而不是一个函数,不能被可变函数调用。

    结论就说到这,现在来验证一下。

    eval.php

    <?php
    eval("system('whoami');");

    assert.php

    <?php
    assert('system("whoami")');

    804631-20160812183342578-1228382810.png

    804631-20160812183355093-1358589994.png

    可以很清楚的看到opcode,eval是INCLUDE_OR_EVAL去处理,而assert是用DO_FCALL去处理。

    可以看下DO_FCALL
    804631-20160812183427515-1474195187.png

    会进行一个函数名的查找

    再跟一下INCLUDE_OR_EVAL

    804631-20160812183440765-1725908221.png

    就会发现进去后会直接编译eval参数中的代码。

    从一开始的跟踪opcode中可以看到,eval其实是Zend的函数,而assert是PHP_FUNCTION宏编写的,最后在调用上是不同的。

    print与printf也一样,前者不是函数,而后者是的。

    对于opcode的理解可以看看这篇文章

    感谢ph师傅以及各位基友的指导。

    参考资料:
    ln-科普小文章php内核动态调试关于弱类型比较

    转载于:https://www.cnblogs.com/iamstudy/articles/analysis_eval_and_assert.html

    展开全文
  • 平时都根据代码框架写代码,最近感觉是不是不用加model.train和model.eval是不是也行的,发现完全不是的,于是开始学习 2、区别 结论 主要针对model 在训练时和评价时不同的Batch Normalization 和Dropout ...
  • 好像没可写的, 好吧我太菜了:( eval函数中绝大部分都在eval套娃. 那么套娃递归的终结符在哪里呢? 最基本的true,false,数字,字符串... GC: 自己太菜了,不会以后肯定会写的, 奥里给! object 该语言不是面向...
  • 原题内容: ... web100打开可以看到只有一个很...回到下载,解开压缩版,web100,无后缀名,个人的经验不急着加后缀名的,直接用记事本直接打开 可得代码如下: &lt;script&gt;_='function $(){e=g...
  • 概念问题.eval()是啥eval()函数十分强大,官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果。 它可以把list,tuple,dict和string相互转化。 在接口自动化中经常用到。 比如啊,我们把测试数据写...
  • 从STVIR/pysot下载了代码,配置了环境,跑通了demo、test,到了eval,不知道是啥情况,可能是环境问题吧,等有空了再研究一下,先记录一下配置使用过程。 一、环境配置 在在终端下激活anaconda,创建名为pysot的环境 ...
  • 前言: 在使用UI自动化测试平台时,有不顺手的功能,自己尝试新增functions时,踩到了这个坑里...报错Error: Uncaught (in promise) TypeError: Object(...) is not a function at eval 解决 事出有因: 原来 export .
  • eval_voc的时候更加离奇, ---start evaluate--- ---class aeroplane ap 0.0--- ---class bicycle ap -1--- ---map -0.5---</p><p>该提问来源于开源项目:xiongzihua/pytorch-YOLO-v1</p></div>
  • 先去查下资料,看看为不用硬件I2C. 资料上说,官方资料说,用硬件I2C,优先级必须高,最好用DMA操作I2C. 看了官方提供的I2Cdemo, 一个2个,其中一个低功耗唤醒的,剩下一个I2C_EEPROM_fast_mode_plus, 确实...
  • python3 tools/train.py --eval --c ./configs/yolov3_mobilenet_v1_Headshoulder.yml log: EvalReader: batch_size: 8 bufsize: 32 dataset: !VOCDataSet anno_path: test.txt dataset_dir: dataset/...
  • matlab中的eval函数使用在matlab的命令行窗口中输入help eval命令回车就可以看到eval函数的官方解释,大概的意思就是执行...用法:eval(expression)[output1,…,outputN] = eval(expression)这里就很奇怪了,为...
  • 网络上流传着众多的框架 好些框架的核心 都带有蛮强 蛮齐全的函数 哪怕刚开始时 不全 经过...哪些东西可选的 代码通过怎样的形式来合理的组织管理 因为我觉得框架的核心功能 没必要动不动就是几十K 近百K
  • eval() 该函数把字符串当作php代码执行,从它的功能来看可以感觉到这个函数会存在安全问题,任何一个字符串只要用了该函数,就可以被执行,所以不要随便用一个未经验证的数据通过该函数传入。 eval(string $code) ...
  • javascript同名变量

    2019-12-10 14:11:22
    在流程之前,必须写一下标识符是啥. 一句话,就是variable object的属性.而这个对象会被不同执行环境来决定. 比如全局环境下的variable object 就是 global, function code 类型的 执行环境,则是 acitvation object ,...
  • 一句话木马简单实践

    2020-12-17 17:39:38
    eval()这个函数的作用就是把参数当作PHP代码来执行,无论你传入的是啥。比如: eval(echo flag.txt),那么就执行了echo flag.txt这个命令。 类似的还有asp的一句话木马:<%eval request(“qiuy”)%> 如何使用
  • python 执行

    2016-10-29 21:27:51
    相⽐比 .NET、JAVA 的 CodeDOM 和 Emit,Python 天⽣生拥有⽆无与伦⽐比的动态执⾏行优势。... # 假装看不懂这是啥…… 9 >>> eval("{'a': 1, 'b': 2}")? # 将字符串转换为 dict。 {'a': 1, 'b': 2} eval
  • DVWA File upload& 一句话木马

    千次阅读 2019-07-10 23:31:04
    @的意思就是后面是啥东西执行时都不要报错 把eval 里面的字符串当作代码执行 $_POST[young] 超全局变量 用young参数把需要执行的语句传进去,然后通过eval里去执行这个语句,达到了目的。 例如需要输出young 在这里...
  • 好久没用了QAQ都不记得了趁着机器学习开课迅速的来一波...)里面的东西直接打印print(input())把输入内容打印出来eval函数执行单引号里面的式子,返回表达式的值(返回字符型)eval('2*2')或者eval(print(inpu...
  • 有一个需求实现简单计算器表达式的计算,但是不能使用eval实现(PS:这不废话么,用eval实现,谁还在这看你瞎逼逼呢。。。)然后在分析需求的时候突然想起了之前在某本算法书(别某本了,严蔚敏老师的书,果断免....
  • 那它是啥意思呢? 这是一段php代码,写在<?php ?>里面才能被服务器解析; @符号是不报错,即使执行错误也不报错 $_POST是用post方法接受变量pass的值 eval()函数是把字符串当成PHP代码执行 所以,利用文件上传...
  • 2021-01-18

    2021-01-18 15:50:33
    代码如上图,转化成字典类型,用eval转化成str,但是,依然报了错, ValueError: dictionary update sequence element #0 has length 1; 2 is required 找不到原因,是啥
  • 算法之算数表达式后序表示 ...有一个需求实现简单计算器表达式的计算,但是不能使用eval实现(PS:这不废话么,用eval实现,谁还在这看你瞎逼逼呢。。。)然后在分析需求的时候突然想起了...
  • Javascript执行上下文

    2019-07-24 19:39:43
    二、啥是执行上下文 当 JavaScript 代码运行的时候,确定它运行所在的环境非常重要的。运行环境由下面三种不同的代码类型确定 1.全局代码(Global Code):代码首次执行时候的默认环境 2.函数代码(Function Code...
  • 我们将其放在phpstudy的www先,在浏览器中看看样子! eval函数,这执行函数;这里执行了_变量中的内容也就是’'中的内容,但是,要注意的,它并没有执行()函数,仅仅执行了字符串而已(从而导致乱码),...

空空如也

空空如也

1 2 3 4 5
收藏数 88
精华内容 35
关键字:

eval是啥