pass、del、exec、eval

1.pass

有时候需要测试程序,但缺少一块语句,想要这块语句什么都不做,那pass就会被派上用场了。

>>> pass
>>> 

注释和pass语句对于没有完成的语句,这个方法尤其有用

name = input("name: ")
if name=='Joe':
    print("1001")
elif name=='Amy':
    #还没完...
    pass
elif name=='Alice':
    print("NOT FOUND")

2.使用del删除

del会移除对象的一个引用,也会移除那个名字本身,也可以使用None

>>> x=1
>>> x
1
>>> x=None
>>> x
>>> x=1
>>> y=x
>>> del x
>>> x
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    x
NameError: name 'x' is not defined
>>> y
1

x和y都指向同一个列表,但删除x并不影响y,因为删除的只是名称

3.exec执行

exec(object)
>>> from math import sqrt
>>> exec('sqrt=1')#为什么一开始这样做
>>> sqrt(4)
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    sqrt(4)
TypeError: 'int' object is not callable

exec语句最有用的地方在于动态创建代码字符串。如果字符串是从其他地方获得的--很有可能是用户,那么几乎不能确定其中到底包含什么代码。为了安全起见,可以增加一个字典,起到命名空间的作用。

命名空间的概念或称为作用域(scope) ,是非常重要的知识。现在可以把它想象成保存变量的地方,类似于不可见的字典,所以在程序执行x=1这类赋值语句时,就将x和值1放在当前的命名空间内,这个命名空间一般来说都是全局命名空间。

可通过增加in<scope>来实现,其中的<scope>就是起到放置代码字符串命名空间的作用

>>> from math import sqrt
>>> scope={}
>>> exec ("'sqrt=1'in scope")
>>> sqrt(4)
2.0

4.eval用于求值

eval是内建函数,eval会计算字符串形式的表达式,并且返回结果值。

>>> eval(input("Enter an arithmetic expession:"))
Enter an arithmetic expession:1+2*2
5

跟exec一样,eval也可以使用命名空间,可以给eval提供两个命名空间,一个是全局的,一个是局部的,全局必须是字典,局部可以是任何形式的映射。

给exec或者eval语句提供命名空间时,还可以在真正使用命名空间前放置一些值进去

>>> scope={}
>>> scope['x']=2
>>> scope['y']=3
>>> eval('x*y',scope)
6

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值