Python核心编程读笔 13:执行环境
第14章 执行环境
一、可调用对象
python有四种可调用对象:函数、方法、类、一些类的实例
1 函数
(1)内建函数(BIF)
BIF是用c/c++写的,编译后放入python解释器,然后把它们作为第一(内建)名字空间的一部分加载进系统。这些函数在_bulitin_模块里,并作为__builtins__模块导入到解释器中
内建函数属性:
bif.__doc__ 文档字符串(或 None)
bif.__name__ 字符串类型的文档名字
bif.__self__ 设置为 None(保留给 built-in 方法)
bif.__module__ 存放 bif 定义的模块名字(或 None)
(2)用户定义的函数(UDF)
用户自定义函数属性:
udf.__doc__ 文档字符串(也可以用 udf.func_doc)
udf.__name__ 字符串类型的函数名字(也可以用 udf.func_name)
udf.func_code 字节编译的代码对象
udf.func_defaults 默认的参数元组
udf.func_globals 全局名字空间字典; 和从函数内部调用 globals(x)一样
udf.func_dict 函数属性的名字空间
udf.func_doc (见上面的 udf.__doc__)
udf.func_name (见上面的 udf.__name__)
udf.func_closure 包含了自由变量的引用的单元对象元组
2 方法
内建方法(BIM)属性:
bim.__doc__ 文档字串
bim.__name__ 字符串类型的函数名字
bim.__self__ 绑定的对象
用户自定义(UDM)属性:
udm.__doc__ 文档字符串(与 udm.im_fuc.__doc__相同)
udm.__name__ 字符串类型的方法名字(与 umd.im_func.__name__相同)
udm.__module__ 定义 udm 的模块的名字(或 none)
udm.im_class 方法相关联的类(对于绑定的方法;如果是非绑定,那么为要求 udm 的类)
udm.im_func 方法的函数对象(见 UDFs)
udm.im_self 如果绑定的话为相关联的实例,如果非绑定位为none
3 类
4 类的实例
python 给类提供了名为__call__的特别方法,该方法允许程序员创建可调用的对象(实例)。默认情况下,__call__()方法是没有实现的,这意味着大多数实例都是不可调用的。然而,如果在类定义中覆盖了这个方法,那么这个类的实例就成为可调用的了。调用这样的实例对象等同于调用__call__()方法。
实例:
>>> class C(object):
... def __call__(self, *args):
... print "I'm callable! Called with args:\n", args
...
>>> c = C()
>>> c() # instance invoked # 调用实例
I'm callable! Called with arguments:
()
>>> c(3) # invoked with 1 arg # 呼叫的时候给出一个参数
I'm callable! Called with arguments:
(3,)
>>> c(3, 'no more, no less') # invoked with 2 args # 呼叫的时候给出两个参数
I'm callable! Called with arguments:
(3, 'no more, no less')
二、代码对象
一般说来,代码对象可以作为函数或者方法调用的一部分来执行,也可用 exec 语句或内建函数eval()来执行。从整体上看,一个 python 模块的代码对象是构成该模块的全部代码。
UDF的udf.func_code属性其实就是代码对象
函数对象仅是代码对象的包装,方法则是给函数对象的包装。你可以到处看看。当研究到最底层,你会发现便是一个代码对象
三、可执行的对象声明和内建函数
callable(obj) 如果 obj 可调用,返回 True,否则返回 FALSE
compile(string,file, type) 从type类型中创建代码对象;file 是代码存放的地方(通常设为"")
eval(obj, globals=globals(), locals=locals()) 对obj进行求值,obj是已编译为代码对象的表达式,或是一个字符串表达式;可以给出全局或者/和局部的名字空间
exec obj 执行obj、单一的python语句或者语句的集合,也就是说格式是代码对象或者字符串;obj 也可以是一个文件对象(已经打开的有效 python 脚本中)
input(prompt='') 等同于 eval( raw_input(prompt=”) )
四、执行其他程序
1 执行其他python程序
(1)通过import的方式
# import1.py
print 'loaded import1'
import import2
# import2.py
print 'loaded import2'
当导入 import1 时的输出:
>>> import import1
loaded import1
loaded import2
(2)execfile()
f = open(filename, 'r')
exec f
f.close()
等价于:
execfile(filename)
(3)将模块作为脚本执行
即从 shell 或 DOS 提示符,直接把模块作为脚本来执行
2 执行其他非python程序
支持执行其他非python程序的函数都位于os模块中:
system(cmd) 执行程序 cmd(字符串),等待程序结束,返回退出代码(windows 下, 始终为 0)
fork() 创建一个和父进程并行的子进程[通常来说和 exec*()一起使用]; 返回两 次....一次给父进程一次给子进程
execl(file, arg0,arg1,...) 用参数列表 arg0, arg1 等等执行文件
execv(file, arglist) 除了使用参数向量列表,其他的和 execl()相同
execle(file, arg0,arg1,... env) 和 execl 相同,但提供了环境变量字典 env
execve(file,arglist, env) 除了带有参数向量列表,其他的和execle()相同
execlp(cmd, arg0,arg1,...) 与execl()相同,但是在用户的搜索路径下搜索完全的文件路径名
execvp(cmd, arglist) 除了带有参数向量列表,与execlp()相同
execlpe(cmd, arg0, arg1,... env) 和 execlp 相同,但提供了环境变量字典env
execvpe(cmd,arglist, env) 和 execvp 相同,但提供了环境变量字典 env
spawn*(mode, file, args[, env]) spawn*()家族在一个新的进程中执行路径,args 作为 参数,也许还有环境变量的字典 env;模式(mode)是个显示不同操作模式的魔术。
wait() 等待子进程完成[通常和 fock 和 exec*()一起使用] ○ Unix专有
waitpid(pid,options) 等待指定的子进程完成[通常和 fock 和 exec*()一起使用] ○ Unix专有
popen(cmd, mode='r',buffering=-1) 执行字符串 cmd,返回一个类文件对象作为运行程序通信句柄,默认为读取模式和默认系统缓冲
startfile(path) 用关联的应用程序执行路径 Windows专有
(1)os.system()
>>>import os
>>>result = os.system( 'cat /etc/motd' ) Linux命令
>>>import os
>>>result = os.system( 'dir' ) windows命令
(2)os.popen()
popen()函数 = 文件对象 + system()函数
>>> import os
>>> f = os.popen('uname -a')
>>> data = f.readline()
>>> f.close()
>>> print data,
Linux solo 2.2.13
六、结束执行
1 sys.exit()和SystemExit异常
当调用sys.exit()时,会引发systemExit异常。 SystemExit是唯一不看作错误的异常。 它仅仅表示要退出 python 的愿望。
2 sys.exitfunc()
sys.exitfunc()默认是不可用的,但你可以改写它以提供额外的功能。当调用了 sys.exit()并 在解释器退出之前,就会用到这个函数了。
3 os._exit( status )
功能与 sys.exit()和 sys.exitfunc()相反,根本不执行任何清理便立即退出 python。与 sys.exit()不同,状态参数是必需的。通过 sys.exit()退出是退出解释器的首选方法。
4 os.kill( pid, sig )
os 模块的 kill()函数模拟传统的 unix 函数来发送信号给进程。kill()参数是进程标识数(PID) 和你想要发送到进程的信号。发送的典型信号为SIGINT, SIGQUIT,或更彻底地,SIGKILL来使进程终结。
七、各种操作系统接口
Python核心编程读笔 13:执行环境的更多相关文章
- Python核心编程读笔 11:模块
第12章 模块 1.基本概念 模块的文件名就是模块名字.py 每个模块都定义了自己唯一的名称空间 模块的搜索路径:会被保存在 sys 模块的 sys.path 变量里 >>>sys. ...
- Python核心编程读笔 12:OOP
第13章 面向对象编程 一.基本概念 1.object类是所有类的基类,如果你的类没有继承任何其他父类,object 将作为默认的父类. 2.python创建实例时无需new: myFirstObje ...
- Python核心编程读笔 1
第一章 欢迎来到Python世界 1 Python特点: 高级的可进行系统调用的解释性语言 面向对象 可升级.扩展.移植 自动内存管理器(内存管理由Python解释器负责) 2 安装 Windows的 ...
- Python核心编程读笔 10:函数和函数式编程
第11章 函数和函数式编程 一 调用函数 1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...
- Python核心编程读笔 8: 文件和输入输出
第九章 文件和输入输出 一.文件内建函数.方法.属性 1 文件内建函数 file_object = open(file_name, access_mode='r', buffering=-1) 工厂函 ...
- Python核心编程读笔 5: python的序列
第六章 序列:字符串.列表.元组 一.序列 (1)序列类型操作符 seq[ind] 获得下标为 ind 的元素 seq[ind1:ind2] 切片操作 seq * expr 序列重复 expr 次 s ...
- Python核心编程读笔 2
第三章 python基础 一.语句和语法 \n 标准的行分隔符 \ 继续上一行 ; 将两个语句连接在一行 : 分开代码块的头和体 代码块以缩进块的形式体现 python文件以模块的形式组织 二.变量赋 ...
- Python核心编程读笔 9: 异常
第10章 异常一.异常1 检测和处理异常 (1)try-except语句 try: try_suite #监控这里的异常 except Exception[, reason]: except_suit ...
- Python核心编程读笔 7: 条件和循环
第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...
随机推荐
- ps怎样选取自己想要的图片部分(二)
上篇文章我们介绍了怎样选取所要的图形.但往往我们实际做项目的时候须要创建一个圆形图标或者椭圆形图标,这样会使得我们的图标相比矩形图标更加美观一些. 那么怎样将一个矩形图标改成圆形图标呢? 首先我们须要 ...
- C语言高速入口系列(七)
C语言高速入口系列(七) C语言指针进阶 本章引言: 在前面第5节中我们对C语言的指针进行了初步的学习理解;作为C语言的灵魂, C指针肯定没那么简单,在这一节中,我们将会对指针进行进一步的学习,比方二 ...
- 依赖注入及AOP简述(三)——依赖注入的原理
3. “依赖注入”登场 于是诸多优秀的IT工程师开始想出了更加轻量便利.更加具有可测试性和可维护性的设计模式——IoC模式.IoC,即Inversion of Control的缩写,中文里被称 ...
- 【字母树+贪心】【HDU3460】【Ancient Printer】
题目大意: 一个打印机 只有 打印,删除,a-z.操作 给你一堆队名,如何才能操作次数最少输出全部 (字典树节点数-1)*2 输入,删除操作数 字符串数 printf操作数 最长字符串的长度 最后一个 ...
- RadioButtonList选择事件onclick
<asp:RadioButtonList ID="rbtnFInvoiceType" runat="server" onclick="check ...
- 前端开发必备的Sublime 3插件
Sublime的大名已经无需我介绍了,首先先介绍如何启用插件安装功能: 打开Sublime 3,然后按 ctrl+` 或者在View → Show Console 在打开的窗口里黏贴这个网站上的代码( ...
- Equal 和==比较
Equal 和==比较 ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相当,只能用==操作符. 如果一个变 ...
- IIS应用程序池自动回收问题的有效解决办法
问题:Timer不能持续执行,如果长时间没有访问,就会被IIs自动回收.造成一些定时作业无法完成. 解决方式1:改用windows服务或是winform方式 解决方式2:在Application_En ...
- codevs1041
codevs 1041 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高 ...
- 【noip2012提高组】国王游戏
恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面. ...