文件操作(续)

获得文件句柄位置,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,将\r\n转换为\n

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

  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

高阶函数

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

Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数的更多相关文章

  1. Learning Python 012 函数式编程 1 高阶函数

    Python 函数式编程 1 高阶函数 高阶函数 Q:什么是高阶函数? A:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数. 简单举个例子: def add(x, y, f): return ...

  2. python 函数式编程:高阶函数,map/reduce

    python 函数式编程:高阶函数,map/reduce #函数式编程 #函数式编程一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数 #(一)高阶函数 f=abs f print ...

  3. python函数式编程之高阶函数学习

    基本概念 函数式编程,是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量.因此,任意一个函数,只要输入确定,输出就确定的这种函数我们称之为纯函数,我们称这种函数没有副作用.而允许使用 ...

  4. 小白的Python之路 day3 函数式编程,高阶函数

    函数式编程介绍   函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的 ...

  5. Scala - 快速学习08 - 函数式编程:高阶函数

    函数式编程的崛起 函数式编程中的“值不可变性”避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为实参传递给另外一个函 ...

  6. Python3基础(3)集合、文件操作、字符转编码、函数、全局/局部变量、递归、函数式编程、高阶函数

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

  7. python学习笔记1 -- 函数式编程之高阶函数 map 和reduce

    我用我自己,就是高阶函数,直接表现就是函数可以作为另一个函数的参数,也可以作为返回值 首先一个知识点是 函数的表现形式,印象中的是def  fw(参数)这种方式定义一个函数 python有很多的内置函 ...

  8. python学习笔记1 -- 函数式编程之高阶函数 使用函数作为返回值

    使用函数作为返回值,看起来就很高端有木有,前面了解过函数名本身就是一个变量,就比如abs()函数,abs只是变量名,而abs()才是函数调用,那么我们如果把ads这个变量作为返回值返回会怎么样呢,这就 ...

  9. Python基础笔记:函数式编程:高阶函数、返回函数、匿名函数

    高阶函数 高阶函数:一个函数可以接收另一个函数作为参数 或 一个函数可以返回一个函数作为返回值,这种函数称之为高阶函数. #函数 add 接收 f 函数作为参数 >>> def ad ...

  10. Python3学习之路~3.2 递归、函数式编程、高阶函数、匿名函数、嵌套函数

    1 递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. def calc(n): print(n) if int(n / 2) == 0: return n r ...

随机推荐

  1. 立即终止Sleep的线程

    在实际工作中,我们需要每隔几分钟从API取数. while(isRunning) { work(); Thread.Sleep(5*60*1000); } 如果设置isRunning=false,也需 ...

  2. 关于微信公账号H5 API 调用的坑 BUG

    页面A已经配置过,如果是单页面跳转,则页面B可以共享当前的SDK配置(至少菜单是这样的) 刷新页面,原先的菜单仍然会保持原样,只是调用SDK已经失效了,需要重新配置,重新配置后,菜单仍然会保持原样(如 ...

  3. iotop使用详解

    iotop是top和iostat程序的混合体,能够显示系统中所有运行进程并将进程根据I/O统计信息排序. 这个软件使用了Linux内核的一些新特性,所以需要2.6.20或者更新的内核. 一般默认情况下 ...

  4. hibernate mysql 分页时报错 显示的代码和sql server 类似 select top 1……

    [ERROR][com.alibaba.druid.filter.stat.StatFilter]merge sql error, dbType mysql, sql : select top 1 d ...

  5. libevent-signal(1)

    现在已经知道,libevent有三种事件类型,分别是时钟事件,信号事件,i/o事件.今天就分析一下信号事件,下面是一个简单的信号事件demo #include <sys/types.h> ...

  6. 使用QT开发GoogleMap瓦片显示和下载工具(2)——Google地图瓦片投影和获取网址解析

    这篇主要说的是Google地图采用的投影方式,瓦片划分方式以及如何从给定的经纬度获取瓦片的数据的网址.所有资料均来自于网络,并亲自试验可行. Google地图投影 首先是地图投影问题,因为地球本身是一 ...

  7. C# Path类 FileStream(文件流) 与 File(文件) 读取的区别

    1.采用文件流读取数据是一点一点从文件中读取数据对内存的压力相对较小;而采用文件读取数据是一下全部读取过来对内存造成的压力相对较大 2.File读取: string str = @"E:\Q ...

  8. Anaconda常用命令

    conda版本: conda --version 环境信息: 激活环境后,conda info 查看环境已安装包: conda list 新建环境: conda create -n {NAME} [ ...

  9. PAT——1045. 快速排序

    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的N个互不相同的正整数的排列,请问有多 ...

  10. 【题解】洛谷P1541 [NOIP2010TG] 乌龟棋(类似背包的DP)

    题目来源:洛谷P1541 思路 类似背包的题 总之就是四种卡牌取的先后顺序不同导致的最终ans不同 所以我们用一个四维数组每一维分别表示第几种取了几张的最大分数 然后就是简单DP解决 代码 #incl ...