python表达式和语句的区别_python表达式和语句,exec和ecal

一,基本概念

Python代码由表达式和语句组成,并由Python解释器负责执行。它们的主要区别是“表达式”是一个值,它的结果一定是一个Python对象。当Python解释器计算它时结果可以是任何对象。例如42,1+2,int(‘123’),range(10)等。

表达式:赋值,是什么,产生结果,表达式的结果是值,对象 用eval语句(变量名,值,运算符,)

语句: 做事流程,干什么, 语句是控制程序走向,不产生值,

常见的Python表达式操作符有

算术运算符: x+y, x-y, x / y, x*y, x // y, x%y

比较运算符:x>y, x=y, x<=y, x==y, x!=y

逻辑运算符: x or y, x and y, not x

成员关系运算:x in y, x not in y

对象实例测试:x is y, x not is y

位运算:x & y, x | y, x ^ y, x<>y 等。

结果不是对象的代码则成为‘语句’。它们表示的是一个动作而不是生成或者返回一个值, 语句是控制程序走向,不产生值。

常见的Python语句有:赋值语句a='a'

调用函数

print:打印对象

if/elif/else:条件判断

for/else:序列迭代

while/else:普通循环

pass:占位符

break

continue

def

return

yield

global

raise:手动触发异常

import

from:模块属性访问 等。

二, exec与eval的主要区别

** Exec与Eval语句的主要区别是,exec处理字符串里面的代码,无论代码返回什么统一返回None,能执行长的复杂的代码,

而eval是处理字符串里面的表达式,简单的加减乘除返回运算结果,无法执行长的python代码。**

In [19]: print(eval("9+10"))

19

In [20]: eval("9+10")

Out[20]: 19

In [21]: exec('9+10')

In [22]:

In [22]: print(exec('9+10'))

None

In [29]: res1 = eval('1+2+3')

...: res2 = exec('1+2+3')

...: print('res1_eval', res1, 'res2_exec', res2)

res1_eval 6 res2_exec None

In [30]:

执行复杂代码

code = '''

def foo():

print ('run foo')

return 1234

foo()

'''

In [23]: code = '''

...: def foo():

...: print ('run foo')

...: return 1234

...: foo()

...: '''

In [24]: code

Out[24]: "\ndef foo():\n print ('run foo')\n return 1234\nfoo()\n "

In [25]: exec_code= exec(code)

run foo

In [26]: exec_code

In [27]: eval_code= eval(code)

Traceback (most recent call last):

source_code = '''

import time

def test_func():

for n in (10,):

#for n in (100,200,300):

data = b'x'*n

start = time.time()

b = data

print('data: ',data)

while b:

b = b[1:]

print('b: ',b)

print('bytes', n, time.time()-start)

return '124'

test_func()

'''

res1 = exec(source_code)

print('res1', res1)

输出结果

data: b'xxxxxxxxxx'

b: b'xxxxxxxxx'

b: b'xxxxxxxx'

b: b'xxxxxxx'

b: b'xxxxxx'

b: b'xxxxx'

b: b'xxxx'

b: b'xxx'

b: b'xx'

b: b'x'

b: b''

bytes 10 0.0

res1 None

三, eval() 函数

eval(source, globals=None, local=None) 作用: 把一个字符串当成一个表达式来执行,返回表达式执行的结果

x = 100

y = 200

s = "x + y"

a = eval(s)

print('a1', a)

ls = {"x": 1, "y": 2}

a = eval(s, None, ls)

print('a2',a)

gs = {'x': 11, 'y': 21}

a = eval("x+y", gs, None)

print('a3',a)

a = eval("x+y", gs, ls)

print('a4',a)

# 输出内容:

a1 300

a2 3

a3 32

a4 3

四 exec()函数

exec(source, globals=None, local=None) 作用:把一个字符串当成程序来执行,动作,流程

x = 100

y = 200

s = "print('hello:', x, y)"

gd = {'x': 10, 'y':20}

ld = {'x': 1, 'y':2}

exec(s)

exec(s, gd, ld)

exec(s, gd)

exec(s, None, ld)

# 输出内容

hello: 100 200

hello: 1 2

hello: 10 20

hello: 1 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值