zoukankan      html  css  js  c++  java
  • Python核心编程-基础2

    open() 和 file() 函数会同时存在, 完成相同的功能.一般说来, 我们建议使用 open() 来读写文件, 在您想说明您在处理文件对象时使用 file() , 例如 if instance(f, file)

    保留行分隔符:
    当使用输入方法如 read() 或者 readlines() 从文件中读取行时, Python 并不会删除行结束符. 这个操作被留给了程序员. 例如这样的代码在 Python 程序中很常见:f = pen('myFile', 'r')data = [line.strip() for line in f.readlines()]f.close()类似地, 输出方法 write() 或 writelines() 也不会自动加入行结束符. 你应该在向文件写入数据前自己完成

    文件对象的方法      操作
    file.close()        关闭文件
    file.fileno()        返回文件的描述符(file descriptor ,FD, 整数值)
    file.flush()         刷新文件的内部缓冲区
    file.isatty()        判断 file 是否是一个类 tty 设备
    file.next a ()        返回文件的下一行(类似于 file.readline() ), 或在没有其它行时引发 StopIteration 异常
    file.read(size=-1)     从文件读取 size 个字节, 当未给定 size 或给定负值的时候, 读取剩余的所有字节, 然后作为字符串返回
    file.readinto (buf, size)    从文件读取 size 个字节到 buf 缓冲器(已不支持)
    file.readline(size=-1)    从文件中读取并返回一行(包括行结束符), 或返回最大 size个字符

    file.readlines(sizhint=0)  读取文件的所有行并作为一个列表返回(包含所有的行结束符); 如果给定 sizhint 且大于 0 , 那么将返回总和大约为sizhint 字节的行(大小由缓冲器量的下一个值决定)( 比如说缓冲器的大小只能为 4K 的倍数,如果 sizhint 为 15k,则最后返回的可能是 16k———译者按)
    file.xreadlines ()         用于迭代, 可以替换 readlines() 的一个更高效的方法
    file.seek(off, whence=0)  在文件中移动文件指针, 从 whence ( 0 代表文件其始, 1 代表当前位置, 2 代表文件末尾)偏移 off 字节
    file.tell()         返回当前在文件中的位置
    file.truncate(size=file.tell())   截取文件到最大 size 字节, 默认为当前文件位置
    file.write(str)       向文件写入字符串
    file.writelines(seq)      向文件写入字符串序列 seq ; seq 应该是一个返回字符串的可迭代对象; 在 2.2 前, 它只是字符串的列表

    异常:

    def getFloat(num):
        try:
            retval = float(num)
        except ValueError, e:
            retval = 'value error: ', e
        except TypeError, e:
            retval = 'type error :', e
        except Exception, e:
            retval = 'exception : ', e
        else:
            print 'no error: return value is :', retval
        finally:
            print ' i am in finally', '-' * 10,
        return retval

    代码首先进入try中,如果没有异常进入else进而进入finally,如果发生异常进入finally,然后在进except代码块。可以发现无论是否发生异常,都进入finally。如果在finally中有return语句,那么就退出方法,不走except块

    异常名称        描述
    BaseException   所有异常的基类
    SystemExit      python 解释器请求退出
    KeyboardInterrupt   用户中断执行(通常是输入^C)
    Exception     常规错误的基类
    StopIteration   迭代器没有更多的值
    GeneratorExit    生成器(generator)发生异常来通知退出
    SystemExit      Python 解释器请求退出
    StandardError    所有的内建标准异常的基类
    ArithmeticError  所有数值计算错误的基类
    FloatingPointError  浮点计算错误
    OverflowError    数值运算超出最大限制
    ZeroDivisionError   除(或取模)零 (所有数据类型)
    AssertionError        断言语句失败
    AttributeError    对象没有这个属性
    EOFError     没有内建输入,到达 EOF 标记
    EnvironmentError   操作系统错误的基类
    IOError      输入/输出操作失败
    OSError     操作系统错误
    WindowsError    Windows 系统调用失败
    ImportError     导入模块/对象失败
    KeyboardInterrupt  用户中断执行(通常是输入^C)
    LookupError   无效数据查询的基类
    IndexError      序列中没有没有此索引(index)
    KeyError      映射中没有这个键
    MemoryError    内存溢出错误(对于 Python 解释器不是致命的)
    NameError     未声明/初始化对象 (没有属性)
    UnboundLocalError 访问未初始化的本地变量
    ReferenceError   弱引用(Weak reference)试图访问已经垃圾回收了的对象
    RuntimeError    一般的运行时错误
    NotImplementedError 尚未实现的方法
    SyntaxError   Python 语法错误
    IndentationError  缩进错误
    TabError     Tab 和空格混用
    SystemError     一般的解释器系统错误
    TypeError    对类型无效的操作
    ValueError     传入无效的参数
    UnicodeError    Unicode 相关的错误
    UnicodeDecodeError  Unicode 解码时的错误
    UnicodeEncodeError  Unicode 编码时错误
    UnicodeTranslateError Unicode 转换时错误
    Warning     警告的基类
    DeprecationWarning 关于被弃用的特征的警告
    FutureWarning   关于构造将来语义会有改变的警告
    OverflowWarning  旧的关于自动提升为长整型(long)的警告
    PendingDeprecationWarning 关于特性将会被废弃的警告
    RuntimeWarning   可疑的运行时行为(runtime behavior)的警告
    SyntaxWarning   可疑的语法的警告
    UserWarning    用户代码生成的警告

    函数的使用:

    def newfoo(arg1, arg2, *nkw, **kw):
        print 'arg1 is:', arg1
        print 'arg2 is:', arg2
        for eachNKW in nkw:
            print 'additional non-keyword arg:', eachNKW
        for eachKW in kw.keys():
            print "additional keyword arg '%s': %s" % 
                (eachKW, kw[eachKW])
    aTuple = (6, 7, 8)
    aDict = {'z': 9}
    newfoo(1, 2, 3, x=4, y=5, *aTuple, **aDict)
    newfoo(1, 2, 3, *'aTuple', x=4, y=5, **aDict)

    *修饰的叫非关键字可变长参数,**修饰的叫关键字可变长参数。他们可以出现在一个函数中,只要关键字字典是最后一个参数并且非关键字元祖先于它之前出现。
    匿名函数lambda。如:a = lambda x, y=2: x + y
    内建函数apply(),filter(),map(),reduce()

    内建函数                  描述
    apply(func[, nkw][, kw])     用可选的参数来调用 func,nkw 为非关键字参数,kw关键字参数;返回值是函数调用的返回值。
    filter(func, seq)        调用一个布尔函数 func 来迭代遍历每个 seq 中的元素; 返回一个使 func 返回值为 ture 的元素的序列。
    map(func, seq1[,seq2...])     将函数 func 作用于给定序列(s)的每个元素,并用一个列表来提供返回值;如果 func 为 None, func 表现为一个身份函数,返回一个含有每个序列中元素集合的 n 个元组的列表。
    reduce(func, seq[, init])     将二元函数作用于 seq 序列的元素,每次携带一对(先前的结果以及下一个序列元素),连续的将现有的结果和下雨给值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值;如果初始值 init 给定,第一个比较会是 init 和第一个序列元素而不是序列的头两个元素。

    简单来说,就是apply()接下来会淘汰,没意义。filter()就是从seq中经过func筛选。map()就是seq1中所有的参数都要执行一遍func。reduce是从前两个得出一个结果a,在用a和seq中的下一个得出结果b依次类推。

    偏函数(关键字方法partial()),如:baseTwo = partial(int, base=2),调用:baseTwo('10010')这个方法的意义是从2进制获取10进制数

    在方法中的变量为局部变量,如果方法中的局部变量名和全局变量名冲突,还想用全局变量的属性,用global关键字修饰

    闭包和装饰器:

    def deco(arg):
        if arg:
            def _deco(func):
                def __deco(*args, **kargs):
                    print 'before func'
                    try:
                        return func(*args,** kargs)
                    finally:
                        print 'after func'
                return __deco
            return _deco
    
    @deco(True)
    def func(name='fzk'):
        return  name, 'bad boy'
        
    print func('fzk')

    生成器:

    def simpleGen():
        yield 1
        yield 2
    myG=simpleGen()
    print myG.next()

    名称空间:

    在执行期间有两个或三个活动的名称空间。 这三个名称空间分别是局部名称空间, 全局名称空间和内建名称空间, 但局部名称空间在执行期间是不断变化的, 所以我们说"两个或三个"。 从名称空间中访问这些名字依赖于它们的加载顺序, 或是系统加载这些名称空间的顺序。Python 解释器首先加载内建名称空间。 它由 __builtins__ 模块中的名字构成。 随后加载执行模块的全局名称空间, 它会在模块开始执行后变为活动名称空间。 这样我们就有了两个活动的名称空间。

  • 相关阅读:
    NULL、nil、Nil、NSNull的区别
    URL中有中文字符,转码方法
    iOS极光推送 点击推送消息跳转页面
    iOS中响应者链条-触摸事件
    WKWebKit基础
    iOS开发之详解正则表达式
    iOS中正则表达式的三种使用方式
    VS下载Github的项目引用报错
    RabbitMQ环境搭建
    ASP.NET Core之NLog使用
  • 原文地址:https://www.cnblogs.com/badboyf/p/6067461.html
Copyright © 2011-2022 走看看