返回列表 发帖

***python类中部分函数说明***

sys这个模块提供了一些能被解释起支持使用的变量和一些函数,这些函数与解释器能很好的结合,他们都是有用的。 1:argv 传递给python脚本的命令行参数列表,argv[0]是脚本的名字(不管他是一个路径全名或不是),如果使用了 -c 参数选项,argv[0]会被设置为字符串';-c';,如果没有脚本名传递给python解释器,argv[0]的长度为0。 2:byteorder 本地字节规则的指示器,big-endian平台的值是';big';,little-endian平台的值是';little';,我猜大概意思是值,有的系统读取字节的时候从高位读,有的从低位开始读,所以就出现了这个变量。 3:builtin_module_names 一个字符串的元组,这些字符串代表着所有被编译进解释器的模块的名字(这些信息通过别的途径是不能得到的,--modules.keys()只会得到所有导入的模块的名字的列表而已) 4:copyright 不用解释了吧,但他也是个量,里面记录着一些版权相关的冬冬 5:dllhandle 一个整数能代表python对于windows平台的DLL的操纵==不懂。。== 6:displayhook(value) 如果value非空,这个函数会把他输出到sys.stdout,并且将他保存进__builtin__._,先开始有点不懂,后来看到';_';就明白了,他是指在python的交互式解释器里,';_';代表上次你输入得到的结果,hook是钩子的意思,将上次的结果钩过来,和~~,原来他不但是内置的,而且他的真正位置原来是sys模块的,和~~ 7:excepthook(type,value,traceback) 这也是个钩子,用来钩出当出现错误时,代表错误的三个属性。即:错误的类,错误的实体对象和trackback对象,比如说: >>> 1/0 Traceback (most recent call last): File "", line 1, in -toplevel- 1/0 ZeroDivisionError: integer division or modulo by zero 还有在一段交互式的代码段里,他会在下一个提示符输出前发生,而在一个python程序里,他会在程序结束的时候发生,较高级别的错误处理(即如果自己需要)可以通过自己构造一个象这样的三参数函数来处理。 8:__displayhook__;;__excepthook__ 这些对象包涵了在程序开始的时候displayhook,excepthook的原始值,他们的存在是以便当程序出错后能够重现错误的详细信息,==大概是为了存储错误信息而设立的变量吧,== >>> print sys.__displayhook__ 看来他是内置函数 9:exc_info() 收集了当前指向的错误的错误信息,三个值的元组,返回的信息是当前线程和当前堆栈帧的细节,如果当前堆栈帧没错误,那回正在被调用的堆栈帧的信息,也就是说他的调用会一直持续到他发现错误为止。 如果至尾都没发现错误,返回的元组的三个值==None,(type,value,traceback) 如果exc_clear()被调用了,exc是exception,他会返回三个None,直到当前线程的另外一个错误产生了,或者the execution stack returns to a frame where another exception is being handled. ==不懂这句== 这里还有个warning:通过函数将traceback的返回值赋给本地的一个变量想操纵错误信息会引起递归调用,==大概是无限的吧==,这会阻止这个函数调用其他的变量,或者会阻止败类收集器收集败类,==这样内存大概不能得到释放吧==,所以这里有个建议:因为大多数函数都不会用到traceback,所以最好的办法是使用那些想exctype,value = sys.exc.info()[:2]来导出前两个信息,如果确实需要用到traceback,那么你最好在使用过后删除他(最好是用:try...finally),或者调用exc_info()的时候不用这个函数来操作exception。 这里还有个NOTE:从2.2版开始,象这些无限循环会自动被败类收集器回收的,所以你所调用的这样得到函数会得不到你想要的那些功能,但能避免则避免之最好·~ 10:exc_clear() 这个函数是用来清除当前线程所出现的当前的或最近的错误信息的,调用后exception的三个信息当然是None了,但当调用过后再出现错误,他就管不到了, 这个函数通常使用的很少,这些很少的情况自己感兴趣可以看看 11:exc_type;;exc_value;;exc_traceback 这三个就是上面提到的那三个错误信息的参数了,需要注意的是,因为他们是全局变量,所以他们不是专门属于哪个线程的,在多线程的程序里要注意 安全 拉。。如果没有如何错误被操纵,exc_type是None,其他两个没有定义 12:exec_prefix 是一个字符串,内容是平台的python文件安装的位置,默认的是';/usr/local';==大概是对linux系统而言的吧==,他可以在安装python的时候设置,configure脚本里添上--exec-prefix参数,具体点,所有的configuration文件(如:pyconfig.h头文件)都在这个目录下:exec_prefix + ';/lib/pythonversion/config';,而共享库模块在:exec_prefix + ';/lib/pythonversion/lib-dynload';下,此处的version等同于version[:3] 13:executable 一个字符串,给出可以供python解释器执行的二进制文件的名字,二进制代码在哪个系统中都是可执行的, 14:exit([arg]) 从python中退出,其实就是丢出SystemExit错误,然后清除一切,不过try...finally块里的finally还是要执行,然后才退出,所以在这个块里可以截获exit,===这里我不知道在finally块里截获还是在外层的块里就可以截获====可选参数arg可以是整数,标志exit的状态(默认的是0),也可以是其他对象,如果是整数0表示正常中止,如果是非0的,表示异常中止,大部分系统要求他的值在0-127之间,如果是没定义的冬冬,将会导致其他的结果,有些系统有不同的方式去定义exit命令,但是这些都是不怎么流行的,也就是不被人使用的;Unix程序一般使用2表示命令行语法错误,1表示所有的其他错误。。如果其他类型的对象作为arg。None等同于0,其他的会在标准输出终端(sys.stderr)输出,并且exit的arg置为1,特别的,当一个error产生时,sys.exit("错误信息")是一个快速退出程序的方法。 15:exitfunc 这个值没有被sys模块确切的定义,但是可以被你自己或者由一个程序设定,用来在程序退出的时候作一些收尾动作,当设置的时候要注意,他必须是一个无参函数,这个函数将在结束解释器的时候调用,而且也只能有一个这样的函数,如果想要引用多个函数,最好使用anexit模块,不然会中止不给执行。 注意:这个函数只有在程序退出的时候,或者python解释器产生了一个致命的内部错误,再或者当os.exit()被调用的时候才被执行。 16:getcheckinterval 返回由 setcheckinterval()设置的值,看下面的set.. 17:getdefaultencoding() 返回当前你所用的默认的字符编码格式, >>> sys.getdefaultencoding() ';ascii'; 我默认用的是ascii 18:getdlopenflags() 对unix有用,返回调用dlopen()得到的当前flags值,flag常量在dl和DLFCN模块中有定义, 19:getfilesystemencoding() >>> sys.getfilesystemencoding() ';mbcs'; #windowsxpsp2+得系统 返回将Unicode文件名转换成系统文件名的编码的名字,值取决于系统,如果你的系统用的是Unicode,他的值是None,下面有介绍:: On Windows 9x, the encoding is ``mbcs';';. On Mac OS X, the encoding is ``utf-8';';. On Unix, the encoding is the user';s preference according to the result of nl_langinfo(CODESET), or None if the nl_langinfo(CODESET) failed. On Windows NT+, file names are Unicode natively, so no conversion is performed. getfilesystemencoding still returns ``mbcs';';, as this is the encoding that applications should use when they explicitly want to convert Unicode strings to byte strings that are equivalent when used as file names. 20:_getframe([depth]) 通过这个函数可以得到一个depth深度的堆栈(已经存在的)的引用,如果depth大于这个堆栈的深度,那么抛出ValueError,depth默认是0,返回这个帧的顶层指针,===我猜的,大概应该也许可能是这样吧==== 21:getwindowsversion() 顾名思义吧 >>> sys.getwindowsversion() (5, 1, 2600, 2, ';Service Pack 1';)#靠,竟然是sp1,我在上面还说我的是sp2+呢,大概我是通过 #sp1加补丁升级到sp2+相同的功能吧 这里有个列表: VER_PLATFORM_WIN32s Win32s on Windows 3.1 VER_PLATFORM_WIN32_WINDOWS Windows 95/98/ME VER_PLATFORM_WIN32_NT Windows NT/2000/XP VER_PLATFORM_WIN32_CE Windows CE 22:hexversion >>> sys.hexversion 33817025 这是我得到的结果,不知道干什么用的,16进制版本??是不是说版本用16进制数表示的啊?再来一个: >>> hex(sys.hexversion) ';0x20401c1'; 23:last_type;;last_value;;last_traceback 这三个怎么跑到这儿来了,干什么的?? 这三个变量不总是存在的,当一个错误出现,在输出端也输出了却没有得到处理时他们就是那个错误的存储地了,他们最有可能用到的地方就是调试了,==你每天在IDLE里看到的红字错误就是调试了==,这里还介绍了一些东西我不知道了: and engage in post-mortem debugging without having to re-execute the command that caused the error. (Typical use is "import pdb; pdb.pm()" to enter the post-mortem debugger; see chapter 9, ``The Python Debugger,';'; for more information.) >>> import pdb >>> pdb.pm() > (1)?() (Pdb) dsf *** NameError: name ';dsf'; is not defined (Pdb) x=0 (Pdb) x 0 (Pdb) 1/0 *** ZeroDivisionError: integer division or modulo by zero 有谁知道的说两句撒~~~如果想退出 ctl+D拉 24:maxint;;maxunicode >>> sys.maxint 2147483647 >>> sys.maxunicode 65535 这里就不介绍了 25:modules 是个字典,里面是映射的是已经导入的模块的名字和他的路径,这个对重载模块有帮助,注意:从这个字典里移除模块不同于从相应模块对象里调用reload(),==也许翻译的不对== 26:path 一个链表,详细的描述了搜索模块的路径,被环境变量PYTHONPATH初始化,默认的增加一个的安装路径。 当程序开始进行初始化的时候,这个链表的第一项path[0],是包涵调用程序的解释器的脚本的文件路径,如果脚本路径不可用(如:解释器交互地调用,或者脚本从标准输入端读取),path[0]是一个空字符串,他告诉python首先在当前文件夹去寻找模块,需要注意的是脚本路径先入口路径插入PYTHONPATH==此处不懂== 任何程序可以随意修改这个链表以达到自己的目的,2.3有修改,Unicode字符串不再做忽略处理 27:platform 一个字符串标志表示系统平台的标志,例如:';sunos5';,';linux1';,这个信息可以用来指导你该添加些特定平台的构件, 28:prefix 一个字符串给出特定平台下,python被安装的路径前缀,默认的是';/user/local';,这个可以在安装python的时候加上 --prifix参数来配置脚本,python模块库的主收藏夹是 prefix+';/lib/pythonversion';,而平台的头文件被存在 prefix+';include/pythonversion';这里的version等于version[:3] 29:ps1;;ps2 他们是字符串,一个是主提示符,一个是次提示符,这些只在解释器交互模式下才能起作用,他们的默认值是';>>>'; and ';...';,但是在IDLE下好像不起作用,在xp的伪DOS下运行python会立即得到效果,总之通过他们可以修改提示符的显示 30:setcheckinterval(interval) 用来设置解释器的“检测时间间隔”,这个整数值决定了解释器检测周期性的事情如线程,信号等的频率,默认的是100,意思是指他会在每100个python虚拟指令周期进行检测,加大数值可能会加长程序使用线程的时间,设为<=0的数的话,他会在每个可用的指令周期进行检测 31:setdefaultencoding(name) 用来设置当前默认的字符编码,如果name和任何一个可用的编码都不匹配,抛出LookupError,这个函数只会被site模块的sitecustomize使用,一旦别site模块使用了,他会从sys模块移除 32:setdlopenflags(n) 设置flags(被dlopen( )调用),例如当解释器导入外部模块时。对于其他情况:调用sys.setdlopenflags(0),当导入模块时可以懒散的解析符号,==这里不懂,按字面翻译的===,调用sys.setdlopenflags(dl.RTLD_NOW|dl.RTLD_GLOBAL)可以跨模块共享符号,这里的n可以从dl模块得到帮助,或者从DLFCN模块得到帮助,如果DLFCN不可用,他可以使用h2py脚本从/usr/include/dlfcn.h产生,对unix可用 33:setprofile(profilefunc) 设置系统的配置(不知道这里的profile function时什么意思,也许是模拟,大概是对系统函数的调用接口进行python化的转变吧)函数,通过他可以得到系统函数python式的源代码,系统的profile function的调用有点类似系统的跟踪函数(参考 settrace()),但是他不会调用可执行的行代码(只是调用然后返回结果,就算是已经设置了一个错误,他也会执行返回事件),这种函数是一个特殊的线程,但是不能把他当线程,因为你没办法控制他和别的线程之间联系,因此在使用多线程面前是没有意义的,另外,its return value is not used,因此他能简单的返回None,profile参考第10章 34:setrecursionlimit(limit) 设置解释器递归调用时最多可以使用的堆栈的深度,这样可以阻止那些无限递归导致溢出,这个limit值时平台的,如果一个程序需要深度递归并且平台也支持大值的limit时你可以将limit值设置大点,但需要注意的是,如果太大了的话,会导致系统资源占尽从而崩溃。

***python类中部分函数说明***

OHOH....不太懂..先复制下在,回去慢慢看。.哈哈。.

TOP

返回列表 回复 发帖