大小孩

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

本节内容

1.文件操作
1.对文件操作流程
2.基本操作
3.打开文件的模式
4.with语句
5.其他语法
6.Python中文件路径写法
2.字符编码与转码
1.简介
2.默认编码
3.其他介绍
3.函数
1.函数基本语法及特性
2.递归
3.函数式编程
4.高阶函数
5.匿名函数

一、文件操作

1、对文件操作流程

  • 打开文件,得到文件句柄并赋值给一个变量
  • 通过句柄对文件进行操作
  • 关闭文件

2、基本操作

f = open('lyrics') #打开文件当前文件夹下lyrics,默认打开方式r  
first_line = f.readline()  
print('first line:',first_line) #读一行  
print('我是分隔线'.center(50,'-'))  
data = f.read()# 读取剩下的所有内容,文件大时不要用  
print(data) #打印文件  
           
f.close() #关闭文件

3、打开文件的模式

(1) 基本模式

  • r,只读模式(默认)
  • w,只写模式(不可读:不存在则创建,存在则删除内容。)
  • a,追加模式(可读:不存在则创建,存在则只追加内容。)

(2) "+" 表示可以同时读写某个文件

  • r+,可读写文件(可读、可写、可追加)
  • w+,写读
  • a+,同a

(3) "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

(4) "b"表示处理二进制文件

如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注
  • rb
  • wb
  • ab

4、with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log','r') as f:  
   pass 

#如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
with open('log1') as obj1, open('log2') as obj2:  
    pass  

5、其他语法

f = open('yesterday','r',encoding='utf-8')  #文件句柄  
          
print(f.buffer)  
f.flush()       #强制刷新,即使内存中数据存入硬盘。默认是当buffer满了才会...  
          
#文件指针操作  
print(f.tell())         #文件读指针所在位置,按照读取的字符数计数  
print(f.readline())     #读取文件中一行数据  
print(f.tell())  
print(f.readline())  
print(f.readline())  
f.seek(72)              #使文件读指针返回该位置  
print(f.readline())  
          
          
#使用迭代器(内存中只存一行数据,推荐的方式)  
count = 0  
for line in f:  
    if count == 9:  
        print('9,我是分割线'.center(20,'-'))  
    else:  
        print(count,line.strip())  
    count += 1 

#补充
f.read(4)   #从文件读指针开始读4个字符  
print(f.encoding)   #获取文件的编码  
print(f.fileno())   #文件句柄在内存中的编号  
f.flush()    #强制使内存中数据存入硬盘,默认buffer满了才会写
f.truncate(10) #从文件开始保留10个字符截断(10个字符以后的删除)  
Python写文件只能覆盖(w)或者追加(a)

6、Python中文件路径写法

# \在字符串中被当做转义字符

'd:\\a.txt'  #转义的方式  
r'd:\a.txt'  #声明字符串不需要转义  
'd:/a.txt'   #使用/  

二、字符编码与转码

1、简介

转码过程如下图所示:

Unicode格式的代码可以在uft-8编码格式中正常显示。
encode()会将内容转换成相应编码格式的二进制形式,需要decode()才能显示中文。

2、Python默认编码

  • Python2    ->   ASCII
  • Python3    ->   Unicode(非utf-8)

3、其他介绍

参考:http://www.cnblogs.com/alex3714/articles/5717620.html

三、函数

1、函数基本语法及特性

(1) 编程方法

  • 面向对象 -> 类 -> class
  • 面向过程 -> 过程 -> def(没有返回值)
  • 函数式编程 -> 函数 -> def(有返回值)
编程语言中函数定义:函数是逻辑结构化和过程化的一种编程方法

(2) 使用函数优点

  • 代码重用
  • 保持一致性
  • 可扩展性

(3) 定义方法

def fun1():     #def定义函数关键字,fun1函数名,()内可定义形参  
    """My first function"""    #文档描述(强烈建议添加)  
    print('My first function')      #代码块或程序处理逻辑  
    return 0            #返回值,代表函数结束  

