码迷,mamicode.com
首页 > 编程语言 > 详细

Python--pass、del、exec、eval

时间:2018-11-29 01:19:39      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:module   rac   内存   ref   地址   情况   执行   删除   表达式   

pass:

  表示什么都不做,可用作占位符

name = input("name":)
    if name == "shuai":
        # 待完成
        pass

  


 

del删除:

  对于不再使用的对象,Python会将其删除

内存回收:

  • 定义变量会占用内存空间,所以对于不用的变量需要回收掉
  • 什么是没用的变量?
  • 没用的变量就是没用变量名指向它
  • 一个值可以被多个变量名所指(这种绑定的关系官方称为:引用计数),当引用计数为0时,就意味着没用任何名字跟值建立绑定的关系,就视作垃圾,这就是需要回收的,python会自动将其回收,释放空间

查看引用计数:

  通过导入sys模块,使用getrefcount()方法查看

技术分享图片

  这里"yuan"这个字符串对象有3个引用:x、y、getrefcount()

  注:getrefcount()也算做一个引用

内存地址:

   ID可以反映内存地址,使用id()查看

技术分享图片

  • 变量的定义就会开辟内存空间,但是如下图,查看ID是一样的,这违背了原则
  • 这是python的优化机制,对于占用内存较小的值,就直接指向,不新开辟

 技术分享图片

 


exec:

  将字符串作为代码执行

exec("print(‘hello‘)")
# hello

  调用时如果提供一个参数,会污染命名空间,多数情况下要向他传递一个命名空间(存放变量名)

# 代码使用了sqrt,出错
from math import sqrt
exec("sqrt = 1")
print(sqrt(4))
# Traceback (most recent call last):
#   File "E:/Text/demo.py", line 6, in <module>
#     print(sqrt(4))
# TypeError: ‘int‘ object is not callable

# 添加第二个参数,一个字典,用作代码字符串的命名空间
from math import sqrt
d = {}
exec("sqrt = 1", d)
print(sqrt(4))
print(d["sqrt"])
# 2.0
# 1

# 字典d中添加了包含所有内置函数和值的字典__builtins__
print(d)

  


 

eval:

  类似exec,用于计算用字符串表示的Python表达式的值,并返回结果(exec没有返回),同样可以提供命名空间

print(eval(input("输入计算表达式:")))
# 输入计算表达式:1 + 3 * 2
# 7

  

Python--pass、del、exec、eval

标签:module   rac   内存   ref   地址   情况   执行   删除   表达式   

原文地址:https://www.cnblogs.com/Mr-chenshuai/p/10035578.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!