zoukankan      html  css  js  c++  java
  • Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

    文件操作(续)

    获得文件句柄位置,f.tell(),从0开始,按字符数计数

    f.read(5),读取5个字符

    返回文件句柄到某位置,f.seek(0)

    文件在编辑过程中改变编码,f.detech()

    获取文件编码,f.encoding()

    获取文件在内存中的编号,f.fileno()

    获取文件终端类型(tty、打印机等),f.isatty()

    获取文件名,f.name()

    判断文件句柄是否可移动(tty等不可移动),f.seekable()

    判断文件是否可读,f.readable()

    判断文件是否可写,f.writeable()

    强制刷新(写文件到硬盘),f.flush()

    演示flush方法:

    import sys,time

    for I in range(10):

    sys.stdout.write(“#”)

    sys.stdout.flush()

    time.sleep(0.1)

    清空文件内容,r,w模式不能使用?f.trancate(),无内容全清空,否则从头开始指定字符数后截断

    r+,读写模式,打开文件读,追加内容

    w+,写读模式,创建文件写,只能追加写,用处不大

    a+,追加读

    rb,二进制文件读,用于网络传输,二进制文件使用,在网络传输时必须使用二进制文件

    wb,二进制文件写,写二进制文件,str.encode(“utf-8”)

    U,rU,r+U,将 转换为

    文件处理时,修改源文件会覆盖修改位置以后的内容,修改方法:

    1. 加载到内存处理
    2. 将文件修改放入新文件

    文件打开,操作完毕后自动关闭,with open(file, mode, encode) as f_obj

    在代码中,表示换行,建议一行不超过80字符,使用换行

    字符编码与解码

    首先要知道字符使用的字符集,使用decode解码,然后用目标字符集进行编码,使用encode,这样就能正常显示在目标字符集的操作系统上

    python3中默认采用Unicode编码(与py文件编码是两回事),python2默认采用ASCII编码,Linux采用Unicode编码,Windows才GBK编码

    获取python默认编码,sys.getdefaultcoding()

    s=u”你好”,u表示采用Unicode编码,s.decode(“utf-8”)会出错

    python2中GB2312转换为utf-8如何做?

    字符集转换时,要先转码为Unicode,在编码为目标字符集

    函数

    关键字,def

    过程,def,无返回值,隐式返回None

    import time

    time_format = “%Y-%m-%d %x”

    time_current = time.strftim(time_format)

    def test1()

    pass

    无返回值,None;1个返回值,object;多个返回值,元组

    调用方式:

    关键字调用,test(x,y),test(y=1, x=2),显式改变调用顺序

    位置调用,要与形参一一对应

    混合调用,按位置调用方式,关键字调用不能写在位置参数前面

    test(x,y,z), test(2,z=3,y=6)

    给形参赋默认值,使用默认参数值

    场景:安装程序时的默认设置

    实参不固定的情况,采用参数组

    def test(*args),多个实参放入元组

    传值,test(1,2,3,4,5),test(*[1,2,3,4,5])

    可以与固定参数结合,test(x,*args)

    字典形参,def test(**kwargs)

    传值,test(name=”alex”,age=8,sex=”M”)

    传字典,test(**{“name”:”alex”,”age”:8,”sex”:”M”})

    可以与位置参数、默认参数、参数组结合使用

    结合时的顺序:位置参数,默认参数,参数组,字典参数

    作用域与声明顺序

    函数调用必须在函数声明的后边,函数之间的声明顺序没有要求。

    局部变量只在函数(过程)内部生效,函数(过程)是这个变量的作用域(起作用的范围)

    全局变量应在顶层定义

    可以在函数(过程)内部声明、修改全局变量,使用global关键字声明变量,但不要使用这种方法修改全局变量,因为一个函数可能被系统的各部分调用,这将导致全局变量的值无法确定。如果想修改全局变量,可以在函数中返回修改的值。

    对象可以在函数(过程)中被修改,如果不想具有这样的效果,在函数中应使用克隆后的对象。

    递归

    一个函数在内部调用自身

    特性:

    必须有一个明确的结束条件,没有结束条件会导致超过最大递归层数(英文)错误,最大999层

    每进入更深一层,问题规模应比上次有所减少

    效率不高,函数是采用栈调用的,可能导致栈溢出

    python中,除法默认就可以是小数的结果,如果想取整,使用诸如int(1/2)的方式截断(//可以吗?)

    递归加断点调试

    函数式编程

    是一种数学计算,输入确定,输出就确定,没有变量,不存在逻辑判断(这样才能确定输出),python部分支持。

    语言:list,haskell,erlang

    高阶函数

    一个函数接收另一个函数作为参数,这种函数称为高阶函数

  • 相关阅读:
    input 蓝边
    4.【ac自动机】模式串匹配
    3.【二叉树】最近公共祖先
    2.【动态规划】最长回文子串
    1. 【线段树】
    DbUtil
    oauth2
    cas
    Spring-security-web
    JSON Web Tokens
  • 原文地址:https://www.cnblogs.com/koctr/p/7252770.html
Copyright © 2011-2022 走看看