美文网首页
python 10天快速教程 Day6

python 10天快速教程 Day6

作者: XaviSong | 来源:发表于2020-07-16 19:41 被阅读0次

本节重点

  1. 装饰器
  2. 文件操作

一、装饰器

使用场景

在函数内部代码逻辑比较多的时候,想添加简易功能,但不便在函数内修改,容易破坏函数内的结构。

1、简单装饰器(前情提要
定义:

本质上也是闭包,可以给原函数的功能进行扩展,不改变原函数定义与调用操作。

示例:
#在AAAA前面加上BBBBB,装饰器本质是一个闭包
def show4():
    print("AAAAA")
def decorator(new_func):
    def inner():
        print("BBBBB")
        new_func()
    return inner
# 重新给show4赋值
show4 = decorator(show4)
show4()

#语法糖形式
@decorator
def show5():
    print("CCCCCCCC")
show5()
'''
BBBBB
AAAAA
BBBBB
CCCCCCCC
'''
2、装饰器修饰带参数的函数
示例:
# 装饰器修饰带有参数的函数
def decorater(newfunc):
    def inner(num1,num2):
        print("计算两数之和")
        return newfunc(num1,num2)
    return inner
@decorater # 等价于 sum = decorater(sum)
def sum(num1,num2):
    print(num1+num2)

sum(4,5)
'''
计算两数之和
9
'''
3、使用带有参数的装饰器

与上一条区分,这里是说装饰器本身接受参数,需要在原本的装饰器外部进行包裹。

示例:
# 装饰器自己带参数,要在装饰器外再包裹一层
def get_decorator(str):
    def decorater(newfunc):
        def inner(*args):
            print(str)
            return newfunc(*args)
        return inner
    return decorater

@get_decorator("计算两数之和")
def sum(num1,num2):
    print(num1+num2)

@get_decorator("计算三数之和")
def sum2(num1,num2,num3):
    print(num1+num2+num3)

sum(4,5)
sum2(6,7,8)
'''
计算两数之和
9
计算三数之和
21
'''
4、通用装饰器,可用于修饰任意函数

inner接收参数时使用不定长参数,即可。

# 使用通用装饰器,修饰任意函数,参数数量可变
def gdecorator(newfunc):
    def inner(*args,**kwargs): # 不定长位置参数与不定长关键字参数
        print("经通用装饰器修饰的求和函数")
        return newfunc(*args,**kwargs)
    return inner

@gdecorator
def sum1(num1,num2):
    print(num1+num2)
    return num1+num2

@gdecorator
def sum2(num1,num2,num3):
    print(num1+num2+num3)
    return num1+num2+num3

s1 = sum1(2,3)
s2 = sum2(3,4,5)
print(s1,s2)

二、文件

1、文件的访问模式

常用的为以下六种

  • r:只读,当路径下没有此文件时,会报错
  • w:只写,若路径下文件已存在,原有内容会被清空;原本不存在,会帮助创建空文件
  • a:追加

rb、wb、ab,对应以上三种模式,只不过是以二进制形式操作。比较常用,可兼容不同数据,文本、图片,视频。

2、r,w,a示例
# ------------r模式---------------
file = open("1.txt","r",encoding = "utf-8") # 打开,文件不存在崩溃,为了兼容设置编码格式为utf-8
content = file.read() # 文件内容读出
print(content)
file.close() # 关闭,避免内存泄漏
# ------------w模式---------------
file = open("1.txt","w",encoding = "utf-8")
file.write("宋")
file.write("B")
file.write("K")
file.close() # 关闭
# ------------a模式---------------
file = open("1.txt","a",encoding = "utf-8") # 追加
file.write("宋")
file.write("B")
file.write("K")
file.close() # 关闭
3、rb,wb,ab示例
# rb模式
file = open("1.txt","rb") # 二进制格式不能给编码格式
file_data = file.read() # 文件数据读出
file_data.decode("utf-8") # 二进制方式解码
file.close()
#wb
file = open("1.txt","wb") # wb默认仍会覆盖
file_data = "BBBBBBBBBBB"
file_data.encode("utf-8") # 以二进制方式写入需要编码
file.write(file_data)
file.close() # 避免内存泄漏
#ab
file = open("1.txt","ab",encoding="utf-8") # 追加
file_data = "BBBBBBBBBBB"
file_data.encode("utf-8") # 以二进制方式写入需要编码
file.write(file_data)
file.close() # 避免内存泄漏
4、文件不同读取操作
  • read():全部读取
  • readline():只读取一行数据,遇到换行停止
  • readlines():文件中数据按照每行读取,每行内容加换行符作为一个元素,存入列表

解码时可以遍历列表

文件指针:

可以先设置文件指针的位置,再读取文件,从而跳过文件的部分内容

file = open("1.txt","r",encoding = "utf-8") 
file.tell()#:当前指针位置
file.seek(3)#:设置指针为3,先设置指针,再用file.read()读取
content = file.read() # 文件内容读出
print(content)
file.close() # 关闭,避免内存泄漏
模拟大文件的拷贝:
#1.打开源数据文件
src_file = open("1.txt","rb")
#2.指定写入的路径
dst_file = open("2.txt","wb")
#3.读取
while True:
    file_data = src_file.read(1024) # 循环一次读1024个字节,一点一点读,避免大文件全部载入内存
    if file_data:
        dst_file.write(file_data)
    else:
        print("数据读取完成了")
        break
#4.关闭
dst_file.close()
src_file.close()
文件与文件夹相关操作:
os、shutil模块
1、重命名文件
import os
file = open("1.txt","w",encoding = "utf-8")
file.write("Hello")
file.close()
# 修改文件的名字,如果文件不存在会报错
os.rename("1.txt","3.txt")
2、创建文件夹
os.mkdir("A") # 在当前路径下创建,如果已经存在A,会报错
os.rename("A","B") # 改名
3、查看当前路径
current_path = os.getcwd()
4、切换到指定路径
os.chdir("A") # 切换到A文件夹下
file = open("1.txt","w",encoding = "utf-8") # 在A下
5、删除文件
os.remove("A") # 若文件夹下有文件,不可以删除
os.remove("A/1.txt") # 删除文件夹内的文件

import shutil
shutil.rmtree("A") # 删除文件树,级联删除全部内容

上一篇:python 10天快速教程 Day5
下一篇:python 10天快速教程 Day7

相关文章

  • Python 快速教程(网络)

    注:采转归档,自己学习查询使用 Python 快速教程(网络01):原始Python服务器Python 快速教程(...

  • Python 文档手册

    Python 官方文档 Vamei老师-Python快速教程 廖雪峰老师-Python教程 笨办法学Python ...

  • Python 快速教程(Django)

    注:采转归档,自己学习查询使用 Python 快速教程(Django01):初试天涯Python 快速教程(Dja...

  • 首次简书日记_Python资料相关

    Vamei的Python快速教程 廖雪峰的入门教程 简明 Python 教程 实验楼Python学习路径: 系统的...

  • Python 快速教程(进阶篇)

    注:采转归档,自己学习查询使用 Python 快速教程(进阶篇01): 词典Python 快速教程(进阶篇02):...

  • Python 快速教程(深入篇)

    注:采转归档,自己学习查询使用 Python 快速教程(深入篇01):特殊方法与多范式Python 快速教程(深入...

  • 初级知识0

    1. Python Python 教程 Python笔记(jupyter) 快速学会python 2.Matplo...

  • python数据结构教程 Day6

    python数据结构教程 Day6 本节重点 递归定义 递归调用的实现 简单递归的应用 一、递归 在python基...

  • Python 快速教程(标准库)

    注:采转归档,自己学习查询使用 Python 快速教程(标准库):走马观花Python 快速教程(标准库):学习准...

  • Python 快速教程(基础篇)

    注:采转归档,自己学习查询使用 Python 快速教程(基础篇01):Hello WorldPython 快速教程...

网友评论

      本文标题:python 10天快速教程 Day6

      本文链接:https://www.haomeiwen.com/subject/buumhktx.html