01Python基础阶段_Day06

01Python基础阶段_Day06

匿名函数 lambda

def 函数名(参数列表):
函数体

格式:
lambda [形参1], [形参2], … : [单行表达式] 或 [函数调用]

lambda定义和普通函数的区别:

  1. lambda 没有函数名
  2. lambda 参数列表外没有括号
  3. lambda 函数体中,只能实现简单的表达式计算或函数调用
  4. lambda 函数体中,不能使用Return,if,while,for-in 这些都不行
  5. 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")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值