zoukankan      html  css  js  c++  java
  • python学习笔记 day15内置函数(二)

    exec() eval()

    这两个函数都可以作用于字符串类型的代码:

    code='print("哈哈哈哈")'   #code是一个字符串,但是里面的代码是一个python的语句
    exec(code)
    eval(code)

    运行结果:

    所以eval()和exec()函数都可以执行字符串类型的代码

    再来看一个例子:

    code='1+2+3+4'
    print(eval(code))
    print(exec(code))

    运行结果:

    eval()是有返回值的,而exec()函数没有返回值

    eval()函数适用于带有返回值的,比如上面的数值计算代码;

    exec()函数适用于流程控制的:

    code='for i in range(3):print(i)'  #流程控制代码,没有返回值,在字符串中
    exec(code)

    运行结果:

    code='1+2+3+4'
    print(eval(code))

    运行结果:

    compile()函数:编译(不太重要)

    就是普通的代码都是需要先编译为字节码,才能被执行,但是如果一段代码很很长很长,但是有需要被后面反复执行,这时候如果按部就班的执行,编译的时间都要花费掉很长时间,所以如果先把它编译,后面再执行就基本不用时间的~

    第一种:流程控制(字符串中的代码就是流程控制,比如for循环,没有返回值)使用exec

    code1='for i in range(10):print(i)'
    compile1=compile(code1,'','exec')   #中间的‘’那个,除非是从文件中取才写filename,
    exec(compile1)   #流程控制的就用exec

    运行结果:

    第二种:数值计算(字符串中的代码需要计算返回值,数值计算比如1+2+3+4),带有返回值的用eval

    code2='1+2+3+4'
    compile2=compile(code2,'','eval')  #数值类型,带有返回值的就用eval
    print(eval(compile2))

    运行结果:

    第三种:用户交互(字符串中的代码含有input)用single,打印仍是用exec:

    code3='name=input("please input your name:")'
    compile3=compile(code3,'','single')
    # print(name)  #这个时候会报错,因为内存中并没有name这个变量,前面只是编译了,字符串里面的并没有被执行
    exec(compile3)
    print(name)  #exec之后就会在内存中生成name变量了,可以打印处name的值

    运行结果:

    talk is cheap,show me the code
  • 相关阅读:
    阿里播放器踩坑记录 进度条重构 video loadByUrl失效解决方案
    liunx 安装nc/netcat centos安装netcat
    jquery实现显示textarea输入字符数
    SQL 时间戳转换为日期
    .Net WebRequest异步请求与WebClient异步请求
    SQL删除多列语句
    jQuery为元素设置css的问题
    关于调试WCF时引发的异常XmlException: Name cannot begin with the '<' character, hexadecimal value 0x3C” on Client Side
    SQL删除指定条件的重复数据,只保留一条
    net.exe use命令的使用
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9595347.html
Copyright © 2011-2022 走看看