pythonlib基础库.docx
《pythonlib基础库.docx》由会员分享,可在线阅读,更多相关《pythonlib基础库.docx(17页珍藏版)》请在冰豆网上搜索。
pythonlib基础库
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(mostrecentcalllast):
File"",line1,in-toplevel-
1/0
ZeroDivisionError:
integerdivisionormodulobyzero
还有在一段交互式的代码段里,他会在下一个提示符输出前发生,而在一个python程序里,他会在程序结束的时候发生,较高级别的错误处理(即如果自己需要)可以通过自己构造一个象这样的三参数函数来处理。
8:
__displayhook__;;__excepthook__
这些对象包涵了在程序开始的时候displayhook,excepthook的原始值,他们的存在是以便当程序出错后能够重现错误的详细信息,==大概是为了存储错误信息而设立的变量吧,==
>>>printsys.__displayhook__
看来他是内置函数
9:
exc_info()
收集了当前指向的错误的错误信息,三个值的元组,返回的信息是当前线程和当前堆栈帧的细节,如果当前堆栈帧没错误,那回正在被调用的堆栈帧的信息,也就是说他的调用会一直持续到他发现错误为止。
如果至尾都没发现错误,返回的元组的三个值==None,(type,value,traceback)
如果exc_clear()被调用了,exc是exception,他会返回三个None,直到当前线程的另外一个错误产生了,或者theexecutionstackreturnstoaframewhereanotherexceptionisbeinghandled.==不懂这句==
这里还有个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,下面有介绍:
:
OnWindows9x,theencodingis``mbcs''.
OnMacOSX,theencodingis``utf-8''.
OnUnix,theencodingistheuser'spreferenceaccordingtotheresult
ofnl_langinfo(CODESET),orNoneifthenl_langinfo(CODESET)failed.
OnWindowsNT+,filenamesareUnicodenatively,sonoconversionisperformed.
getfilesystemencodingstillreturns``mbcs'',asthisisthe
encodingthatapplicationsshouldusewhentheyexplicitlywant
toconvertUnicodestringstobytestringsthatareequivalentwhenusedasfilenames.
20:
_getframe([depth])
通过这个函数可以得到一个depth深度的堆栈(已经存在的)的引用,如果depth大于这个堆栈的深度,那么抛出ValueError,depth默认是0,返回这个帧的顶层指针,===我猜的,大概应该也许可能是这样吧====
21:
getwindowsversion()
顾名思义吧
>>>sys.getwindowsversion()
(5,1,2600,2,'ServicePack1')#靠,竟然是sp1,我在上面还说我的是sp2+呢,大概我是通过
#sp1加补丁升级到sp2+相同的功能吧
这里有个列表:
VER_PLATFORM_WIN32sWin32sonWindows3.1
VER_PLATFORM_WIN32_WINDOWSWindows95/98/ME
VER_PLATFORM_WIN32_NTWindowsNT/2000/XP
VER_PLATFORM_WIN32_CEWindowsCE
22:
hexversion
>>>sys.hexversion
33817025
这是我得到的结果,不知道干什么用的,16进制版本?
?
是不是说版本用16进制数表示的啊?
再来一个:
>>>hex(sys.hexversion)
'0x20401c1'
23:
last_type;;last_value;;last_traceback
这三个怎么跑到这儿来了,干什么的?
?
这三个变量不总是存在的,当一个错误出现,在输出端也输出了却没有得到处理时他们就是那个错误的存储地了,他们最有可能用到的地方就是调试了,==你每天在IDLE里看到的红字错误就是调试了==,这里还介绍了一些东西我不知道了:
andengageinpost-mortemdebuggingwithouthavingtore-executethecommandthatcausedtheerror.(Typicaluseis"importpdb;pdb.pm()"toenterthepost-mortemdebugger;seechapter9,``ThePythonDebugger,''formoreinformation.)
>>>importpdb
>>>pdb.pm()
>
(1)?
()
(Pdb)dsf
***NameError:
name'dsf'isnotdefined
(Pdb)x=0
(Pdb)x
0
(Pdb)1/0
***ZeroDivisionError:
integerdivisionormodulobyzero
有谁知道的说两句撒~~~如果想退出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)
设置系统的配置(不知道这里的profilefunction时什么意思,也许是模拟,大概是对系统函数的调用接口进行python化的转变吧)函数,通过他可以得到系统函数python式的源代码,系统的profilefunction的调用有点类似系统的跟踪函数(参考settrace()),但是他不会调用可执行的行代码(只是调用然后返回结果,就算是已经设置了一个错误,他也会执行返回事件),这种函数是一个特殊的线程,但是不能把他当线程,因为你没办法控制他和别的线程之间联系,因此在使用多线程面前是没有意义的,另外,itsreturnvalueisnotused,因此他能简单的返回None,profile参考第10章
34:
setrecursionlimit(limit)
设置解释器递归调用时最多可以使用的堆栈的深度,这样可以阻止那些无限递归导致溢出,这个limit值时平台独立的,如果一个程序需要深度递归并且平台也支持大值的limit时你可以将limit值设置大点,但需要注意的是,如果太大了的话,会导致系统资源占尽从而崩溃。
35:
settrace(tracefunc)
设置系统的跟踪函数,他允许你在python里使用python源代码调试器,参考这章的9.2节关于python调试的'howitwork',他也是个特殊的线程,支持多线程的调试器,但必须为每个要调试的线程使用settrace()注册,
注意:
settrace()只用在调试器,profilers,coveragetools或者类似的方面,他的行为是属于运行的平台,而不是属于语言定义,所以他不一定对所有的python运行都可用。
36:
settscdump(on_flag)
不知道。
因为不能理解,VM是不是指虚拟内存?
如果on_flag=ture,除去对虚拟内存大小的限制,如果时false,就不激活这些限制,这个函数只有当你在python在被编译时加上一个参数--with-tsc才可用,想要了解这些限制的出处,请参考python源代码里的python/ceval.c
37:
stdin;;stdout;;stderr
解释器的相应的标准输入,输出和错误流的文件对象,stdin用于解释器所有的输入除了脚本,但脚本可以使用input()andraw_input(),stdout用于输出打印和表达式结果的输出,也用于输出input(prompt),raw_input(prompt)中的prompt的输出,解释器自身的提示符和几乎所有的错误消息都要使用到stderr.stdout,还有,stderr不需要被内置进文件对象:
所有的对象只要有write(sting)方法,那么他们都是可以接收输入的,(所有这些对象的改变不会影响到os模块的os.popen(),os.system(),orexec*()或者类似的函数的标准输入输出流的处理)
38:
__stdin__;;__stdout__;;__stderr__
这些对象包涵着程序开始时stdin,stdout,stderr的原始值(不知道初始值是不是更好?
),他们在程序开始到程序启动好期间起作用,他们对文件的恢复有帮助,有些被破坏的文件覆盖了的已知的文件,就可以用实际文件去恢复他。
39:
tracebacklimit
当这个变量被设为一个整数值,这个整数决定了如果一个没被处理的错误出现时,可以被打印输出的traceback信息的最大层数,默认值是1000,当被设为0或比0小的值,所有的traceback信息都被压制,只有错误信息的类型和值被打印输出。
>>>sys.tracebacklimit=0
>>>1/0
Traceback(mostrecentcalllast):
**IDLEInternalException:
ZeroDivisionError:
integerdivisionormodulobyzero
>>>sys.tracebacklimit=5
>>>1/0
Traceback(mostrecentcalllast):
File"",line1,in-toplevel-
1/0
ZeroDivisionError:
integerdivisionormodulobyzero
40:
version
'version(#build_number,build_date,build_time)[compiler]'
这个是我当前的python版本:
>>>sys.version
'2.4.1c1(#63,Mar102005,10:
36:
41)[MSCv.131032bit(Intel)]'.
这个是书册里的举的例子的python版本:
'1.5.2(#0Apr131999,10:
51:
12)[MSC32bit(Intel)]'
比较一下就知道是干什么的了
41:
api_version
解释器的C的API版本,这对于那些想调试在python和扩展模块之间的版本冲突的程序员有帮助
42:
version_info
>>>sys.version_info
(2,4,1,'candidate',1)
这是我的2.4.1版本的信息,candidate是候选的意思,也有的是'final',表示最终,
对应的意思:
主,次,微,版本级别,是否有后继的发行
43:
warnoptions
这是警告框架的一个运行细节,不要改变他的值,参考warnings模块以得到更多关于warningsframework的信息
44:
winver
在windows平台注册的python版本号,他的值通常是version字符集的前三个,在sys模块提供这个的目的是为了方便得到一些信息,改变这个值对被python使用的注册键值没有任何影响。
。
最后:
:
参考模块site:
他描述了怎么使用.pth文件去扩展sys.path
这个模块提供各种有关时间的函数,他们都是可以用的,但不是所有的函数对所有的运行平台都管用,这个模块的大部分函数名和C库相同作用的函数同名,有时候这样也许对平台的文件系统有帮助,因为在不同的平台时间的调用有点不同===这些意思大概是说各种系统对C的支持比较好,所以python里对时间的调用就用了C的调用方法,这样对跨平台有帮助===
下面做一些说明,是关于一些有关时间的统一的习惯和术语:
1:
新纪元是时间的开始,那年的一月一号0点,从那个时候开始的时间定义为0;,unix里。
新纪元是1970年,如果你想知新纪元是什么时候,导入time模块,然后调用time.gmtime(0)看看就可知道
2:
这个模块得函数不能得到新纪元之前,也不能得到未来得很长的时间,得到的时间段是决定于C库的,如unix,它的未来时间只能得到2038年。
3:
Y2K问题:
python决定于C库,所以它一般不会有千年虫问题,因为时间都被解释成从1970年开始到现在的秒数。
而调用的时候年都是4位的,如2005,那是从秒数处理过来的,因为各种函数如果接受时间参数的话都是4位的格式。
看