内容sys模块可以让你访问解释器相关参数,比如模块搜索路径,解释器版本号等.operator模块提供了和内建操作符作用相同的函数.copy模块允许你复制对象核心模块内置模块__builtin__apply,感觉和js中的apply一样。python中的参数其实大体上只有两种形式,一个是位置参数,另一个是关键字参数。函数参数可以参考廖雪峰的函数的参数__import__import语句,其实是调用的内建的import函数。可以根据字符串动态地把moduleimport进来,有啥用呢?很多框架里面其实都用到了这个。假设你的框架里用了MVC,有个controlers目录,你就可以遍历这个目录,把定义好的名字如UserController.py,等动态地全部import进来。。而不用一个一个手动去import。reload有个注意事项:注意,当你重加载模块时,它会被重新编译,新的模块会代替模块字典里的老模块.但是,已经用原模块里的类建立的实例仍然使用的是老模块(不会被更新).同样地,使用from-import直接创建的到模块内容的引用也是不会被更新的.dir,没啥好说,看帮助文档就用dir和help。vars,这个感觉有也用。运用的好,可以极大地减少代码量。type函数,我感觉这个更多地是做类型检查。可以加强代码的健壮性。同时也增加了动态的能力。__call__使得类实现变成callable,具体实现可以参见廖雪峰的Day5–编写Web框架,这个框架可以看看,其它框架其实也是这个思路。你不能使用type函数来测试一个实例是否属于一个给定的类;所有的实例都是同样的类型!为解决这个问题,有isinstance。issubclass检查的是类型树。eval,js中也有eval,作用相同。把字符串当成脚本执行。同样都要注意安全问题,字符串可能包含恶意代码。在python中可以是删除文件。在js中可以是直接把cookie信息发送到另一个服务器。在python中,可以通过第二个参数,限定eval能使用的模块。eval处理简单的表达式,复杂的得用compile和exec函数。execfile函数,提供了一个从文件加载代码,编译代码,执行代码快捷方式。因为Python在检查局部名称空间和模块名称空间前不会检查内建函数,所以有时候你可能要显式地引用__builtin__模块.(注:就是说你定义的名字,覆盖掉了__builtin__的东西,想调用原来的东西就得显示引用__builtin__模块)exceptions模块这个我还是建议了解下,当你自定义的异常选择了恰当的父类,会显得你非常专业。该模块定义了以下标准异常:Exception是所有异常的基类.强烈建议(但不是必须)自定义的异常异常也继承这个类.SystemExit(Exception)由sys.exit函数引发.如果它在最顶层没有被try-except语句捕获,那么解释器将直接关闭而不会显示任何跟踪返回信息.StandardError(Exception)是所有内建异常的基类(除SystemExit外).KeyboardInterrupt(StandardError)在用户按下Control-C(或其他打断按键)后被引发.如果它可能会在你使用“捕获所有”的try-except语句时导致奇怪的问题.ImportError(StandardError)在Python导入模块失败时被引发.EnvironmentError作为所有解释器环境引发异常的基类.(也就是说,这些异常一般不是由于程序bug引起).IOError(EnvironmentError)用于标记I/O相关错误.OSError(EnvironmentError)用于标记os模块引起的错误.WindowsError(OSError)用于标记os模块中Windows相关错误.NameError(StandardError)在Python查找全局或局部名称失败时被引发.UnboundLocalError(NameError),当一个局部变量还没有赋值就被使用时,会引发这个异常.这个异常只有在2.0及之后的版本有;早期版本只会引发一个普通的NameError.AttributeError(StandardError),当Python寻找(或赋值)给一个实例属性,方法,模块功能或其它有效的命名失败时,会引发这个异常.SyntaxError(StandardError),当解释器在编译时遇到语法错误,这个异常就被引发.(2.0及以后版本)IndentationError(SyntaxError)在遇到非法的缩进时被引发.该异常只用于2.0及以后版本,之前版本会引发一个SyntaxError异常.(2.0及以后版本)TabError(IndentationError),当使用-tt选项检查不一致缩进时有可能被引发.该异常只用于2.0及以后版本,之前版本会引发一个SyntaxError异常.TypeError(StandardError),当给定类型的对象不支持一个操作时被引发.AssertionError(StandardError)在assert语句失败时被引发(即表达式为false时).LookupError(StandardError)作为序列或字典没有包含给定索引或键时所引发异常的基类.IndexError(LookupError),当序列对象使用给定索引数索引失败时(不存在索引对应对象)引发该异常.KeyError(LookupError)当字典对象使用给定索引索引失败时(不存在索引对应对象)引发该异常.ArithmeticError(StandardError)作为数学计算相关异常的基类.OverflowError(ArithmeticError)在操作溢出时被引发(例如当一个整数太大,导致不能符合给定类型).ZeroDivisionError(ArithmeticError),当你尝试用0除某个数时被引发.FloatingPointError(ArithmeticError),当浮点数操作失败时被引发.ValueError(StandardError),当一个参数类型正确但值不合法时被引发.(2.0及以后版本)UnicodeError(ValueError),Unicode字符串类型相关异常.只使用在2.0及以后版本.RuntimeError(StandardError),当出现运行时问题时引发,包括在限制模式下尝试访问外部内容,未知的硬件问题等等.NotImplementedError(RuntimeError),用于标记未实现的函数,或无效的方法.SystemError(StandardError),解释器内部错误.该异常值会包含更多的细节(经常会是一些深层次的东西,比如“eval_code2:NULLglobals”).这本书的作者编了5年程序都没见过这个错误.(想必是没有用raiseSystemError).MemoryError(StandardError),当解释器耗尽内存时会引发该异常.注意只有在底层内存分配抱怨时这个异常才会发生;如果是在你的旧机器上,这个异常发生之前系统会陷入混乱的内存交换中os模块封装了操作系统细节,跨平台用的。open/file处理文件listdir列出目录列表,需要注意的是并没有包含”.”(当前目录)和”..”(上级目录)两个目录。getcwd和chdir函数分别用于获得和改变当前工作目录.makedirs和removedirs函数用于创建或删除目录层。removedirs只能移除空目录。如果目录里有文件,会抛异常。(如果需要删除非空目录,你可以使用shutil模块中的rmtree函数)mkdir和rmdir函数只能处理单个目录级stat和fstat函数可以用来获取一个存在文件的信息.(在管道中文件是没有名字的,只能用fstat)chmod和utime函数修改文件的权限模式和时间属性system函数在当前进程下执行一个新命令,并等待它完成。其实system就是打开一个新进程(fork),新进程执行命令(exec),父进程等待子进程完成(wait),拿到输出结果。exec函数会使用新进程替换当前进程。基本上exec簇总是和fork在一起的。FlaskWeb开发基于Python的Web应用开发实战这本书里,巧妙地在设置环境变量后用exec函数重启应用。所有的守护进程都没有控制终端,其终端名设置为问号创建守护进程的方法很简单,先fork复制一个进程,然后把自己退出。这样子进程就成了孤儿进程。完整的经验规则是:1.首先要做的是调用umask将文件模式创建屏蔽字设置为一个已知值(通常是0)。由继承得来的文件模式创建屏蔽字可能会被设置为拒绝某些权限。2.调用fork,然后使父进程exit。这样做实现了下面几点。第一,如果该守护进程是作为一条简单的shell命令启动的,那么父进程终止会让shell认为这条命令已经执行完毕。第二,虽然子进程继承了父进程的进程组ID,但获得了一个新的进程ID,这就保证了子进程不是一个进程组的组长长进程。这是下面将要进得的setsid调用的先决条件。3.调用setsid创建一个新会话。使进程:a成为新会话的首进程b、成为一个新进程组的组长进程。c、没有控制终端4.将当前工作目录更改为根目录。从父进程处继承过来的当前工作目录可能是一个挂载的文件系统中。因为守护进程通常是在系统再引导之前是一直存在的,所以如果守护进程的当前工作目录在一个挂载文件系统中,那么该文件系统就不能被卸载。5.关闭不再需要的文件描述符。6.某些守护进程打开/dev/null使其具有文件描述符0、1、2.这样,任何一个试图读标准输入、写标准输出或标准错误的库例程都不会产生任何效果。exit在被捕获异常的情况下,并不会真的终止进程,而_exit则会。os.path处理文件名os.path模块包含了许多与平台无关的处理长文件名的函数.也就是说,你不需要处理前后斜杠,冒号等expanduser把目录中的”~”,解析成实际的用户目录。expandvars函数将文件名中的环境变量替换为对应值。walk函数会帮你找出一个目录树下的所有文件。感觉类似于find命令。至少可以很方便地利用walk实现find命令。os.listdir只列表一级目录。再往下得自己去递归。文中的DirectoryWalker并不是generator,而是因为实现了getitem方法,成为了可迭代对象。其它模块string,字符串估计是要打交道最多的模块了。用的时候,用dir(string)看下有哪些功能。平时用的更多是字符串方法。re,正则表达式语法没啥。关键是知道正达式是啥,语法反而不重要。推荐看下《精通正则表达式》,讲的很透彻。这里要吐槽下Java的正则表达式。。有次项目里居然在正则表达式这里挂了,因为匹配失败,居然迭代了几十亿次,直接导致后面的代码没机会执行(参考:),阿里还有人专门自己写了个java的正则表达式。math模块实现了许多对浮点数的数学运算函数.这些函数一般是对平台C库中同名函数的简单封装cmath模块实现复数的计算。operator模块为Python提供了一个“功能性”的标准操作符接口需要注意的是单个字符也是序列。在使用时得注意下。copy模块提供拷贝功能。分浅拷贝和深拷贝。copy.copy是浅拷贝,copy.deepcopy是深拷贝。sys模块提供了许多函数和变量来处理Python运行时环境的不同部分。在命令行脚本中用提比较多。*sys.argv,sys.path,sys.builtin_module_names,sys.modules。标准库可以多用下help和dir来获取信息。*python通过引用计数来管理的内存,引用计数可以通过sys.g