(4) 函数的调用

#定义函数  
def test(x,y):  #x,y为形参  
    print(x)  
    print(y)  
          
#调用(关键字参数不能写在位置参数之前)  
test(1,2)   #位置参数调用(1,2为实参,与形参一一对应)  
test(y=2,x=1)   #关键字调用(与形参顺序无关)  
          
#默认参数  
def test1(x,y=2):  #调用函数时传了y值就使用,否则使用默认值  
    print(x)  
    print(y)  
          
#多个实参  
def test2(*args):  #接收n个位置参数转换成元组 
    print(args)  
          
          
def test3(**kwargs):  #接收n个关键字参数转换成字典  
    print(kwargs)  
          
test2(1,2,3,4)   #结果(1,2,3,4)  
test3(name='alise',age=8)   #结果{'name': 'alise', 'age': 8}  

(5) 局部变量

子程序中定义的变量。只在函数里生效,该函数就是这个变量的作用域。
def change_name(name):  
    print('before change>>>',name)      
    name = 'HQ'                #局部变量,只在函数里生效(这个函数就是这个变量的作用域)  
    print('after change>>>',name)  
          
name = 'alise'  
change_name(name)  
print('name>>>',name)  
          
#结果  
''''' 
before change>>> alise 
after change>>> HQ 
name>>> alise 
'''  

(6) 全局变量

脚本顶级定义的变量,作用域是整个程序。全局变量应该在脚本顶级显式定义,不能使用global定义全局变量。
在局部可以修改除数字、字符串之外类型的数据。
def change_name(name1):  
    print('before change>>>',name1)  
    global name                 #修改全局变量需要声明(慎用),容易造成不应该改的全局变量被改掉  
    name = 'HQ'                #局部变量,只在函数里生效(这个函数就是这个变量的作用域)  
    print('after change>>>',name1)  
          
name = 'alise'  
change_name(name)  
print('name>>>',name)  
          
#结果  
'''  
before change>>> alise  
after change>>> alise  
name>>> HQ  

#注:当全局变量和局部变量同名时,在定义局部变量的子程序内,局部变量起作用,在其他地方全 局变量起作用。

2、递归

递归:在函数内部,可以调用其他函数。如果一个函数在内部调用自己本身,这个函数就是递归函数。

(1) 特性

  • 必须有一个明确的结束条件。
  • 每次进入更深一层递归时,问题规模相比上次递归都应有所减少。
  • 递归效率不高,递归层次过多会导致栈溢出。

(2) 示例

def calc(n):  
    print(n)  
    if int(n/2) >0:      #明确的结束条件
        return calc( int(n/2) )   #进入更深一层递归时,问题规模相比上次递归有所减少    
print("->",n)  
          
calc(10) 

3、函数式编程

  • 特点:输入是确定的,输出就是确定的(Python做了部分支持)。
  • 是一种编程范式,也就是如何编写程序的方法论。
  • 主要思想是把运算过程尽量写成一系列嵌套的函数调用。

4、高阶函数

变量可以指向函数(即,函数的结果可以赋值给一个变量),函数的参数能接收变量。

(1) 什么是高阶函数

  • 一个函数接收另一个函数的函数名作为参数
  • 返回值中包含函数名

(2) 示例

def add(a,b,f):       #f为函数名的形参   
    return f(a)+f(b)    #返回值中包含函数名  
          
res = add(3,-6,abs)      #函数名abs作为参数传给add函数(abs是Python中一个求绝对值的内置方法)  
print(res)  
          
#结果  
'''
9 
'''

5、匿名函数

lambda ['læmdə] 匿名函数
没有函数名,只支持三元运算
calc = lambda x:x*3  
print(calc(3)) 

参考:

http://www.cnblogs.com/alex3714/articles/5717620.html
posted on 2017-12-20 20:58  大小孩  阅读(161)  评论(0)    收藏  举报