《Python核心知识点.docx》由会员分享,可在线阅读,更多相关《Python核心知识点.docx(36页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Python核心知识点变量无须指定类型程序员不用担忧内存管理变量名会被“回收”del语句能够直接释放资源Page -11-第四章Python对象Python对象的三个特性:身份,类型,值内建函数type():获取对象的类型None:Python 的 NULL 对象切片对象:sequence起始索引:结束索引:步进值标准类型内建函数:A cmp(objl, obj2)比拟 objl和 obj2,返回整形 i (0;=0; type(obj) 返回。切的类型str(),repr()小三者的比拟: str():生成一个对象的可读性比拟好的字符串表示,对用户友好 repr():对 Python比拟友好
2、 效果跟r即r()一样,建议不再使用type()和 isinstance(): type(obj):返回obj的类型 isinstance(obj,obj_type):判断 obj是否为 obj_type类型,返回布尔值Page -12-可变类型:列表、字典不可变类型:数字、字符串、元组不支持的类型:char或 byte:无指针:无int VS short VS long :无区别float VS double:无区别Page -13-第五章数字长整型:用大写的“L”标示(虽然也可以用小写的“I”,但不建议使用)复数: 虚数不能单独存在。必须加上0.0的实数局部 由实数+虚数两局部构成 实数跟
3、虚数局部都是浮点型 虚数局部后缀是j或 J复数属性: num. real该复数的实数局部 num. imag 该复数的虚数局部 num. conjugate ()返回该复数的共辄复数混合模式优先级(转化):complex float long int幕运算(*): 比左侧操作数的一元运算符优先级低,比右侧操作数的一元运算符优先级高。 eg: -3 * 2 = -94. 0 * -1. 0 = 0. 25位操作符:只适用于整型取反(),安位与(&),或(|),异或O ,左移(),右移()Page -14-负数当做正数的2进制补码处理num (或)N = num * (或 /)2*Nint (ob
4、j, base):返回obj数字的base进制数pow ()和* :虽然能完成相同的作用 pow():内建函数:操作符数值运算内建函数: abs (num)num的绝对值 coerce(numl, num2) 转化为同一类型,返回一个元组A divmod(numl, num2) 返回元组(numl/num2, numl%num2) pow(num 1, num2, mod=l)取numl的num2次方,假设有mod,那么对其再取余 round (fit, ndig=l)对浮点型fit进行四舍五入,保存ndig位小数仅适用于整型的内建函数: hex (num)将num转化为十六进制,并以字符串返
5、回A otc(num)将num转化为八进制,并以字符串返回 chr(num) 返回num的ASCH值,范围:0= num Python标准库中绝大局部模块都是兼容Unicode的,除了 pickle模块只支持ASCI Io Python字符串不是通过NUL或者,0,来结束的,它除了你定义的东西,没有另U的。并非调用一个方法就会返回一个值。那些可以改变对象值的可变对象的方法是没有返回值的。如:sort。,extend。等。列表跟元组是两个非常相似的序列类型,之所以要保存二者是因为在某些情况下,其中一 种类型要优于使用另一种类型。list。跟tuple。函数可以用一个列表来创立一个元组,反之亦然。
6、Page -17-第七章映射和集合类型字典是Python中唯一的映射类型。字典:dictl = name:earth7port:80for key in dictl.keys():print zkey=%s, value=%sz% key,dictl (key) 映射类型内建函数: dict.clear() 删除字典中的所有元素 dict.fromkeys(seq, val=None)返回一个新字典,seq为键,val为值 dict.get(key, default二None)返回字典中key的值,假设无此键那么返 default dict.has_key(key)是否存在key键,返回布尔值
7、 dict.itemsO返回一个包括字典中键值对元组的列表dict.keys()dict.keys()dict.keys()返回一个字典中的键的列表dict.values()返回一个包含字典中所有值的列表dict.update(dict2)将字典dict2的键值对添加到字典diet中去不允许一个键对应多个值键必须是可哈希的对象。像列表和字典这样的可变类型,由于它们不是可哈希的,所以不 能作为键集合类型: 现已成为Python的基本数据类型Page -18- 两种类型:可变集合(set)和不可变集合(frozenset) 可用set()和frozenset。来分别创立可变集合跟不可变集合适用于所
8、以集合类型的内建方法: s.issubset(t) 判断s是否是t的子集,返回布尔值 s.issuperset(t)判断s是否是t的超集,返回布尔值 s.union返回新集合,s跟t的并集 s.intersetion(t)返回新集合,s跟t的交集 s.difference(t)返回新集合,其成员是s的成员,但不是t的成员Page -19-第八章条件和循环if循环:if expressionl:exprl_tf*ue_suiteelif expression?:expr2_true_suiteelif expressions:expr3_true_suiteelse:None_of_the_ab
9、ove_suitePython不支持switch/case语句,但完全可以用if/else的结构来代替三元操作符:XifCelseY (如果条件C成立,那么结果为X,否那么为Y)while语句:while expression:suite_to_repeatfor语句:for iter_var in interable:suite_to_repeatpass语句:Python中提供 pass语句,表示不做任何事,NOP(No Operation)Page -20-目录前言4【关于Python 4【关于Python核心编程(第二版)】 5【关于本文档】5【关于作者】5【致谢】5第局部:Pytho
10、n核心6第一章欢迎来到Python世界6第二章快速入门8第三章Python基础10第四章Python对象12第五章数字14第六章序列:字符串、列表和元组16第七章映射和集合类型18第八章条件和循环20第九章文件和输入输出22第十章错误和异常23第十一章函数和函数式编程 25第十二章模块27第十三章面向对象编程29第十四章执行环境32第2局部高级主题34第十五章正那么表达式34第十六章网络编程37第十七章网络客户端编程39第十八章多线程编程40第十九章图形用户界面编程42第二十章Web编程44Page -2-def foo_func(): #空函数pass迭代器和iter()函数: 迭代器就是有
11、一个next。方法的对象 对一个对象调用iter()方法就可以得到它的迭代器列表解析:列表解析(list comps)来自函数式编程语言Haskell。它是一个非常有用、简单而 且灵活的工具,可以用来动态地创立列表。Python早就支持函数式编程特性,例如lambda、map()和filter。等lambda允许用户快速地创立只有一行的函数对象.例如:map(lambda x:x * 2, range(6)Page -21-第九章文件和输入输出文件内建函数(open。和file(): open。语法:file_object = open(file_name, access_mode=zrbuf
12、fering=-l)open()和file()函数具有完全相同的功能,一般来说,建议使用open()来读文件,在 你想说明你是处理文件对象的口寸候使用file。,例如if isinstance(f, file)文件内建方法: 输入:read。,readlines(),for eachLine in file 输出:write(),writelines() ?:没有 writeline。方法A 文件内移动:seek() 0,1,2分别代表文件开头,当前位置,文件末尾杂项操作:保存行分隔符:使用read。或者readlines()从文件中读取行时,Python并不会删除行结束符,类似 的,writ
13、e。或writelines。也不会自动的加入行结束符,这得由程序员自己完成。行分隔符和其他文件系统的差异:不同的操作系统对行结束符的规定是不同的,但Python的os模块已经替程序员解 决了这个问题,只要导入了 os模块,其属性会自动校准文件系统,设置为正确值。命令行参数: sys.argv是命令行参数的列表 len(sys.argv)是命令行参数的个数(也就是argc)Page -22-第十章错误和异常Python中常见的异常: NameError:尝试访问一个未申明的变量 ZeroDivissionError:除数为零 SyntaxError: Python解释器语法错误 IndexErr
14、or:请求的索引超出序列范围 KeyError:请求一个不存在的字典关键字 lOError:输入、输出错误 AttributeError:尝试访问未知的对象属性 Keyboardinterrupt:中断异常 BaseException:所有异常的基类检测和处理异常:try-except和 try-finally处理多个异常的时候可以用多个except,也可以用一个except,然后将异常放入一个元组 里不推荐使用空except语句else子句:try-except-else:在try范围内没有异常被检测到时,执行else子句finally子句:try-except(-else)-finally
15、:无论异常是否发生,是否捕捉,都会执行的一段代 码。raise语句:触发异常。一般语法:Page -23-raise SomeException ,args ,traceback第一个参数:SomeException:触发异常的名字第二个参数:args:可选,作为一个对象或者对象的元组传给异常第三个参数:traceback:可选,很少用断言:断言是一句必须等价于布尔真的判定,否那么将产生AssertionError (断言错误)的异 常,同时也说明是假。语法:assert expression arguments建议跟try-except连用,将断言语句放在try中sys模块中的exc_inf
16、o()函数,通过其提供的一个3元组信息同样可以捕捉异常信息、:sys.exc_info()得到的元组:exjtype:异常类exc_va I u e:异常类的实例exjtraceback:跟踪记录对象不过,在未来的python中,这三个对象将被逐步停用,并最终移除。Page -24-第十一章函数和函数式编程创立函数:def function_name(arguments):“function_documentation_stringfunction_body_suite前向引用:Python也不允许在函数未声明之前,对其进行引用或调用。Python支持在外部函数的定义体内创立内嵌函数函数中使用
17、默认参数会使程序的健壮性上升到极高的级别。Python不是也不大可能会成为一种函数式编程语言,但是它支持许多有价值的函数式编程 语言构建。函数式编程的内建函数:Filter(func, seq):调用一个布尔函数func来迭代遍历每个seq中的元素;返回一个使func返回值为true的元素的序列Map(func/ seql,sql2.):将函数func作用于给定的序列seq中的每个元素,并用一个列表来提供返 回值Reduce(func, seq):将一个二元函数作用于seq序列的元素,每次携带一对(先前的结果以及 下一个序列元素),连续地将现有的结果和下一个值作用,最后减少我们的序列为 一个单
18、一的返回值Page -25-变量作用域:全局变量除非被删除,否那么它们存活到脚本运行结束,且对所有的函数都是可访问 的。为了明确地引用一个已命名的全局变量,必须使用global语句。Page -26-第十二章模块模块支持从逻辑上组织Python代码。与其他可以导入类(class)的语言不同,Python带入的是模块或模块属性。语法:import modulelLmoduleZb,.from module import namel*,name2*,.+from module import name as shortnamefrom module import *import语句的模块顺序: Py
19、thon标准库模块 Python第三方模块 应用程序自定义模块导入(import)和加载(load):一个模块之恩那个被加载一次,无论它被导入多少次。模块内建函数:_import_()函数:_import_(moduleameLglobalsLIocalsfJromlist)globals()和locals。分别返回调用者全局和局部名称空间的字典。reload。重新导入一个已经导入的模块:reload(module)使用reload。时候必须是全部导入,而不是使用from-importoPage -27-禁止模块的某个属性导入,可以在该属性名称前加一个下划线:import foo._barPa
20、ge -28-第十三章面向对象编程在Python中,面向对象编程主要有两个主题,就是类和类实例。利用class关键字创立一个类:class MyNewObjectType(bases):#bases参数用于继承的父类,define MyNewObjectType classClass_suiteobject是“所有类之母”,假设未指明父类,贝IJ object将作为默认的父类。创立一个实例的语法:(注意:没有使用new, Python根本就没有new这个关键字)myFirstObject = MyNewObjectType()添加类方法:class MyDataWithMethod(objec
21、t):#定义类def printFoo(self):#定义方法print You invoked printFoo()?你可能注意到self参数,它在所有的方法声明中都存在。并且必须是第一个参数。这个参 数代表实例对象本身,当你调用方法的时候由解释器悄悄地传递给方法,而不需要你自己 传递selfo_init_()方法:类似于一个构造器,但不能说是一个构造器(因为Python没有使用 new),它在创立一个新的对象时被调用,完成一个初始化工作。Page -29-类、属性和方法的命名方式:类:通常大写字母打头。这是标准惯例。有助于识别类。属性:小写字母打头+驼峰,使用名词作为名字。方法:小写字母打
22、头+驼峰,使用谓词作为名字。在Python中,声明与定义类是没有什么区别的,因为它们是同时进行的,定义(类体) 紧跟在声明(含class关键字的头行)和可选(但总是推荐)的文档字符串后面。Python不支持纯虚函数(如C+)或抽象方法(如Java)。Python严格要求,没有实例,方法是不能被调用的。方法必须绑定(到一个实例)才能被 直接调用。dir(class_name):返回类对象的属性的一个名字列表class_name._diet_:返回的是一个字典,key是属性名,value是数据值_init_()方法不应该返回任何对象,即,它应该返回None,否那么将产生TypeErroro实例属性
23、VS类属性:类属性跟实例无关。这些值像静态成员那样被引用,即使在屡次实例化中调用类, 类属性的值都不会改变。子类可以通过继承覆盖父类的方法。类似,如果在子类中覆盖了了_init_()方法,那么基 类的_init_()就不会被自动调用了。同C+一样,Python支持多继承。但要处理好两个方面:Page -30-第二十一章数据库编程48第二十二章扩展 Python50第二十三章其他话题51Page -3- 要找到合适的属性重写方法时,如何调用对应父类以“发挥他们的作用”,同时,在子类中处理好自 己的义务vars()内建函数与dir()相似,知识给定的对象都必须有一个_diet_属性。vars()返
24、回一个字 典,包含了对象存储于其_dict_中的属性(键)和值。Page -31-第十四章执行环境Python有三种不同类型的函数对象。分别是: 内建函数(BIF) : C/C+写的,编译过后放到Python解释器当中的。 用户定义的函数(UDF) lambda表达式 compile(): 它允许程序员在运行时迅速生成代码对象,然后就可以用exec语句或者内建函数 eval()来执行这些代码或者对它们进行求值。 compile(string, file, type)这三个参数都是必须的。 第一个参数:string:要编译的Python代码第二个参数:file:虽然是必须的,但通常被置为空串第三
25、个参数:type:字符串,用来说明代码的类型。有三个可能值:eval:可求值的表达式(和eval()连用)single7:单一可执行语句(和exec连用)exec:可执行语句组(和exec连用)Egl:eval_code = compile(z100+ 200-eval)eval(eval_code)300Eg2:single_code = compile(zprint “hello-single)exec single_codeHelloPage -32-用compile。预编译重复代码有助于改善性能,因为在调用时不必经过字节编译处理。exec obj :接受对象(obj)可以是原始的字符串
26、,也可以是有效的Python文件。一旦执行完毕,继续对exec的调用就会失败,因为obj已经到了EOF了,假设想继续调用exec,那么必须对obj调用seek (0)到文件开头。tell()方法:告知当前在文件的何处os.path.getsize():告知对象文件有多大结束执行: sys.exit() and SystemExit sys.exitfunc() os._exit(status):跟以上两种不同,它不执行任何清理就直接退出Python解释器。 且status参数是必须的。Page -33-第2局部高级主题第十五章正那么表达式Python通过标准库的re模块来支持正那么表达式(RE
27、)。搜索and匹配:“模式匹配(patten-mactching) ” 搜索(searching):在字符串任意局部中搜索匹配的模式匹配(matching):判断一个字符串能否从起始处全部或局部的匹配某个模式正那么表达式中常见的符号和字符记号说明举例rel re2匹配rel或者re2foo bar匹配任意字符串(换行符除外)b. b匹配字符串的开始Dear$匹配字符串的结尾/bin/*sh$*匹配前面出现的正那么表达式零次或屡次LA-Za-zO-9J+匹配前面出现的正那么表达式一次或屡次La-zJ+. com9 *匹配前面出现的正那么表达式零次或一次goo?N匹配前面出现的正那么表达式N次0-
28、9 3M, Nr _i _匹配重复出现M到N次的正那么表达式L0-9J (5,9 1r i匹配字符组中出现的任意字符aeiouLx-yJ匹配从字符x到y的任意一个字符0-9,a-z八1不匹配此子付集中的任息字付L aeioujPage -34-cJ匹配任何数字,和0-9一样,D是d的反义datad. txtw匹配任何数字字母字符,和A-Za-zU-9 一样A-Za-zJw+s匹配任何空白字符,和ntrvi一样Otstheb匹配单词边界bThebA(Z)匹配字符串的起始(结束)ADear反斜杠()表示对特殊字符进行转译re模块:核心函数和方法函数/方法描述模块的函数compile (patter
29、n)对正那么表达式模式pattern进行编译re模块的函数和regex对象的方法match (pattern, string)search(pattern, string)用pattern去匹配string ,成功返回对象,否那么返回None在string中去搜索pattem第一次出现,结果同上findall (pattern, string)在string中搜素pattern非重复出现,返回列表tinditer (pattern, string)功能向tindall,但返回的是一个迭代器split (pattern, string)用pattern中的分隔符把string割成一个列表sub
30、(pattern,repl, string)把string中所有pattern的地方替换为repl匹配对象的方法group (num=0)返回全部匹配对象(或指定编号是num的子组)groupsU返回一个包含全部匹配的子组的元组r, sring,:用于忽略string中的所有特殊字符Page -35-正那么表达式本身默认是贪心的,解决方法就是用“非贪婪”操作符“?”。这个操作符可 以用在“*”、或者“? ”的后面,它的作用是要求正那么表达式引擎匹配的字符越少 越好。Page -36-第十六章网络编程客户端/服务器架构客户端/服务器网络编程:在完成服务之前,服务器必需要先完成一些设置。先要创立一
31、个通讯端点,让服务 器能够“监听”请求。当服务器准备好之后,要通知客户端,否那么客户端不会提出请求。 客户端比拟简单,只要创立一个通信端点,建立到服务器的连接,然后提出请求。一旦请 求处理完成,客户端收到了结果,通信就完成了。套接字:通信端点 套接字是一种具有“通信端点”概念的计算机网络数据结构。 网络化的应用程序在开始任何通讯前都必需创立套接字。没有它将没方法通信。 套接字有两种,分别是基于文件型的和基于网络型的。 AF_UNIX: 地址家族:UNIX”,基于文件 AFJNET: 地址家族:Internet”,基于网络 Python只支持 AF_UNIX, AFJNET和 AF_NETLIN
32、K家族面向连接/面向无连接: 面向连接:“虚电路”或者“流套接字”,TCP,套接字类型为SOCK_STREAM 面向无连接:UDP,套接字类型为SOCK_DGRAM(datagram数据报)创立套接字语法:from socket import *TCP套接字:tcpSock = socket(AFJNET, SOCK_STREAM)Page -37-UDP套接字:udpSock = socket(AFJNET, SOCK_DGRAM)套接字对象的常用函数Page -38-函数描述服务器端套接字函数s.bmd(addr)绑定地址addr(主机号,端口号)到套接字s.listen(num)开始TC
33、P监听,最多允许num个连接进来s.accept()被动接受TC咯户端连接,(阻塞式)等待连接的到来客户端套接字函数s.connect!)主动初始化TCP服务器连接s.connect_ex()Connect。函数的扩展版本,出错时返回出错代码,而不是异常公共用途的套接字画数s.recv()接收TCP数据s.send()发送TCP数据s.sendall()完整发送TCP数据s.recvfrom()接收UDP数据s.sendto()发送UDP数据s.close()关闭套接字第十七章网络客户端编程把因特网比作是一个数据交换中心,数据交换的参与者是一个服务提供者和一个服务的使 用者,有人把它比作“生产
34、者-消费者”,一般是一个生产者对多个消费者。文件传输网际协议: FTP:文件传输协议(File Transfer Protocol) UUCP: Unix-to-Unix复制协议(Unix-to-UnixCopy Protocol) :超文本传输协议(HypertextTransferProtocol) rcp/scp/rsync: UnixT的远程文件复制指令一般编程步骤: 连接到服务器 登陆(如果需要的话) 发出服务请求(有可能有返回信息) 退出Python和 FTP: from ftplib import FTPPython和 NNTP: from nntplib import NNTP
35、Python和 SMTP: from smtplib import SMTP对于Python中的FTP、NNTP、SMTP客户端编程的“API”,此核心笔记不予累赘,请请阅 相关文档。Page -39-第十八章多线程编程Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。虽然Python解释器中可以“运行”多个程序,但在任意时刻,只有一个线程在解 释器中运行。与单个CPU的多线程原理是一样的。对Python虚拟机的访问由全局解释器锁(GIL)来控制的,也正是这个锁保证了同 一时刻只有一个线程在运行。不建议使用thread模块,而推荐使用threading模块,原因: Thre
36、ad模块不支持守护进程。在主线程退出的时候,所有他其他线程没有被清除就退出了Threading模块支持守护进程。能保证所有“重要的”子线程都退出后,进程才会结束 Threading模块更为先进,对线程的支持更为完善Thread模块中的属性可能与 threading出现冲突低级别的Thread模块的同步原语只有一个,而Threading那么有很多time.sleep(secs):睡眠多长时间,secs单位秒(不是毫秒)start_new_thread(function, args keargs=None)产生一个新的线程,在新线程中用指定的参 数和可选的kwargs来调用这个函数Threadin
37、g的Thread类是我们主要的运行对象。它有很多Thread模块中没有的函数。函数描述start()开始线程的执行run()定义线程的功能的函数(一般会被子类重写)Page -40-Page -41-join(timeout=None)程序挂起直到线程结束;给了 timeout,那么最多阻塞timeout秒getName()返回线程的名字setName(name)设置线程的名字isAlive()布尔标志,标示这个线程是否还在运行中isDaemon()返回线程的daemon标志setDaemon(daemonic): 注:thread.start。前调片巴线程的daemon标志设为daemoni
38、c (一定要在start。前调用) thread.setDaemon任rue)表小这个线程“不重要第十九章图形用户界面编程GUI: graphical user interfacePython的默认GUI工具集是TK,我们可以通过Python接口 Tkinter来使用Tk。import Tkinter先测试一下系统有没有开启Tkinter。创立GUI程序的五个基本步骤:1 . Import Tkinter2 .创立顶层窗口对象容纳你的GUI: top= Tkinter.Tk()3 .在top中创立所有的GUI模块4 .将3中的GUI模块与底层代码相连接5 .进入主事件循环A Tkinter e
39、xample:Hello world!”:from Tkinter import *#导入 Tkintertop = Tk()#顶层窗口label = Label(top, text=Hello world!) #创立模块label.pack()#装载连接mainloop()#主事件循环运行截图:Page -42-Hello world!Python拥有大量的图形工具集,其中4种比拟流行的工具集: Tix (Tk Interface extensions)Pmw (Python MegaWidgets的Tkinter扩展)wxPython (wxWidgets的 Python绑定)PyGTK
40、(GTK+的 Python绑定)其中Tix模块包含在Python标准库中,其它工具集是第三方的,必须自己下载。Learn more about Python GUI:Page -43-第二十章Web编程urlparse 模块:Urlparse 功能描述Urlparse(urlstr/defProtSch=None,allowF rag=None将urlstr解析成各个部件defProtSch为URL协议,allowFrag为决定是否允许URL零部件Urlunparse(urltup)将URL数据的一个元组反解析成一个URL字符串Urljoin(baseurl,newurl,allowFrag=
41、None )将URL基部件baseurl和newurl拼合成个兀整的URLUrllib 模块:Urllib模块提供了所有你需要的功能,它提供了一个高级的 Web交流库。其特殊功 能在于利用各种协议( 、FTP等)从网络上下载数据。urllib.open()语法:urlopen(urlstr, postQueryData=None)作用:翻开urlstr所指向的 URL结果:成功那么返回一个文件类型对象urllib.urlretrieve()语法:urlretrieve(urlstr, localfile=None, downloadSta-tusHook=None)作用:将urlstr定位到的
42、整个HTML文件下载到本地硬盘结果:返回一个二元组(filename,mine_hdrs)本地文件名、MIME文件头(以上是两个urllib模块核心函数中特别常用的两个函数,故为大家列了出来,望学习时 多加关注,另外对于更为复杂的URL翻开问题可用urllib2模块进行处理)Python的基本 Web客户端一般用于在 Web上查询或下载文件。而其高级Web客户端可Page -44-以在internet上完成基于不同目的的所有和下载页面,包括: 为Google和Yahoo的搜索引擎建索引 脱机浏览一将文档下载到本地,重新设定超链接,为本地浏览器创立镜像 下载并保持历史记录或框架 Web页的缓存,
43、节省再次访问Web站点的下载时间高级Web客户端的一个例子就是“网络爬虫”(也称蜘蛛或机器人),与正那么表达式的 完美结合使用,使你在internet上想“爬”什么就“爬”什么。CGI:帮助Web服务器处理客户端数据Web服务器接收到表单反应,与外部应用程序交互,收到并返回新的生成的HTML页面都发生在Web服务器的CGI (标准网关接口,Common Gateway Interface)接口上。CGI其实只是一个适用于小型 Web网站开发的工具。FieldStorge类:Python CGI脚本开始时被实例化,包含一个类似字典的对象,键一表单栏 目的名字,值一栏目相应的数据。建立Python自带的 Web服务器:命令:$ Python -m CGI Server端口: 8000目录:在目录下手工建立Cgi-bin存放.py CGI脚本访问: :/localhost:8000/ex.htmlPage -45-SJ Administrator C:Windowssystem32cmd.exe python -m CGI ServerMicrosoft Windows Uersion 6.0.6001Copyright 2006 Microsoft Corporation. All rights
限制150内