win系统】PYTHON开发的软件,WIN系统中文,提示非法访问?

2020-06-07 08:32发布

PYTHON开发的软件,在输出PRINT PREVIEW时,在WIN系统中文下提示非法访问,系统切换成英文正常使用,问题出在哪里

PYTHON开发的软件,在输出PRINT PREVIEW时,在WIN系统中文下提示非法访问,系统切换成英文正常使用,问题出在哪里

1条回答
小红
2楼 · 2020-07-16 11:34



注:本笔记基于python2.6而编辑,尽量的偏向3.x的语法Python的特色 1.简单 2.易学 3.免费、开源 4.高层语言:封装内存管理等 5.可移植性:程序如果避免使用依赖于系统的特性,那么无需修改就可以在任何平台上运行 6.解释性:直接从源代码运行程序,不再需要担心如何编译程序,使得程序更加易于移植。 7.面向对象:支持面向过程的编程也支持面向对象的编程。 8.可扩展性:需要保密或者高效的代码,可以用C或C++编写,然后在Python程序中使用它们。 9.可嵌入性:可以把Python嵌入C/C++程序,从而向你的程序用户提供脚本功能。 10.丰富的库:包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、   电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。   除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。 11.概括:Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。 12.规范的代码:Python采用强制缩进的方式使得代码具有极佳的可读性。Python下载地址  http://www.python.org/download/Python安装:  windows时,运行安装文件之后,还需要配置环境变量,在环境变量的“Path”后面加上英文的分号及python安装目录  如:“;C:\promg\python2.6”  不配置环境变量的话,没法在命令行直接使用python有两种使用Python运行你的程序的方式  1.使用交互式的带提示符的解释器   直接双击运行“python.exe”,在里面输入内容,如:print'haha...'  2.使用源文件   在Python的安装目录下,建一个批处理(test.bat),写入:   @echooff   python.exetest.py   pause   而“test.py”里面的内容是需要执行的程序Python命令行选项  选项   作用  -ccmd  在命令行直接执行python代码。如python-c'print"helloworld"'。  -d    脚本编译后从解释器产生调试信息。同PYTHONDEBUG=1。  -E    忽略环境变量。  -h    显示python命令行选项帮助信息。  -i    脚本执行后马上进入交互命令行模式。同PYTHONINSPECT=1。  -O    在执行前对解释器产生的字节码进行优化。同PYTHONOPTIMIZE=1。  -OO   在执行前对解释器产生的字节码进行优化,并删除优化代码中的嵌入式文档字符串。  -Qarg  除法规则选项,-Qold(default),-Qwarn,-Qwarnall,-Qnew。  -S    解释器不自动导入site.py模块。  -t    当脚本的tab缩排格式不一致时产生警告。  -u    不缓冲stdin、stdout和stderr,默认是缓冲的。同PYTHONUNBUFFERED=1。  -v    产生每个模块的信息。如果两个-v选项,则产生更详细的信息。同PYTHONVERBOSE=x。  -V    显示Python的版本信息。  -Warg  出错信息控制。(argisaction:message:category:module:lineno)  -x    忽略源文件的首行。要在多平台上执行脚本时有用。  file   执行file里的代码。  -    从stdin里读取执行代码。easy_install  这是个很常用的python安装工具  可以直接安装ez_setup.py脚本(下载网址:http://peak.telecommunity.com/dist/ez_setup.py):    pythonez_setup.py  windows下的使用:   安装:    下载:http://peak.telecommunity.com/dist/ez_setup.py    执行:pythonez_setup.py   使用:    easy_install.exe-U%modal% #%modal%是模块名  linux下:   安装:    sudoapt-getinstallpython-setuptools   或者:    wget-qhttp://peak.telecommunity.com/dist/ez_setup.py    sudopythonez_setup.py   使用:    sudoeasy_install模块名    安装完后,最好确保easy_install所在目录已经被加到PATH环境变量里:    Windows:C:\Python25\Scripts    Linux:/usr/local/bin  不能使用easy_install的特殊情况:    a、安装默认版本的MySQL-python会报错,需要指定版本如下:easy_install"MySQL-python==1.2.2"    b、有些包直接easy_install会失败,需要自行下载安装:      wxpython,pil要下载exe安装程序      robotide因为在pypi上找不到,要下载后再easy_install  通过easy_install安装软件,相关安装信息会保存到easy-install.pth文件里,路径类似如下形式:  Windows:C:\Python25\Lib\site-packages\easy-install.pth  Linux:/usr/local/lib/python25/site-packages/easy-install.pth  如果想删除通过easy_install安装的软件包,比如说:MySQL-python,可以执行命令:    easy_install-mMySQL-python  此操作会从easy-install.pth文件里把MySQL-python的相关信息抹去,剩下的egg文件,你可以手动删除。版本问题  python3.0版本较之前的有很大变动,而且不向下兼容。  Python2.6作为一个过渡版本,基本使用了Python2.x的语法和库,同时考虑了向Python3.0的迁移。即2.6版本兼容2.x和3.0的语法    Python2.6保持了对之前版本的全兼容,而且还包含了Python3.0的新玩意(一些新特性需要通过“from__future__import”来启用)。    如,在Python2.6要使用3.0的打印,得写上“from__future__importprint_function”  基于早期Python版本而能正常运行于Python2.6并无警告的程序可以通过一个2to3的转换工具无缝迁移到Python3.0。  部分函数和语句的改变   最引人注意的改变是print语句没有了,取而代之的是print函数   同样的还有exec语句,已经改为exec()函数。去除了<>,全部改用!=。    在python2.x版本中     #!/usr/bin/envpython     #或者上句写:#!/usr/bin/python     print"Hello,world!"     或者:     importsys     sys.stdout.write("Hello,world")    在python3.x中     print('Helloworld!')  用迭代器来替代列表   一些知名的API将不再返回列表。   而字典的dict.iterkeys()、dict.itervalues()和dict.iteritems()方法将会移除,而你可以使用.keys()、.values()和.items(),它们会返回更轻量级的、类似于集合的容器对象,而不是返回一个列表来复制键值。   这样做的优点是,可以直接在键和条目上进行集合操作,而不需要再复制一次。  整型数   移除了含糊的除法符号('/'),而只返回浮点数。   在以前的版本中,如果参数是int或者是long的话,就会返回相除后结果的向下取整(floor),而如果参数是float或者是complex的话,那么就会返回相除后结果的一个恰当的近似。   在2.6版本中可以通过from__future__importdivision来启用这项特性。python2topython3问题  1.print语句      2.x            3.x              说明    ①print           print()           #输出一个空白行    ②print1          print(1)           #输出一个单独的值    ③print1,2         print(1,2)         #输出多个值,以空格分割    ④print1,2,        print(1,2,end='')     #输出时取消在末尾输出回车符。    ⑤print>>sys.stderr,1,2  print(1,2,file=sys.stderr)#把输出重定向到一个管道  2.被重命名或者重新组织的模块   1)http    在Python3里,几个相关的HTTP模块被组合成一个单独的包,即http。       2.x           3.x    ① importhttplib     importhttp.client   #http.client模块实现了一个底层的库,可以用来请求HTTP资源,解析HTTP响应。    ② importCookie      importhttp.cookies  #http.cookies模块提供一个蟒样的(Pythonic)接口来获取通过HTTP头部(HTTPheader)Set-Cookie发送的cookies    ③ importcookielib    importhttp.cookiejar #常用的流行的浏览器会把cookies以文件形式存放在磁盘上,http.cookiejar模块可以操作这些文件。    ④ importBaseHTTPServer  importhttp.server   #http.server模块实现了一个基本的HTTP服务器      importSimpleHTTPServer      importCGIHttpServer   2)urllib    Python2有一些用来分析,编码和获取URL的模块,但是这些模块就像老鼠窝一样相互重叠。在Python3里,这些模块被重构、组合成了一个单独的包,即urllib。       2.x                 3.x    ① importurllib            importurllib.request,urllib.parse,urllib.error    ② importurllib2           importurllib.request,urllib.error    ③ importurlparse           importurllib.parse    ④ importrobotparser         importurllib.robotparser    ⑤ fromurllibimportFancyURLopener  fromurllib.requestimportFancyURLopener      fromurllibimporturlencode    fromurllib.parseimporturlencode    ⑥ fromurllib2importRequest     fromurllib.requestimportRequest      fromurllib2importHTTPError    fromurllib.errorimportHTTPError    以前,Python2里的urllib模块有各种各样的函数,包括用来获取数据的urlopen(),还有用来将URL分割成其组成部分的splittype(),splithost()和splituser()函数。    在python3的urllib包里,这些函数被组织得更有逻辑性。2to3将会修改这些函数的调用以适应新的命名方案。    在Python3里,以前的urllib2模块被并入了urllib包。同时,以urllib2里各种你最喜爱的东西将会一个不缺地出现在Python3的urllib模块里,比如build_opener()方法,Request对象,HTTPBasicAuthHandler和friends。    Python3里的urllib.parse模块包含了原来Python2里urlparse模块所有的解析函数。    urllib.robotparse模块解析robots.txt文件。    处理HTTP重定向和其他状态码的FancyURLopener类在Python3里的urllib.request模块里依然有效。urlencode()函数已经被转移到了urllib.parse里。    Request对象在urllib.request里依然有效,但是像HTTPError这样的常量已经被转移到了urllib.error里。   3)dbm    所有的DBM克隆(DBMclone)现在在单独的一个包里,即dbm。如果你需要其中某个特定的变体,比如GNUDBM,你可以导入dbm包中合适的模块。       2.x        3.x     ① importdbm     importdbm.ndbm     ② importgdbm    importdbm.gnu     ③ importdbhash   importdbm.bsd     ④ importdumbdbm   importdbm.dumb     ⑤ importanydbm   importdbm       importwhichdb   4)xmlrpc    XML-RPC是一个通过HTTP协议执行远程RPC调用的轻重级方法。一些XML-RPC客户端和XML-RPC服务端的实现库现在被组合到了独立的包,即xmlrpc。       2.x            3.x     ① importxmlrpclib      importxmlrpc.client     ② importDocXMLRPCServer   importxmlrpc.server       importSimpleXMLRPCServer   5)其他模块       2.x                3.x    ① try:               importio        importcStringIOasStringIO #在Python2里,你通常会这样做,首先尝试把cStringIO导入作为StringIO的替代,如果失败了,再导入StringIO。      exceptImportError:        #不要在Python3里这样做;io模块会帮你处理好这件事情。它会找出可用的最快实现方法,然后自动使用它。        importStringIO    ② try:               importpickle        importcPickleaspickle   #在Python2里,导入最快的pickle实现也与上边io相似。在Python3里,pickle模块会自动为你处理,所以不要再这样做。      exceptImportError:        importpickle    ③ import__builtin__        importbuiltins    ④ importcopy_reg          importcopyreg#copyreg模块为用C语言定义的用户自定义类型添加了pickle模块的支持。    ⑤ importQueue           importqueue  #queue模块实现一个生产者消费者队列(multi-producer,multi-consumerqueue)。    ⑥ importSocketServer        importsocketserver#socketserver模块为实现各种socketserver提供了通用基础类。    ⑦ importConfigParser        importconfigparser#configparser模块用来解析INI-style配置文件。    ⑧ importrepr            importreprlib#reprlib模块重新实现了内置函数repr(),并添加了对字符串表示被截断前长度的控制。    ⑨ importcommands          importsubprocess#subprocess模块允许你创建子进程,连接到他们的管道,然后获取他们的返回值。    builtins模块包含了在整个Python语言里都会使用的全局函数,类和常量。重新定义builtins模块里的某个函数意味着在每处都重定义了这个全局函数。这听起来很强大,但是同时也是很可怕的。注释 “#”后面的内容数据类型  共4种:整数、长整数、浮点数和复数。  1.整数,如:2  2.长整数,如:22L #长整数不过是大一些的整数。Python3已经取消这种类型,被int取代了。  3.浮点数,如:3.23和52.3E-4 #E标记表示10的幂。在这里,52.3E-4表示52.3*10-4。  4.复数,如:(-5+4j)和(2.3-4.6j)  在Python2和Python3的变化:  1.八进制(octal)数:   Python2:x=0755  #0开头   Python3:x=0o755 #0o开头  2.long类型   Python2有为非浮点数准备的int和long类型。int类型的最大值不能超过sys.maxint,而且这个最大值是平台相关的。    整数可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。   Python3里,只有一种整数类型int,大多数情况下,它很像Python2里的长整型。    由于已经不存在两种类型的整数,所以就没有必要使用特殊的语法去区别他们。   由于long类型在Python3的取消,引起以下改变     Python2       Python3      说明   ①x=1000000000000L  x=1000000000000  #十进制的普通整数   ②x=0xFFFFFFFFFFFFL  x=0xFFFFFFFFFFFF #十六进制的普通整数   ③long(x)        int(x)       #long()函数没有了。可以使用int()函数强制转换一个变量到整型。   ④type(x)islong    type(x)isint   #检查一个变量是否是整型   ⑤isinstance(x,long)  isinstance(x,int) #也可以使用isinstance()函数来检查数据类型  3.sys.maxint(sys.maxsize)   由于长整型和整型被整合在一起了,sys.maxint常量不再精确。   因为这个值对于检测特定平台的能力还是有用处的,所以它被Python3保留,并且重命名为sys.maxsize。     Python2        Python3   ①fromsysimportmaxint fromsysimportmaxsize #maxint变成了maxsize。   ②a_function(sys.maxint) a_function(sys.maxsize) #所有的sys.maxint都变成了sys.maxsize。 int是types.IntType的代名词  print(id(int))#打印如:505210872  importtypes;print(id(types.IntType))#打印如:505210872标识符的命名  变量是标识符的例子。标识符是用来标识某样东西的名字。在命名标识符的时候,你要遵循这些规则:  1.标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘_’)。  2.标识符名称的其他部分可以由字母(大写或小写)、下划线(‘_’)或数字(0-9)组成。  3.标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。  有效标识符名称的例子有i、__my_name、name_23和a1b2_c3。  无效标识符名称的例子有2things、thisisspacedout和my-name。逻辑行与物理行 物理行是在编写程序时文本的一行。逻辑行是程序的一个语句。 Python假定每个物理行对应一个逻辑行。他希望每行都只使用一个语句,这样使得代码更加易读。 1.如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这种用法。   分号表示一个逻辑行/语句的结束。   如:i=5;printi;#强烈建议你坚持在每个物理行只写一句逻辑行。让程序见不到分号,而更容易阅读。 2.明确的行连接   在多个物理行中写一个逻辑行,行结尾用反斜杠标明   如:s='Thisisastring.\     Thiscontinuesthestring.'     #上面这两行是一个逻辑行,打印是:Thisisastring.Thiscontinuesthestring.     print\     i     #上面这两行也是一个逻辑行,等同于:printi 3.暗示的行连接   在多个物理行中写一个逻辑行,行结尾不需要使用反斜杠标明。   这种情况出现在逻辑行中使用了圆括号、方括号或波形括号的时候。 4.缩进   行首的空白是重要的。在逻辑行首的空白(空格和tab符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。   同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。   不要混合使用tab符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。强烈建议只使用一种风格来缩进。语法规则  1.缩进规则   一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而不是花括号{})。这一点曾经引起过争议。   不过不可否认的是,通过强制程序员们缩进,Python确实使得程序更加清晰和美观。   在逻辑行首的空白(空格和tab)用来决定逻辑行的缩进层次,从而用来决定语句的分组。错误的缩进会引发错误。   注意:强制缩进的问题,最常见的情况是tab符和空格的混用会导致错误,而这是用肉眼无法分别的。  2.变量没有类型   使用变量时只需要给它们赋值。不需要声明或定义数据类型。  3.单语句块   如果你的语句块只包含一句语句,那么你可以在条件语句或循环语句的同一行指明它。如:if1!=2:print('Yes')   强烈建议不要使用这种缩略方法。这会破坏Python清晰美观的代码风格,违背设计者的初衷。   如果是在Python解释器输入,它的把提示符会改变为...以表示语句还没有结束。这时按回车键用来确认语句已经完整了。然后,Python完成整个语句的执行,并且返回原来的提示符来等待下一句输入。运算符与表达式:运算符  运算符  名称     说明   +    加     两个对象相加,也可以字符串拼接   -    减     得到负数或是一个数减去另一个数   *    乘     两个数相乘或是返回一个被重复若干次的字符串   **   幂     返回x的y次幂   /    除     x除以y   //   取整除   返回商的整数部分   %    取模    返回除法的余数 #8%3得到2。-25.5%2.25得到1.5   <<   左移    把一个数的二进制向左移一定数目#2<<2>>   右移    把一个数的二进制向右移一定数目#11>>1得到5   &    按位与   数的按位与#5&3得到1。   |    按位或   数的按位或#5|3得到7。   ^    按位异或  数的按位异或#5^3得到6   ~    按位翻转  x的按位翻转是-(x+1)#~5得到6。   <    小于    返回x是否小于y   >    大于    返回x是否大于y   <=   小于等于  返回x是否小于等于y   >=   大于等于  返回x是否大于等于y   ==   等于    比较对象是否相等   !=   不等于   比较两个对象是否不相等(python3删除了“<>”符号)   not   布尔“非” 如果x为True,返回False。如果x为False,它返回True。#x=True;notx返回False。   and   布尔“与” 如果x为False,xandy返回False,否则它返回y的计算值。#x=False;y=True;xandy返回False。   or   布尔“或” 如果x是True,它返回True,否则它返回y的计算值。#x=True;y=False;xory返回True。   in,notin     成员测试(由类里面的__contains__函数指定返回值)   is,isnot     同性测试(两值的is运算是判断引用,与“==”的比较有所不同)  说明:   1.加号“+”:有数学相加,也有字符串拼接作用,注意:不能字符串和数字相加。如:3+5得到8;'a'+'b'得到'ab'。   2.乘号“*”:两个数相乘,也可以把字符串重复拼接若干次,如:2*3得到6;'la'*3得到'lalala'。   3.幂“**”:这种写法,其他语言好像没见到过,如:3**4得到81(即3*3*3*3)   4.除号“/”:整数的除法得到整数结果,浮点数的得到浮点数,如:4/3得到1(返回相除后结果的向下取整(floor));4.0/3或4/3.0得到1.333...    注意:Python3.0开始,移除了含糊的除法符号('/'),而只返回浮点数。如:4/3得到1.333...   5.取整除“//”:将两数相除,然后对结果取整,如:7//3得到2;4//3.0得到1.0   6.比较运算符:所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意大小写。    如果两个操作数都是数字,它们首先被转换为一个共同的类型(如double)。否则,它总是返回False。<3 xss=removed ss=FalseorNoneor0or''or-1or'sss';print(ss)#打印:-1(-1作if判断时返回True)  edittype=edittypeor a=0and1;print(a)#打印:0  a=2and1;print(a)#打印:1  valid=True;valid validandcheckLength(name,16);valid=validandcheckLength(name,16);#如果前面的验证不通过,则后面的不再验证  c=condandaorb  c=(condand[a]or[b])[0]#即使a或者b为一个逻辑假的值,将他放入集合中后,就为真了,也就是[False][None]都不为假。  c=(b,a)[condand1or0]#注意a和b的位置是颠倒的,将表达式结果转成1和0来作为元组下标而选择结果。  c=aifcondelseb#使用ifelse写条件(python特有的写法,建议使用,前3种写法难理解也容易出错)  Python没有“++”和“--”两个语法,自增自减时只能写:i=i+1或者i+>,>=,!=,==  比较  |            按位或  ^            按位异或  &            按位与  <<,>>         移位  +,-          加法与减法  *,/,%         乘法、除法与取余  +x,-x         正负号  ~x           按位翻转  **           指数  x.attribute       属性参考  x[index]        下标  x[index:index]     寻址段  f(arguments...)     函数调用  (experession,...)    绑定或元组显示  [expression,...]    列表显示  {key:datum,...}     字典显示  'expression,...'    字符串转换计算顺序  默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。然而,如果要改变它们的计算顺序,得使用圆括号。  例如,你想要在一个表达式中让加法在乘法之前计算,那么你就得写成类似(2+3)*4的样子。结合规律  运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2+3+4被计算成(2+3)+4。  一些如赋值运算符那样的运算符是由右向左结合的,即a=b+c被处理为a=(b+c)。对象  Python将"一切皆对象"贯彻得非常彻底,不区分什么"值类型"和"引用类型"。所谓变量,实质就是一个通用类型指针(PyObject*),它仅仅负责指路,至于目标是谁,一概不管。  PythonObject对象的自身结构了。任何对象,就算一个最简单的整数,它的头部都会拥有2个特殊的附加信息,分别是:"引用计数"和"类型(type)指针"。前者指示GC何时回收,而后者标明了对象的身份,如此我们就可以在运行期动态执行对象成员调用。  连同附加头,一个"普通"的整数起码得12字节:  a=8;importsys;print(sys.getsizeof(a))#打印:12 (python3.2中,打印的是14)  print(sys.getsizeof(None))#打印:8字符串  1.使用单引号“'”引起来:'Quotemeonthis'  2.使用双引号“"”引起来:"What'syourname?"  3.使用三引号('''或"""):可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双引号。/'''   如:   """Thisisamulti-linestring.Thisisthefirstline.   "What'syourname?,"Iasked.   Hesaid"Bond,JamesBond."   """  4.转义符“\”   \\ 指示反斜杠本身   \' 指示单引号   \" 指示双引号   注意:行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。  5.自然字符串   自然字符串通过给字符串加上前缀r或R来指定,取消转义符的功能。例如:r"Newlinesareindicatedby"。   三引号的字符串也可以同样用法,如:R'''Newlinesareindicatedby'''  6.Unicode字符串   Python允许你处理Unicode文本(超过拉丁文字范围的)——只需要在字符串前加上前缀u或U。   例如,u"ThisisaUnicodestring.哈哈.."。(Python3.x之后不需要这样了,可以直接写中文;而这样写会报错)   Python3.0开始对unicode全面支持,所有的文本(str)都是Unicode的;并引入了一个叫做bytes的新类型来处理字节序列。而编码过的Unicode会以二进制的数据来表示。   因为在2.x的世界里,大量的bug都是因为已编码的文本和未编码的文本混杂在一起而产生的。  7.按字面意义级连字符串   如果你把两个字符串按字面意义相邻放着,他们会被Python自动级连。   例如,"What's"'yourname?'会被自动转为"What'syourname?"。   即是说,两个字符串放在一起,会有字符拼接的效果。加号“+”也有字符拼接的效果。  8.字符串拼接   可以使用“str1.__add__(str2)”或者“str1+str2”或者直接两个字符串放一起,来拼接字符串   但字符串与其它类型拼接时,得先把其它类型转成字符串类型,否则会出错。如“str1+2”就会出错,需要“str1+str(2)”  9.格式化   使用“%控制符”可以格式化字符串,非常方便。如:str1="Swaroop'sageis%d,weightis%f"%(5,65.5)   “%(name)控制符”可按名称传参数(不写名称是按位置传参数),如:str="%(row)dRowsis%(value)s"%{'value':'kkkk','row':22}   格式化的符号用法参考下面的“字符串格式化控制表”   另外,string.format()函数也可以格式化字符串   例如:'subtracting{0},adding{1}'.format(1,'haha')#参数讲对应到“{number}”的位置上  10.字符串序列(索引和切片)   字符串可以使用下标来获取字符串中某个项目,以及截取字符串。详情参考“序列”   用法如:name='swaroop';name[1];name[1:3];name[1:-1]  11.str(anything)函数和unicode(anything)函数   Python2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成Unicode字符串,还有str()把对象转换为非Unicode字符串。   Python3只有一种字符串类型,Unicode字符串,所以str()函数即可完成所有的功能。(unicode()函数在Python3里不再存在了。)  另外:   没有专门的char数据类型,确实没有需要有这个类型。   单引号和双引号字符串是完全相同的——它们没有在任何方面有不同。   正则表达式:一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。   使用help(str)可查看字符串对象定义的所有方法及属性。   由于百分号有特殊作用,所以字符串里面要用百分号的话需要使用“%%”,如:"select*frommy_tablewherenamelike'%%测试%%'"字符串格式化控制:(未参考帮助文档,只是个人猜测)  转义符(EscapeSequence):  \ddd   1到3位8进制数指定Unicode字符输出(如:“\127”显示“W”)  \uxxxx  1到4位16进制数指定Unicode字符输出(Python3.x开始支持此写法,如:\u54C8显示“哈”字)  \xhh   16进制数指定Unicode字符输出(如:“\xe5\x93\x88”显示“哈”)  \\    \  \    \(单独的一个斜杠也显示斜杠,即不后接有转移作用的字符时,作为斜杠使用)  \'    '  \"    "  \a    字符:0x07  响铃(ASCII控制字符)  \b    字符:0x08  退格(光标向左走一格)(ASCII控制字符)  \f    字符:0x0c  Formfeed(FF)(走纸转页,换页)(ASCII控制字符)      字符:0x0a  换行(ASCII控制字符)  \N{name}Unicode字符  只能针对Unicode  \r    字符:0x0d  回车  \t    字符:0x09  跳格(tab符号),水平制表符  \v    字符:0x0b  垂直制表符  %%    %  %d    输出10进制整数,只能是数字类型,输出字符串类型会出错;浮点类型的数字将被取整(直接删除小数部分)。  %f,%F  以10进制输出浮点数,只能是数字类型,输出字符串类型会出错。  %e,%E  以科学计数法输出10进制的浮点数,大小写的“e”反应在显示时科学计数法的“e/E”上,只能是数字类型。  %a    Python3.0开始支持此写法,原样输出结果,字符串类型会加上单引号引起来。  %o    (字母o)以8进制整数方式输出,只能是数字类型;浮点类型的数字将被取整(直接删除小数部分)。  %x,%X  将数字以16进制方式输出,只能是数字类型;浮点类型的数字将被取整(直接删除小数部分)。  %s    将字符串格式化输出(可输出任何类型)  %c    以字符方式输出,提供的类型必须是char或int。  注:布尔类型的True或False,用数字类型输出是1或0,字符串输出是True或False。  字符串转换成数字  float(str)   转换成浮点数,如,float("1e-1")结果:0.1  int(str)    转换成整数,如,int("12")结果:12  int(str,base) 转换成base进制的整数,如,int("11",2)转换成2进制的整数,结果:3  long(str)   转换成长整数,Python3取消此语法,如,long("12L")结果:12L  long(str,base)转换成base进制的长整数,Python3取消此语法,如,long("11L",2)结果:3L字符串用例  name='Swaroop'#Thisisastringobject  #检查字符串的开头部分  ifname.startswith('Swa'): #类似函数如endswith()    print('Yes,thestringstartswith"Swa"')  #检查是否包含有此内容  if'a'inname:    print('Yes,itcontainsthestring"a"')  #找出给定字符串的位置,找不到则返回-1  ifname.find('war')!=-1:    print('Yes,itcontainsthestring"war"','s')  #join()函数把列表拼接起来  delimiter=';'  mylist=['Brazil','Russia','India','China']  print(delimiter.join(mylist))#打印:Brazil;Russia;India;China  #大小写转换  print("THISISTEST".lower())  #转换成小写,打印:thisistest  print("thisistest".upper())  #转换成大写,打印:THISISTEST  print("ThisIsTest".swapcase())#大小写互换,打印:tHISiStEST  print(" ThisIsTest ".strip())#去掉前后空格,打印:ThisIsTest  #常用string函数  replace(string,old,new[,maxsplit])    字符串的替换函数,把字符串中的old替换成new。默认是把string中所有的old值替换成new值,如果给出maxsplit值,还可控制替换的个数,如果maxsplit为1,则只替换第一个old值。    如:a="11223344";print(string.replace(a,"1","one"))#打印:oneone2223344       print(string.replace(a,"1","one",1))#打印:one12223344    b="dfsdf  dfsdfsddfsdf ";print(a.replace('',''))#打印:dfsdfdfsdfsddfsdf  capitalize(string)    该函数可把字符串的首个字符替换成大字。  如:importstring;print(string.capitalize("python"))#打印:Python  split(string,sep=None,maxsplit=-1)    从string字符串中返回一个列表,以sep的值为分界符。  如:importstring;ip="192.168.3.3";print(string.split(ip,'.'))#打印:['192','168','3','3']控制台输入  使用raw_input()函数或者input()函数能够很方便的控从制台读入数据,得到的是字符串。  Python2.x时,raw_input()和input()的区别:    当输入为纯数字时:input()返回的是数值类型,如:int,float;raw_input()返回的是字符串类型    input()会计算在字符串中的数字表达式,而raw_input()不会。如输入“57+3”:input()得到整数60,raw_input()得到字符串'57+3'  注:Python3.0将raw_input()函数去除了,而用input()取代它的功能。另外,input()获取的字符串会包括结尾的换行符。  例:(此处是Python2.6的写法,3.x时应该把raw_input()改成input())   1.输入字符串    nID=raw_input("Inputyouridplz:");print('youridis%s'%(nID))   2.输入整数    nAge=int(raw_input("inputyourageplz:"));print('yourageis%d'%nAge)   3.输入浮点型    fWeight=float(raw_input("inputyourweight:"));print('yourweightis%f'%fWeight)   4.输入16进制数据    nHex=int(raw_input('inputhexvalue(like0x20):'),16);print('nHex=%x,nOct=%d'%(nHex,nHex))   5.输入8进制数据    nOct=int(raw_input('inputoctvalue(like020):'),8);print('nOct=%o,nDec=%d'%(nOct,nOct))  注:打印字符串时,“%”作为特殊符号,两个百分号才能打印出一个百分号  Python2与Python3的比较    Python2       Python3  ①raw_input()     input()     #最简单的形式,raw_input()被替换成input()。  ②raw_input('prompt') input('prompt') #可以指定一个提示符作为参数  ③input()       eval(input())  #如果想要请求用户输入一个Python表达式,计算结果控制流:if语句  写法:if...elif...else... #if后面不用圆括号  注:在Python中没有switch语句。你可以使用if..elif..else语句来完成同样的工作(在某些场合,使用字典会更加快捷。)  在C/C++里面可以使用elseif,但这里不行,得写成:else:\tif,故此增加关键字elif  例:  number=23  #int是一个类,不过这里它只是把一个字符串转换为一个整数(假设这个字符串含有一个有效的整数文本信息)。  guess=int(raw_input('Enteraninteger:'))  ifguess==number:    print('Congratulations,youguessedit.')  elifguessy:      returnx    else:      returny  print(maximum(2,3))#打印3None  None是Python中表示没有任何东西的特殊类型(相当于java的null)。例如,如果一个变量的值为None,可以表示它没有值。  注意:函数没有返回值的,等价于最后返回returnNone。通过运行printsomeFunction(),你可以明白这一点。  例:  defsomeFunction():    #pass语句在Python中表示一个空的语句块。它后面的代码会照常运行。    pass  print(someFunction())DocStrings  DocStrings:文档字符串。它是一个重要的工具,帮助你的程序文档更加简单易懂,应该尽量使用它。甚至可以在程序运行的时候,从函数恢复文档字符串!  在函数的第一个逻辑行的字符串是这个函数的文档字符串。注意,DocStrings也适用于模块和类。  文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。强烈建议遵循这个惯例。  例:  defprintMax(x,y):    '''Printsthemaximumoftwonumbers.    Thetwovaluesmustbeintegers.'''    x=int(x)#converttointegers,ifpossible    y=int(y)    ifx>y:      print(x,'ismaximum')    else:      print(y,'ismaximum')  printMax(3,5) #打印:5ismaximum  print(printMax.__doc__)  #打印:Printsthemaximum...mustbeintegers.  注:  使用__doc__(注意是两个下划线)调用printMax函数的文档字符串属性。请记住Python把每一样东西都作为对象,包括这个函数。  Python中help()函数即是使用DocStings的了,它只是抓取函数的__doc__属性,然后整洁地展示给你。可以对上面的函数尝试一下:help(printMax)。记住按q退出help。  自动化工具也可以以同样的方式从你的程序中提取文档。因此强烈建议你对你所写的任何正式函数编写文档字符串。函数属性func_*  在Python2里,函数的里的代码可以访问到函数本身的特殊属性。在Python3里,为了一致性,这些特殊属性被重新命名了。  Python2与Python3的比较     Python2         Python3        说明   ①a_function.func_name   a_function.__name__   #包含了函数的名字。   ②a_function.func_doc    a_function.__doc__   #包含了在函数源代码里定义的文档字符串(docstring)。   ③a_function.func_defaults a_function.__defaults__#是一个保存参数默认值的元组。   ④a_function.func_dict   a_function.__dict__   #一个支持任意函数属性的名字空间。   ⑤a_function.func_closure  a_function.__closure__ #一个由cell对象组成的元组,包含了函数对自由变量(freevariable)的绑定。   ⑥a_function.func_globals  a_function.__globals__ #一个对模块全局名字空间的引用,函数本身在这个名字空间里被定义。   ⑦a_function.func_code   a_function.__code__   #一个代码对象,表示编译后的函数体。模块:  如果要在其他程序中重用很多函数,那么你该使用模块。  模块基本上就是一个包含了所有你定义的函数和变量的文件。  为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。sys模块(标准库模块)  sys模块包含了与Python解释器和它的环境有关的函数。  例:  importsys #输入sys模块。基本上,这句语句告诉Python,我们想要使用这个模块。  print('Thecommandlineargumentsare:')  #打印调用文件的命令行参数  foriinsys.argv:    print(i)  print('ThePYTHONPATHis',sys.path)  输出:  $pythonusing_sys.pywearearguments  Thecommandlineargumentsare:  using_sys.py  we  are  arguments  ThePYTHONPATHis['/home/swaroop/byte/code','/usr/lib/python23.zip',  '/usr/lib/python2.3','/usr/lib/python2.3/plat-linux2',  '/usr/lib/python2.3/lib-tk','/usr/lib/python2.3/lib-dynload',  '/usr/lib/python2.3/site-packages','/usr/lib/python2.3/site-packages/gtk-2.0']  注:  执行importsys语句的时候,它在sys.path变量中所列目录中寻找sys.py模块。  如果找到了这个文件,这个模块的主块中的语句将被运行,然后这个模块将能够被你使用。  注意,初始化过程仅在我们第一次输入模块的时候进行。另外,“sys”是“system”的缩写。  脚本的名称总是sys.argv列表的第一个参数。所以,在这里,'using_sys.py'是sys.argv[0]、'we'是sys.argv[1]。  sys.path包含输入模块的目录名列表。  可以观察到sys.path的第一个字符串是空的——这个空的字符串表示当前目录也是sys.path的一部分,这与PYTHONPATH环境变量是相同的。  这意味着你可以直接输入位于当前目录的模块。否则,你得把你的模块放在sys.path所列的目录之一。  另外:  sys.exit()#程序结束  sys.stdin、sys.stdout和sys.stderr分别对应你的程序的标准输入、标准输出和标准错误流。字节编译的.pyc文件  输入一个模块相对来说是一个比较费时的事情,所以Python做了一些技巧,以便使输入模块更加快一些。  一种方法是创建字节编译的文件,这些文件以.pyc作为扩展名。另外,这些字节编译的文件也是与平台无关的。  当你在下次从别的程序输入这个模块的时候,.pyc文件是十分有用的——它会快得多,因为一部分输入模块所需的处理已经完成了。from...import语句  如果你想要直接输入argv变量到你的程序中(避免在每次使用它时打sys.),那么你可以使用fromsysimportargv语句。  如果你想要输入所有sys模块使用的名字,那么你可以使用fromsysimport*语句。  这对于所有模块都适用。  注意:    1.使用frompackageimportitem方式导入包时,这个子项(item)既可以是包中的一个子模块(或一个子包),也可以是包中定义的其它命名,像函数、类或变量。     import语句首先核对是否包中有这个子项,如果没有,它假定这是一个模块,并尝试加载它。如果没有找到它,会引发一个ImportError异常。    2.使用像importitem.subitem.subsubitem这样的语句时,这些子项必须是包,最后的子项可以是包或模块,但不能是前面子项中定义的类、函数或变量。    3.应该避免使用from...import而使用import语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突。import...as  为import的模块起一个简称。如:importcPickleasp  起简称后,下面的语句即可使用简称,如原本的cPickle.dump()可写成p.dump()模块的__name__  每个模块都有一个名称,在模块中可以通过语句来找出模块的名称。  这在一个场合特别有用——就如前面所提到的,当一个模块被第一次输入的时候,这个模块的主块将被运行。  假如我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的__name__属性完成。  每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行,我们可以进行相应的恰当操作。  例:  #Filename:using_name.py  if__name__=='__main__':    print('Thisprogramisbeingrunbyitself')  else:    print('Iambeingimportedfromanothermodule')  输出:  $pythonusing_name.py  Thisprogramisbeingrunbyitself  $python  >>>importusing_name  Iambeingimportedfromanothermodule自定义模块  每个Python程序也是一个模块。  模块,例:  #Filename:mymodule.py  defsayhi():    print('Hi,thisismymodulespeaking.')  version='0.1'  #Endofmymodule.py  上面是一个模块的例子。你已经看到,它与我们普通的Python程序相比并没有什么特别之处。  记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。  用例1:  importmymodule  mymodule.sayhi()  print('Version',mymodule.version)  注:函数和成员都以点号来使用。  用例2: 使用from..import语法的版本。  frommymoduleimportsayhi,version #或者写:frommymoduleimport*  sayhi()  print('Version',version)包(Packages)  包通常是使用用“圆点模块名”的结构化模块命名空间。例如,A.B表示名为"A"的包中含有名为"B"的子模块。  使用圆点模块名保存不同类库的包可以避免模块之间的命名冲突。(如同用模块来保存不同的模块架构可以避免变量之间的命名冲突)  包目录必须要有一个__init__.py文件的存在

相关问题推荐

  • 回答 6

    根据我的经验,以为我老是下载系统做实验,嘻嘻。老实和你说,世界上没有绝对的号系统,据大多数认识用Windows,因为气窗口化的操作,使人们更容易接受,现在linux也趋向于窗口化*(部分啊)。    人们没有i时间去了解其他系统(linux之父说的),所以被...

  • 回答 2

     Easy Sysprep是一款用于 Windows 操作系统系统部署专业工具,使用人群主要是企业的系统工程师和系统技术爱好者,与 [自由天空综合驱动包] 结合成整套成熟可靠系统部署解决方案。  小编推荐:Easy Sysprep下载SysPacker  SysPacker是一款针对于雨林木...

没有解决我的问题,去提问