html5中文学习网

您的位置: 首页 > 网站及特效实例 > jquery特效 » 正文

如何编写Python脚本替换文件中的多行字符?_编程语言综合

[ ] 已经帮助:人解决问题

 问题描述 TWDHTML5中文学习网 - HTML5先行者学习网

解题思路 TWDHTML5中文学习网 - HTML5先行者学习网
代码实现 TWDHTML5中文学习网 - HTML5先行者学习网
Python的特点 TWDHTML5中文学习网 - HTML5先行者学习网
1、问题描述TWDHTML5中文学习网 - HTML5先行者学习网
项目源码很大,属于C/C++混合的那种,编程风格也很多样,有'.c'、'.cc'、'cpp'、'.h'、'.hh'等文件。我要完成的任务是:把包含特定几行内容的注释删掉,如(声明:下面的内容只是我随便举的一个例子,项目源码中不涉及下面的内容。)TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
/* TWDHTML5中文学习网 - HTML5先行者学习网
* Copyright 2002 Sun Microsystems, Inc. All rights reserved.TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
*TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* Redistribution and use in source and binary forms, with or withoutTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* modification, are permitted provided that the following conditionsTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* are met:TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
*TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* - Redistributions of source code must retain the above copyrightTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* notice, this list of conditions and the following disclaimer.TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
*TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* - Redistribution in binary form must reproduce the above copyrightTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* notice, this list of conditions and the following disclaimer inTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* the documentation and/or other materials provided with theTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* distribution.TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
*TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* Neither the name of Sun Microsystems, Inc. or the names ofTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* contributors may be used to endorse or promote products derivedTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* from this software without specific prior written permission.TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
*/TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
但是格式有很多种,如有的在“ Copyright 2002 Sun Microsystems, Inc. All rights reserved.”前面有一段关于本源码文件的描述、有的在“from this software without specific prior written permission.”后面有一段关于本源码文件的描述、有的是C++风格的注释用"//",而不是“/**/”、还有的没有TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
“ * - Redistribution in binary form must reproduce the above copyrightTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* notice, this list of conditions and the following disclaimer inTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* the documentation and/or other materials provided with theTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
* distribution.”等等还有其他一些。总之一句话,我要删除的包含特定几行内容的注释有很多中格式!TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
于是我决定要用Python来编写脚本处理。要匹配特定的内容,我想到了用正则表达式,但苦于不知道如何去构建正则来匹配上面描述的内容(您知道的话,希望能够告诉我)!我只有另辟路径了。TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
2、解题思路TWDHTML5中文学习网 - HTML5先行者学习网
我的思路——要删除所有项目源码中包含特定几行内容的注释,脚本要满足以下几点功能:TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
脚本要能够遍历所有的源码文件('.c'、'.cc'、'cpp'、'.h'、'.hh'),并只处理上面的几种类型的文件 TWDHTML5中文学习网 - HTML5先行者学习网
找出包含特定几行内容的注释,并删除之 TWDHTML5中文学习网 - HTML5先行者学习网
能够处理一些特殊情况,如软连接文件 TWDHTML5中文学习网 - HTML5先行者学习网
上面的几点的处理步骤可以表示如下:TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
Step 1:输入要处理源码文件夹名,或者源码文件名;TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
Step 2:如果是文件名,检查文件的类型是否为'.c'、'.cc'、'cpp'、'.h'、'.hh',否则不处理;TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
Step 3:检查文件是否是软连接,如果是软连接则不处理;TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
Step 4:查找文件中是否存在匹配的注释,存在则删掉,否则不处理;TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
Step 5:如果是文件夹,则对文件夹中的每个文件、文件夹进行处理,转Step2.TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
思路很明确,关键是如何查找文件中是否包含匹配的内容,并删除!还有就是,对于一个没用过Python等脚本语言的人来说,如何编码实现也是一个问题!TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
如何确定注释是否为包含特定几行内容的注释?我的思路如下:(因为正则表达式学的不好,只有通过下面的方法了)TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
如果是/*、//则记录下当前的文件行数,即行号startLine TWDHTML5中文学习网 - HTML5先行者学习网
以行为单位查找是否存在特定的几行,如“ Copyright 2002 Sun Microsystems, Inc. All rights reserved.”等等 TWDHTML5中文学习网 - HTML5先行者学习网
直到遇到*/,或注释结束了(对于//)。如果存在,则记录下注释结束的行号endLine TWDHTML5中文学习网 - HTML5先行者学习网
最后,删掉这从startLine ~ endLine的内容。 TWDHTML5中文学习网 - HTML5先行者学习网
3、代码实现TWDHTML5中文学习网 - HTML5先行者学习网
废话我不多说了,直接按照上面的实例实现代码,如果你对Python不熟,请参阅相关资料。TWDHTML5中文学习网 - HTML5先行者学习网
#!/usr/bin/env pythonTWDHTML5中文学习网 - HTML5先行者学习网
#Filename: comment.pyTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
import os, sys, fileinputTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
#-------------------------------------------------------------TWDHTML5中文学习网 - HTML5先行者学习网
def usage():TWDHTML5中文学习网 - HTML5先行者学习网
    print u'''TWDHTML5中文学习网 - HTML5先行者学习网
    help: comment.py <filename | dirname>TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
    [dirname]: Option, select a directory to operateTWDHTML5中文学习网 - HTML5先行者学习网
    [filename]: Option, select a file to operateTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
    Example: python comment.py /home/saylor/testTWDHTML5中文学习网 - HTML5先行者学习网
    '''TWDHTML5中文学习网 - HTML5先行者学习网
#--------------------------------------------------------------TWDHTML5中文学习网 - HTML5先行者学习网
def commentFile(src, fileList):TWDHTML5中文学习网 - HTML5先行者学习网
    '''TWDHTML5中文学习网 - HTML5先行者学习网
    description: comment filesTWDHTML5中文学习网 - HTML5先行者学习网
    param src: Operate file nameTWDHTML5中文学习网 - HTML5先行者学习网
    '''TWDHTML5中文学习网 - HTML5先行者学习网
    #if file exist?TWDHTML5中文学习网 - HTML5先行者学习网
    ifnot os.path.exists(src):TWDHTML5中文学习网 - HTML5先行者学习网
        print'Error: file - %s doesn/'t exist.'% srcTWDHTML5中文学习网 - HTML5先行者学习网
        return FalseTWDHTML5中文学习网 - HTML5先行者学习网
    if os.path.islink(src):TWDHTML5中文学习网 - HTML5先行者学习网
        print'Error: file - %s is just a link, will not handle it.'TWDHTML5中文学习网 - HTML5先行者学习网
        return FalseTWDHTML5中文学习网 - HTML5先行者学习网
    filetype = (os.path.splitext(src))[1]TWDHTML5中文学习网 - HTML5先行者学习网
    ifnot filetype in ['.c','.h']:TWDHTML5中文学习网 - HTML5先行者学习网
        return FalseTWDHTML5中文学习网 - HTML5先行者学习网
    try:TWDHTML5中文学习网 - HTML5先行者学习网
        ifnot os.access(src, os.W_OK):TWDHTML5中文学习网 - HTML5先行者学习网
            os.chmod(src, 0664)TWDHTML5中文学习网 - HTML5先行者学习网
    except:TWDHTML5中文学习网 - HTML5先行者学习网
        print'Error: you can not chang %s/'s mode.'% srcTWDHTML5中文学习网 - HTML5先行者学习网
    try:TWDHTML5中文学习网 - HTML5先行者学习网
        inputf = open(src, 'r')TWDHTML5中文学习网 - HTML5先行者学习网
        outputfilename = src +'.tmp'TWDHTML5中文学习网 - HTML5先行者学习网
        outputf = open(outputfilename, 'w')TWDHTML5中文学习网 - HTML5先行者学习网
    beginLine = 0TWDHTML5中文学习网 - HTML5先行者学习网
    endLine =100000000TWDHTML5中文学习网 - HTML5先行者学习网
    isMatched = FalseTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
    #-----find the beginLine and endLine -------------------TWDHTML5中文学习网 - HTML5先行者学习网
        for eachline in fileinput.input(src):TWDHTML5中文学习网 - HTML5先行者学习网
        if eachline.find('/*') >= 0:TWDHTML5中文学习网 - HTML5先行者学习网
        beginLine = fileinput.lineno()TWDHTML5中文学习网 - HTML5先行者学习网
        if eachline.find('Copyright 2002 Sun Microsystems, Inc. All rights reserved.')>= 0:TWDHTML5中文学习网 - HTML5先行者学习网
            isMatched = TrueTWDHTML5中文学习网 - HTML5先行者学习网
        if eachline.find('*/') >= 0 and isMatched:TWDHTML5中文学习网 - HTML5先行者学习网
        endLine = fileinput.lineno()TWDHTML5中文学习网 - HTML5先行者学习网
        breakTWDHTML5中文学习网 - HTML5先行者学习网
    TWDHTML5中文学习网 - HTML5先行者学习网
    #-----delete the content between beginLine and endLine-----TWDHTML5中文学习网 - HTML5先行者学习网
    print beginLine, endLineTWDHTML5中文学习网 - HTML5先行者学习网
    lineNo =1TWDHTML5中文学习网 - HTML5先行者学习网
    for eachline in inputf:TWDHTML5中文学习网 - HTML5先行者学习网
        if lineNo < beginLine:TWDHTML5中文学习网 - HTML5先行者学习网
        print eachlineTWDHTML5中文学习网 - HTML5先行者学习网
        outputf.write(eachline)TWDHTML5中文学习网 - HTML5先行者学习网
        elif lineNo > endLine:TWDHTML5中文学习网 - HTML5先行者学习网
        print eachlineTWDHTML5中文学习网 - HTML5先行者学习网
        outputf.write(eachline)TWDHTML5中文学习网 - HTML5先行者学习网
        lineNo = lineNo +1TWDHTML5中文学习网 - HTML5先行者学习网
        TWDHTML5中文学习网 - HTML5先行者学习网
        inputf.close()TWDHTML5中文学习网 - HTML5先行者学习网
        outputf.close()TWDHTML5中文学习网 - HTML5先行者学习网
        os.rename(outputfilename, src)TWDHTML5中文学习网 - HTML5先行者学习网
        fileList.append(src)TWDHTML5中文学习网 - HTML5先行者学习网
    except:TWDHTML5中文学习网 - HTML5先行者学习网
        print'Error: unexcept error.'TWDHTML5中文学习网 - HTML5先行者学习网
        inputf.close()TWDHTML5中文学习网 - HTML5先行者学习网
        outputf.close()TWDHTML5中文学习网 - HTML5先行者学习网
    return TrueTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
#--------------------------------------------------------------TWDHTML5中文学习网 - HTML5先行者学习网
def commentDir(src, fileList):TWDHTML5中文学习网 - HTML5先行者学习网
    '''TWDHTML5中文学习网 - HTML5先行者学习网
    description:TWDHTML5中文学习网 - HTML5先行者学习网
         comment files in src(dir)TWDHTML5中文学习网 - HTML5先行者学习网
    param src:TWDHTML5中文学习网 - HTML5先行者学习网
         operate files in src(dir)TWDHTML5中文学习网 - HTML5先行者学习网
    '''TWDHTML5中文学习网 - HTML5先行者学习网
    #if dir exist?TWDHTML5中文学习网 - HTML5先行者学习网
    ifnot os.path.exists(src):TWDHTML5中文学习网 - HTML5先行者学习网
        print'Error: dir - %s is not exist.'%s (src)TWDHTML5中文学习网 - HTML5先行者学习网
        return FalseTWDHTML5中文学习网 - HTML5先行者学习网
    filelists = os.listdir(src)TWDHTML5中文学习网 - HTML5先行者学习网
    for eachfile in filelists:TWDHTML5中文学习网 - HTML5先行者学习网
        eachfile = src +'/'+eachfileTWDHTML5中文学习网 - HTML5先行者学习网
        if os.path.isdir(eachfile):TWDHTML5中文学习网 - HTML5先行者学习网
            commentDir(eachfile, fileList)TWDHTML5中文学习网 - HTML5先行者学习网
        elif os.path.isfile(eachfile):TWDHTML5中文学习网 - HTML5先行者学习网
            commentFile(eachfile, fileList)TWDHTML5中文学习网 - HTML5先行者学习网
    return TrueTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
#--------------------------------------------------------------TWDHTML5中文学习网 - HTML5先行者学习网
def main():TWDHTML5中文学习网 - HTML5先行者学习网
    if len(sys.argv) <2:TWDHTML5中文学习网 - HTML5先行者学习网
        usage()TWDHTML5中文学习网 - HTML5先行者学习网
        sys.exit(1)TWDHTML5中文学习网 - HTML5先行者学习网
    src = sys.argv[1]TWDHTML5中文学习网 - HTML5先行者学习网
    if os.path.isdir(src):TWDHTML5中文学习网 - HTML5先行者学习网
        dire = os.path.abspath(src)TWDHTML5中文学习网 - HTML5先行者学习网
        dirFlag = TrueTWDHTML5中文学习网 - HTML5先行者学习网
    elif os.path.isfile(src):TWDHTML5中文学习网 - HTML5先行者学习网
        fl = os.path.abspath(src)TWDHTML5中文学习网 - HTML5先行者学习网
        dirFlag = FalseTWDHTML5中文学习网 - HTML5先行者学习网
    else:TWDHTML5中文学习网 - HTML5先行者学习网
        print'Error'TWDHTML5中文学习网 - HTML5先行者学习网
    fileList = []TWDHTML5中文学习网 - HTML5先行者学习网
    if dirFlag:TWDHTML5中文学习网 - HTML5先行者学习网
        commentDir(dire, fileList)TWDHTML5中文学习网 - HTML5先行者学习网
    else:TWDHTML5中文学习网 - HTML5先行者学习网
        commentFile(fl, fileList)TWDHTML5中文学习网 - HTML5先行者学习网
    if fileList:TWDHTML5中文学习网 - HTML5先行者学习网
        print'Successful handle file: ...'TWDHTML5中文学习网 - HTML5先行者学习网
        for eachfile in fileList:TWDHTML5中文学习网 - HTML5先行者学习网
            print eachfileTWDHTML5中文学习网 - HTML5先行者学习网
    print'Done'TWDHTML5中文学习网 - HTML5先行者学习网
    return TrueTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
#--------------------------------------------------------------TWDHTML5中文学习网 - HTML5先行者学习网
if__name__=='__main__':TWDHTML5中文学习网 - HTML5先行者学习网
    main()TWDHTML5中文学习网 - HTML5先行者学习网

4、Python的特点TWDHTML5中文学习网 - HTML5先行者学习网
Python入门我强烈推荐下面的资料,深入学习请阅读其它资料:TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
《A Byte of Python》http://www.swaroopch.com/notes/PythonTWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
《简明 Python 教程》http://woodpecker.org.cn/abyteofpython_cn/chinese/TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者总会拒绝花哨的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常认为比Perl具备更好的可读性。TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python程序员倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。目前可用的JIT技术是Pysco。Cython可以将Python代码转换成C代码。TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
相对于Lisp这种传统的函数式编程语言,Python对函数式编程只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式编程工具。TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
虽然Python可能被粗略地分类为「脚本语言」(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高阶动态编程语言,原因是「脚本语言」泛指仅作简单编程任务的语言,如shell script、JavaScript等只能处理简单任务的编程语言,不能与Python相提并论。TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
Python本身被设计为可扩展的。并非所有的特性和功能都集成到语言核心。可以使用C语言、C++、Cython来编写扩展模块。Python解释器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种「胶水语言」(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目使用C++编写性能要求极高的部分,然后用Python调用相应的模块。TWDHTML5中文学习网 - HTML5先行者学习网
TWDHTML5中文学习网 - HTML5先行者学习网
Python的特点:TWDHTML5中文学习网 - HTML5先行者学习网
1、第一行是特殊形式的注释:它被称作 组织行 ——源文件的头两个字符是#!,后面跟着一个程序。这行告诉你的Linux/Unix系统当你 执行 你的程序的时候,它应该运行哪个解释器。建议使用这种形式——#!/usr/bin/env python,而不是——#!/usr/bin/python。 TWDHTML5中文学习网 - HTML5先行者学习网
2、缩进很重要。Python使用缩进而不是一对花括号来划分语句块。 TWDHTML5中文学习网 - HTML5先行者学习网
3、关键参数的概念很有用 TWDHTML5中文学习网 - HTML5先行者学习网
4、None 返回"没有任何东西",每一个函数默认返回None TWDHTML5中文学习网 - HTML5先行者学习网
5、pass 空语句块 TWDHTML5中文学习网 - HTML5先行者学习网
6、文档字符串,__doc__,没多大用。但是一个好的Python程序,应该要有文档字符串,且一般遵循:“文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。 ” TWDHTML5中文学习网 - HTML5先行者学习网
6、python中引入模块后(import)首先就要执行模块的主块,当然模块中可能全是函数。如果要避免使用模块名称:from 模块名 import 符号名,那麽使用该符号名就不用使用模块名+点号+符号名,但是不推荐,容易造成程序不容易读,而且容易出错(特别是在python简洁而简单的语法的基础上) import... as ... 起一个别名 TWDHTML5中文学习网 - HTML5先行者学习网
7、模块的__name__属性,相当有用,解决了import的缺点,可以实现如果不是运行的本模块而被调用,不调用主块TWDHTML5中文学习网 - HTML5先行者学习网
#!/usr/bin/env python# Filename: using_name.pyif __name__ == '__main__':print 'This program is being run by itself'else:print 'I am being imported from another module'TWDHTML5中文学习网 - HTML5先行者学习网
8、删除一个变量/名称,你将无法再使用该变量——它就好像从来没有存在过一样。 TWDHTML5中文学习网 - HTML5先行者学习网
9、可以使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表 TWDHTML5中文学习网 - HTML5先行者学习网
10、元组语法与list相似,意义相当于枚举,可以为空,如果只含有一个元素,需要加逗号以区别于表达式(“one”, ) TWDHTML5中文学习网 - HTML5先行者学习网
11、元组最通常的用法是用在打印语句中,可以使用格式控制符TWDHTML5中文学习网 - HTML5先行者学习网
#!/usr/bin/env python# Filename: print_tuple.pyage = 22name = 'Swaroop'print '%s is %d years old' % (name, age)print 'Why is %s playing with that python?' % nameTWDHTML5中文学习网 - HTML5先行者学习网
12、有一个内建的字典类型,但是没有冲突的解决方案,但这确实是字典的定义,想要更好的结构就自己实现吧。语法:{key:value, key1:value1,...} TWDHTML5中文学习网 - HTML5先行者学习网
13、序列的概念:列表、元组和字符串都是序列,支持索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列。索引可以是负数,在那样的情况下,位置是从序列尾开始计算的。序列的神奇之处在于你可以用相同的方法访问元组、列表和字符串。 TWDHTML5中文学习网 - HTML5先行者学习网
14、如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单 对象 ),那么你必须使用切片操作符来取得拷贝。如果你只是想要使用另一个变量名,两个名称都 参考 同一个对象,那么如果你不小心的话,可能会引来各种麻烦。[浅拷贝和深拷贝的关系] TWDHTML5中文学习网 - HTML5先行者学习网
15、str类有很多方法,如果要非常熟悉str的操作,参考help(str) TWDHTML5中文学习网 - HTML5先行者学习网
16、剩下的就是掌握很多系统库了,这个要靠经验,比如说os.system(命令)可用于执行shell命令,了解的库越多,python就会让你完成更强大的功能。 TWDHTML5中文学习网 - HTML5先行者学习网
17、接下来是面向对象,基本概念一样,this由代替self, 而且这个名字不一定要写成self,任何名字都可以,这也带来了一个缺点,你必须在形参里面指定,调用函数时不用传递该参数。TWDHTML5中文学习网 - HTML5先行者学习网
构造函数:__init__(self, ......)TWDHTML5中文学习网 - HTML5先行者学习网
析构函数:__del__ 对象灭亡时或者调用del时被调用TWDHTML5中文学习网 - HTML5先行者学习网
Python中所有的类成员(包括数据成员)都是公共的 ,所有的方法都是有效的 。只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。TWDHTML5中文学习网 - HTML5先行者学习网
支持多重继承 TWDHTML5中文学习网 - HTML5先行者学习网
18、如果你已经厌烦了java、c++的读写文件,那么python会让你重新喜欢上文件读写,python主张解决问题的方案越少越好,写文件就一个f = file(name, 'w'),f.write(...)读文件也一样,f = file(name),f.read或readline,最后close TWDHTML5中文学习网 - HTML5先行者学习网
19、cPickle和pickle是叫做存储器的重要模块,可以非常方便地将一个对象存储到一个文件,然后再取存储从文件中取出来pickle.dump(object, file object),构造对象时,pickle.load(file object) [储存、取存储] TWDHTML5中文学习网 - HTML5先行者学习网
20、异常:raise,except,try...finally TWDHTML5中文学习网 - HTML5先行者学习网
21、sys模块和os模块有很多强大功能。 TWDHTML5中文学习网 - HTML5先行者学习网
22、在函数中接收元组和列表当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用*和**前缀。这种方法在函数需要获取可变数量的参数的时候特别有用。 TWDHTML5中文学习网 - HTML5先行者学习网
23、lambda形式:lambda语句被用来创建新的函数对象,并且在运行时返回它们。lambda语句用>来创建函数对象。本质上,lambda需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新建的函数返回。注意,即便是print语句也不能用在lambda形式中,只能使用表达式。 TWDHTML5中文学习网 - HTML5先行者学习网
24、exec、eval、assert、repr函数和反引号用来获取对象的可打印的表示形式。你可以通过定义类的__repr__方法来控制你的对象在被repr函数调用的时候返回的内容。 TWDHTML5中文学习网 - HTML5先行者学习网
 TWDHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助