可调用的对象是python执行环境中最重要的部分,python语句,赋值,表达式,模块等,这些

对象只是构成可执行代码块的拼图的很少的一部分,而这些代码块被称为代码对象。
 
每个可调用的对象的核心都是代码对象。一般来说,代码对象可以作为函数或者方法调用的一部分来
执行,也可以用exec语句或者是内建函数eval()来执行。从整体上来看,一个python模块的代码对象,
是构成该模块的全部代码。
 
如果要执行python代码,那么该代码必须先要转换成字节编译的代码,这才是真正的代码对象。然而,
它们不包含任何关于它们执行环境的信息,这便是可调用物存在的原因,它被用来包装一个代码对象并
提供额外的信息。
udf.func_code就是代码对象,用户定义函数
函数对象是代码对象的包装,而方法则是函数对象的包装。
 
python提供了很多内置函数来支持可调用/执行对象,其中exec用来执行代码对象,complie用于生成代码对象。
  • callable(obj) 判断obj是否可调用。是的话,返回True;否则False
  • compile(string, file, type) 从type类型中创建代码对象;file是代码存放的地方,通常设为''
最后的type有三种类型:
'eval' 可求值的表达式(和eval()一起用)
'single' 单一可执行语句(和exec一起用)
'exec' 可执行语句组(和exec一起用)
  • eval(obj, globals=globals(), locals=locals())
对obj进行求值,obj是已编译为代码对象的表达式,或是一个字符串表达式;全局和局部变量是可选
使用整数,反而报错,只接受字符串和代码对象。
  • exec obj
执行代码对象或者是字符串,也可以是一个文件对象(已经打开的有效的python脚本)
还可以支持脚本文件对象
>>>f = open('try.py')
>>>exec f
#显示执行
>>>exec f #再次调用没反应,这是因为文件指针已经指向文件的末尾
>>> f.tell() #返回当前文件指针的位置
>>> f.seek(0) #重新回到文件头
>>> exec f #又执行成功
>>> f.close() #记得关闭文件
  • input(promp='') 等同于eval(raw_input(promt=''))
 
可以看出input会对输入进行eval,而raw_input只是单纯的字符串
 
利用exec来控制代码测试
#!/usr/bin/env python

def foo():
    return True

def bar():
    'bar() does not do much'
    return

foo.__doc__ = 'foo() does not do much'
#把测试代码用字符串表示 
foo.tester = """
if foo():
    print 'PASSED'
else:
    print 'FAILED'
"""

# dir()取得当前命名空间的对象列表
for eachAttr in dir():
    obj = eval(eachAttr)
    # 控制只运行函数类型 
    if isinstance(obj, type(foo)):
        if hasattr(obj, '__doc__'):
            print '\nFunction "%s" has a doc string :\n\t%s' % (eachAttr, obj.__doc__)
        if hasattr(obj, 'tester'):
            print 'Function "%s" has a tester... executin' % eachAttr
            exec obj.tester
        else:
            print 'Function "%s" has no tester... skipping' % eachAttr
    else:
         print '"%s" is not a function' % eachAttr

Python-代码对象的更多相关文章

  1. if __name__== "__main__" 的意思(作用)python代码复用

    if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog  http://www.dabu.info/if-__-name__ ...

  2. Python 代码风格

    1 原则 在开始讨论Python社区所采用的具体标准或是由其他人推荐的建议之前,考虑一些总体原则非常重要. 请记住可读性标准的目标是提升可读性.这些规则存在的目的就是为了帮助人读写代码,而不是相反. ...

  3. [转] Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  4. python代码风格-PEP8

    转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...

  5. Python代码性能优化技巧

    摘要:代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Python代码,看完一定会让你 ...

  6. 如何让你的Python代码更加pythonic ?

    pythonic如果翻译成中文的话就是很python.很+名词结构的用法在中国不少. 以下为了简略,我们用P表示pythonic的写法,NP表示non-pythonic的写法,当然此P-NP非彼P-N ...

  7. python代码风格指南:pep8 中文翻译

    摘要 本文给出主Python版本标准库的编码约定.CPython的C代码风格参见​PEP7.本文和​PEP 257 文档字符串标准改编自Guido最初的<Python Style Guide&g ...

  8. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  9. 【转】python代码风格-PEP8

    转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...

  10. Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

随机推荐

  1. JZYZOJ1530 [haoi2013]开关控制 状压 dfs 折半搜索

    http://172.20.6.3/Problem_Show.asp?id=1530 元宵节快要到了,某城市人民公园将举办一次灯展.Dr.Kong准备设计出一个奇妙的展品,他计划将编号为1到N的N(1 ...

  2. 【BFS】Tester Program

    [poj1024]Tester Program Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2760   Accepted ...

  3. 【高斯消元解xor方程组】BZOJ2466-[中山市选2009]树

    [题目大意] 给出一棵树,初始状态均为0,每反转一个节点的状态,相邻的节点(父亲或儿子)也会反转,问要使状态均为1,至少操作几次? [思路] 一场大暴雨即将来临,白昼恍如黑夜!happy! 和POJ1 ...

  4. 《深入理解Spark-核心思想与源码分析》(四)第四章存储体系

    天行健,君子以自强不息:地势坤,君子以厚德载物.——<易经> 本章导读 Spark的初始化阶段.任务提交阶段.执行阶段,始终离不开存储体系. Spark为了避免Hadoop读写磁盘的I/O ...

  5. 解决 javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair

    解决这个异常的重点就在于下载两个jar包: bcprov-ext-jdk15on-1.52 bcprov-jdk15on-1.52 传送门:https://stackoverflow.com/ques ...

  6. c#版 mqtt 3.1.1 client 实现

    c# 版 mqtt 3.1.1 client http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html 上面为 3.1.1 协议报文 一 ...

  7. FTP客户端工具

    推荐使用8UFTP.小.快.好! 8UFTP工具分为8UFTP客户端工具和 8UFTP智能扩展服务端工具,涵盖其它FTP工具所有的功能.不占内存,体积小,多线程,支持在线解压缩.界面友好,操作简单,可 ...

  8. AS3.0纯代码编写的两款loading效果

    AS3.0纯代码编写的两款loading效果 效果一 效果二 代码很简单,实现的原理一样,只不过矩形用到了Matrix类,对注册点进行了调整,效果可用于视频播放器缓冲时的loading效果,下面看代码 ...

  9. Flash&Flex大全

    官方在线帮助(没标英文的都是中文) 用于 Adobe Flash Platform 的 ActionScript 3.0 参考 更多参考使这样的链接下载离线版:http://help.adobe.co ...

  10. Google Breakpad 完全解析(二) —— Windows前台实现篇

    原创文章,转载请标明出处:Soul Apogee (http://bigasp.com),谢谢. 好,看完了如何使用breakpad,我们现在看看breakpad在Windows下到底是如何实现的呢? ...