01Python基础阶段_Day06
匿名函数 lambda
def 函数名(参数列表):
函数体
格式:
lambda [形参1], [形参2], … : [单行表达式] 或 [函数调用]
lambda定义和普通函数的区别:
- lambda 没有函数名
- lambda 参数列表外没有括号
- lambda 函数体中,只能实现简单的表达式计算或函数调用
- lambda 函数体中,不能使用Return,if,while,for-in 这些都不行
- lambda 函数体中,可以使用if 实现的三目运算符.
使用场景:
变量 = lambda …
一般情况下,因为lambda的局限性,使得他不能实现复杂功能,只能实现一些简单功能
那么在使用时,一般会实现一个简单的,一次性使用的场景
高阶函数
map() 关系映射
functools.reduce()
filter()
文件操作概述及操作过程
文件作用:进行持久化存储数据
操作过程:
双击打开
点叉关闭
程序操作文件的过程:
打开-> 设置打开的模式,(读写) open(打开文件路径,打开模式)
操作文件(读取)
关闭-> close()
文件的访问模式
读取:
文本形式
程序文件
.txt 文件
.rtf 文件
二进制形式
音频文件
视频文件
图片文件
写入:
文本形式
程序文件
.txt 文件
.rtf 文件
二进制形式
音频文件
视频文件
图片文件
以文本方式打开方式的模式
r -> rt -> read text 以文本方式打开文件读,文件存在,打开成功,文件不存在,打开失败
w -> wt -> write text 以文本方式打开文件写,不管文件是否存在,都会新创建一个新文件
a -> at -> append text 以文件方式打开文件追加,文件不存在,创建文件,文件存在,那么打开文件然后将光标移动到文件的最后
以二进制形式打开文件的模式
rb 以二进制形式打开文件读取
wb 以二进制形式打开文件写入
ab 以二进制形式打开文件追加
(了解)
r+ 这三种模式都具有读取写入功能
w+
a+
文件的读取
read()
文件读取的几种方式
read() # 一次性将整个文件内容读取出来,不适合大文件读取
read(size) # 掌握 读取指定的字节数的文件内容 ,如果文件最后没有内容了,那么read的返回值是空字符串 , “” 一般指定4096
readline() # 读取一行
readlines() # 一次性将整个文件内的内容以行的形式读取出来,放到一个列表中
文件的写入
write(content) 该函数用来向文件中写入数据
前提: 使用该函数时,打开文件时,必须要给定写入权限,要具有写入模式
常用文件和文件夹操作
os 模块
rename()
remove()
mkdir()
getcwd()
chdir()
listdir() 掌握
rmdir()
批量修改文件名后复制文件
重点注意:
翻车点:
当以二进制模式打开文件进行文件操作时.
read 函数最终读取文件内容为空时,返回的结果为 b’’
表示是一个二进制的空字符串
在 Python2.7版本中. ‘’ == b’’ 结果为True
在 Python3.6版本中. ‘’ == b’’ 结果为False
面向对象概述
面向对象生活举例
类: 是对现实事物的属性和行为的抽象
类不能具体的表示一个真实存在的事物.
对象: 是类的一种实例表示
是真实存在的,看得见摸得到的
类与对象的关系
类(Class) 由3个部分构成
类的名称:类名
类的属性:一组数据
类的方法:允许对进行操作的方法 (行为)
类的定义格式
经典类:
class 类名:
属性
行为
新式类:
class 类名(object):
属性
行为
在 python3 以后,只有新式类
创建对象和使用对象的格式
对象名 = 类名(参数列表…)
对象调用方法的格式:
对象名.方法名(参数列表)
注意:
方法中参数列表中的第一个参数self,不需要手动传递,这个参数是由解释器在执行程序时,自动传递的
默认会将当前调用方法的对象引用传递进去
创建多个对象
问:如果通过同一个类,创建多次对象时,多次创建的对象是否是同一个?
答:
部分上课代码
``
# 匿名函数
# 将函数的引用赋值给另外一个变量
def show():
print("hello python")
func = show
print(func)
print(show)
func()
# 实现一个可以调用另外一个函数的函数
def call_function(func):
func()
call_function(show)
# 定义一个匿名函数
func = lambda: 1 + 1
print(func)
print(func())
# lambda默认返回表达计算结果,不需要return
func = lambda x: print((x ** 10))
func(2)
# map函数,对参数列表中的元素做一个映射
my_list = [1, 2, 3, 4, 5]
# 作用:这个函数为了给map的参数一进行传参
# 所以该函数有且只能有一个参数
def f(x):
return x ** 3
result_list = map(f, my_list)
for i in result_list:
print(i)
# 利用lambda来替代函数进行传参
result_list = map(lambda n: n ** 3, my_list)
for i in result_list:
print(i)
# 高阶函数reduce,需要先导入一个模块functools
# 作用是根据传入的参数一对参数二中的数据进行累计
import functools
my_list = list("hello")
result = functools.reduce(lambda s1, s2: s1 + s2, my_list)
print(result)
# 使用reduce求阶乘
my_list = [i for i in range(1, 6)]
result = functools.reduce(lambda n1, n2: n1 * n2, my_list)
print(result)
# filter函数
my_list = ["123", "234", "abc", "@#$", " ", "abc234", "123abc"]
# 过滤出所有的数字字符串
num_list = filter(lambda s: s.isdigit(), my_list)
for s in list(num_list):
print(s)
# 函数sort
my_list = [7, 2, 6, 1, 5, 3, 4, 8, 0]
my_list.sort()
print(my_list)
# 默认sort是无法对字典进行比较排序的
my_list = [{"id": 1, "name": "tom", "age": 12}, {"id": 3, "name": "rose", "age": 30},
{"id": 2, "name": "jack", "age": 27}]
# 按id 的升序排序,注意key=
my_list.sort(key=lambda d: d["id"])
print(my_list)
# 文件操作
# 打开文件,以写模式,后面那个参数就是写的意思,原来 没有会创建,有过会覆盖
# file = open("a.txt", "w")
# 以读的模式,rt和r的模式没啥区别,这个如果原来没有会报错
# file = open("a.txt", "r")
# 关闭文件
# file.close()
# 读取文件内容,默认读取全部内容,只适用文件小的情况
file = open("a.txt", "rt")
# content = file.read()
# 在读取数据时,指定读取一部分
# content = file.read(5)
# print(content, end="")
# content = file.read(5)
# print
# 读取多行文件的方式,适合读取大文件
while True:
content = file.read(1)
# 读取的结果为空串
if content == "":
break
print(content, end="")
file.close()
# 文件的其他操作
# 导入os模块
import os
# rename重命名
# os.rename("a.txt", "b.txt")
# 创建目录,如果当前目录存在会报错
# os.mkdir("test_dir")
# 获取当前工作目录
cwd = os.getcwd()
print(cwd)
# 获取当前目录下的文件列表
file_list = os.listdir(".")
print(file_list)
for i in file_list:
print(i)
# 改变当前目录到指定路径上
# os.chdir("")
# 删除文件
# os.remove("aaa.txt")
# 删除文件夹,当文件夹不是空的,删除会报错
# os.rmdir("")
# 实现一个复制命令
def file_copy(src, dst):
# 以读的方式 打开源文件
file_r = open(src, "r")
# 以写的方式打开目标文件
file_w = open(dst, "w")
# 循环
while True:
# 读取文件内容
content = file_r.read(1024)
# 将读取的文件内容写入到另一个文件中
if content == "":
print("文件拷贝成功")
break
# 写入文件
file_w.write(content)
# 关闭文件
file_r.close()
file_w.close()
file_copy("b.txt", "b_bak.txt")