目录
一、高阶函数
1.lambda函数
2.lambda函数注意事项
3.map用法
4.map和lambda函数配合
二、reduce函数
1.reduce基本应用
2.reduce和匿名函数配合
三、filter()函数
1.简单用法
2.高阶应用
四、列表排列方法(key和lambda问题)
1.正常排序
2.key值问题
3.lambda函数对key值的解决办法
五、文件
1.文件操作
2.读取文件
3.多行文件读取
六、常用文件和文件夹操作
1.文件重命名
2.删除文件
3.创建文件夹
4.获取当前目录
5.改变默认目录
6.获取目录列表
7.删除文件夹
8.文本文件练习
9.二进制文件练习
七、练习
八、类
1.定义一个类
2.创建对象
3.动态绑定属性
4.初始化方法中调用属性
5.__str__方法
5.1 方法 1
5.2 方法2
6.del方法
7.案例练习
7.1烤地瓜
7.2 人狗案例
7.3 存放家具
结语
一、高阶函数
1.lambda函数
匿名函数或者叫匿名表达式
简单应用
概念
def show():
print("Python")
show()
func = show
print(func)
#这里func就是show
func()
既然函数名能作为一个对象,那么其实他也可以作为一个参数被传递
def show():
print("Python")
show()
func = show
print(func)
#这里func就是show
func()
print("________________________________________________")
def call_function(func):
print(func)
func()
call_function(show)
lambda匿名函数就是创建一个对象,既然是对象就有引用地址
func = lambda : 1 + 1
print(func)
print(func())
#带参定义和调用
func = lambda x: print(x ** 10)
print(func)
func(2)
2.lambda函数注意事项
#注意事项
#1.lambda默认返回表达计算结果,不需要return,如果加了return反而会报错
func = lambda x,y: return x + y
#2.不能使用循环
func = lambda x,y: for i in range(x,y): print(i)
#3.不能使用if的正常格式
func = lambda n : if n % 2 == 0
可以使用三目运算符
#4.但是可以使用if的三目运算符
func = lambda m,n: m if m > n else n
print(func(1,2))
3.map用法
map()会根据提供的函数对指定序列做映射
计算每个元素的平方值
my_list = [1,2,3,4,5,6,7]
#map调用的函数只有一个参数
def f(x):
return x ** 2
result = map(f,my_list)
print(type(result))
print(result)
print(list(result))
map函数的本质就是一对一映射
4.map和lambda函数配合
my_list = [1,2,3,4,5,6,7]
result_list = map(lambda n : n ** 4 , my_list)
print(result_list)
print(type(result_list))
list1 = []
for i in result_list:
list1.append(i)
print(list1)
二、reduce函数
1.reduce基本应用
reduce()函数会对参数序列中元素进行累计
函数将一个数据集合中的所有数据进行下列操作:
用传给reduce中的函数function(有两个参数)先对集合中的第1,2个元素进行操作。
得到的结果再与第三个数据用function函数运算,最后得到一个结果。
#reduce不能直接使用,需要导入一个模块functools
import functools
my_list = [1,2,3,4,5,6,7]
def f(x1,x2):
return x1 + x2
result = functools.reduce(f,my_list)
print(result)
2.reduce和匿名函数配合
#reduce不能直接使用,需要导入一个模块functools
import functools
my_list = [1,2,3,4,5,6,7]
result = functools.reduce(lambda x,y : x+y,my_list)
print(result)
import functools
my_list = list('hello')
result = functools.reduce(lambda s1,s2 : s1.upper() + s2.upper() , my_list)
print(result)
result = functools.reduce(lambda s1,s2 : s1 + s2 , my_list)
print(result)
#求阶乘
num = []
for i in range(1,4):
num.append(i)
print(num)
print("_________________________________________________________________")
r = functools.reduce(lambda s1,s2 : s1 * s2, num)
print(r)
三、filter()函数
手册定义:
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象,如果要转换为列表,可以使用list()来转换。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True的元素放到新的列表
1.简单用法
my_list = [1,2,3,4,5,6,7,8,9,10]
def f(x):
return x % 2 == 0
result = filter(f,my_list)
print(list(result))
2.高阶应用
my_list = ['123','234','abd','!@#',' ','abc1235']
#过滤出所有纯数字的字符串
num_list = filter(lambda s:s.isdigit(),my_list)
print(num_list)
print(list(num_list))
#过滤出所有纯字符的字符串
num_list = filter(lambda s:s.isalpha(),my_list)
print(num_list)
print(list(num_list))
#过滤出所有纯空格的字符串
num_list = filter(lambda s:s.isspace(),my_list)
print(num_list)
print(list(num_list))
四、列表排列方法(key和lambda问题)
1.正常排序
my_list = [7,2,3,1,4,31,543,545,657,8,852,0]
my_list.sort()
print(my_list)
2.key值问题
如果是字典排序,那么直接使用sort会有问题
my_list = [7,2,3,1,4,31,543,545,657,8,852,0]
my_list.sort()
print(my_list)
#上面的列表因为没有key所以排列默认按照数字方式排列,但是加上key并且二维字典会让这个问题变得很复杂
my_list = [{'id':1,'name':'tom','age':12},{'id':2,'name':'timi','age':20},{'id':3,'name':'alice','age':15},{'id':4,'name':'yuan','age':18}]
my_list.sort()
print(my_list)
这里对字典排序需要指定key,并且和lambda配合
3.lambda函数对key值的解决办法
my_list = [7,2,3,1,4,31,543,545,657,8,852,0]
my_list.sort()
print(my_list)
#上面的列表因为没有key所以排列默认按照数字方式排列,但是加上key并且二维字典会让这个问题变得很复杂
my_list = [{'id':1,'name':'tom','age':12},{'id':2,'name':'timi','age':20},{'id':3,'name':'alice','age':15},{'id':4,'name':'yuan','age':18}]
#按照id进行排序,默认升序
my_list.sort(key=lambda d : d['id'])
print(my_list)
#按年龄降序排列
my_list.sort(key=lambda d:d['age'],reverse=True)
print(my_list)
五、文件
1.文件操作
#打开文件以写模块
file = open('a.txt','w')
#关闭文件i/o,可省略
file.close()
#打开文件以读模块
file = open('a.txt','r')
#关闭文件i/o,可省略
file.close()
2.读取文件
file = open('a.txt','rt')
content = file.read()
print(content)
file.close()
调整文件句柄读取数据
file = open('a.txt','rt')
content = file.read(5)
print(content)
content = file.read(7)
print(content)
file.close()
这种方法适合小文件,因为i/o流不大,很快就能读完
3.多行文件读取
读取多行文件
file = open('a.txt','rt')
content = 1
while content:
content = file.readline()
print(content,end="")
file.close()
文件读取的多个方式
前面演示了三个,我们直接演示readlines
file = open('a.txt','rt')
content = file.readlines()
print(content)
print("-----------------------------------------------------------------------")
for i in content:
print(i,end="")
file.close()
六、常用文件和文件夹操作
1.文件重命名
#重命名
import os
file = open('a.txt','w')
file.close()
f = os.rename("a.txt",'b.txt')
print(f)
2.删除文件
import os
os.remove("b.txt")
3.创建文件夹
import os
os.mkdir('dir')
4.获取当前目录
import os
f = os.getcwd()
print(f)
5.改变默认目录
import os
f = os.chdir('C:/Users/o/PycharmProjects/pythonProject2/dir/')
print(f)
f = os.getcwd()
print(f)
6.获取目录列表
import os
f = os.listdir("./")
print(f)
print(type(f))
7.删除文件夹
注意权限问题
import os
f = os.rmdir("dir")
print(f)
8.文本文件练习
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','a.txt')
import sys
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()
src = sys.argv[1]
dst = sys.argv[2]
file_copy(src,dst)
上面的代码只能copy文本文件
9.二进制文件练习
import sys
def file_copy(src,dst):
file_r = open(src,'rb')
file_w = open(dst,'wb')
while True:
content = file_r.read(1024)
#结束
if content == b'':
print('文件拷贝完成')
break
file_w.write(content)
file_r.close()
file_w.close()
src = sys.argv[1]
dst = sys.argv[2]
file_copy(src,dst)
七、练习
批量修改文件名
import os
def file_rename(src,dst):
#根据src得到目录所有文件
files = os.listdir(src)
print(files)
#创建一个目录存放修改名字后的文件
os.mkdir(dst)
#修改名字
for file in files:
s_file = file.partition('.')
print(s_file)
dst_file = s_file[0] + s_file[1] + s_file[2]
print(dst_file)
f = open(src+'/'+file,'rb')
w = open(dst+'/'+dst_file,'wb')
while True:
content = f.read(1024)
if content == b'':
print("copy完毕")
break
w.write(content)
src = 'C:/Users/o/PycharmProjects/pythonProject2/dir1'
dst = 'C:/Users/o/PycharmProjects/pythonProject2/dir'
file_rename(src,dst)
八、类
1.定义一个类
class 类名
方法列表
定义一个英雄类
#class Haro:
#class Hero()
class Hero():
def info(self):
print("i am hero!")
在类中定义的函数叫做方法
在类外定义的函数都叫函数
2.创建对象
字符串、列表名等都是对象
python万物皆对象
定义一个类
class Person(object):
def eat(self,food):
print('一个人在吃',food)
def sleep(self,t):
print('一个人睡了',t,'小时')
tom = Person()
print(tom)
tom.eat('饭')
tom.sleep(10)
3.动态绑定属性
class Person(object):
def eat(self,food):
print(self.name,'一个人在吃',food)
def sleep(self,t):
print(self.name ,'睡了',t,'小时')
tom = Person()
print(tom)
tom.name = 'tom'
tom.eat('饭')
tom.sleep(10)
4.初始化方法中调用属性
class Lei(object):
def __init__(self,name,age):
print('init run ...', self)
#绑定属性时,使用self.属性名 = 值
self.name = name
self.age = age
def show(self):
print(self.name,self.age)
rom = Lei('rom',10)
print(rom)
print(rom.name)
print(rom.age)
rom.show()
print("________________________________________________________________________________________________________________")
jack = Lei('jack',18)
print(jack)
print(jack.name)
print(jack.age)
jack.show()
5.__str__方法
5.1 方法 1
class Lei(object):
def __init__(self,name,age,height):
#绑定属性时,使用self.属性名 = 值
self.name = name
self.age = age
self.height = height
def __str__(self):
print("to String run ....",self.name)
print(self.name,self.age,self.height)
#这个方法必须有个返回值,哪怕是个空串
return "123"
rom = Lei('rom',10,'100cm')
print(rom)
print(rom.name)
print(rom.age)
print(rom.height)
print("________________________________________________________________________________________________________________")
jack = Lei('jack',18,'1800cm')
print(jack)
print(jack.name)
print(jack.age)
print(jack.height)
5.2 方法2
class Lei(object):
def __init__(self,name,age,height):
#绑定属性时,使用self.属性名 = 值
self.name = name
self.age = age
self.height = height
def __str__(self):
st = self.name.ljust(6)+str(self.age).ljust(5)+self.height.ljust(10)
#这个方法必须有个返回值,哪怕是个空串
return st
rom = Lei('rom',10,'100cm')
print(rom)
print(rom.name)
print(rom.age)
print(rom.height)
print("________________________________________________________________________________________________________________")
jack = Lei('jack',18,'1800cm')
print(jack)
print(jack.name)
print(jack.age)
print(jack.height)
6.del方法
回收资源,在没有对象引用时,计数器为0,del方法被调用
class Lei(object):
def __init__(self,name,age,height):
#绑定属性时,使用self.属性名 = 值
self.name = name
self.age = age
self.height = height
def __str__(self):
st = self.name.ljust(6)+str(self.age).ljust(5)+self.height.ljust(10)
#这个方法必须有个返回值,哪怕是个空串
return st
def __del__(self):
print("del 被调用")
rom = Lei('rom',10,'100cm')
del rom
print('over')
7.案例练习
7.1烤地瓜
class SweetPotato(object):
#实现初始化方法,初始地瓜状态,和总烧烤时间
def __init__(self):
self.status = '生瓜蛋子'
self.total_time = 0
#实现一个烧烤方法
#该方法有一个烧烤时间,这个时间会被累积到总时间上
#判断总时间,来改变地瓜状态
def cook(self,t):
#累加时间
self.total_time += t
#判断 时间来改变地瓜状态
if self.total_time >=1 and self.total_time < 3:
self.status = "还是生的"
elif self.total_time >=3 and self.total_time < 6:
self.status = "半生不熟"
elif self.total_time >=6 and self.total_time < 8:
self.status = "烤好了"
elif self.total_time >=8 and self.total_time < 10:
self.status = "烤糊了"
else:
self.status = "成炭了"
#显示地瓜对象
def __str__(self):
s = self.status + f'被烤了 {self.total_time}' + '分钟'
return s
sp1 = SweetPotato()
print(sp1)
sp1.cook(2)
print(sp1)
sp1.cook(2)
print(sp1)
sp1.cook(2)
print(sp1)
sp1.cook(2)
print(sp1)
sp1.cook(2)
print(sp1)
7.2 人狗案例
class Dog(object):
def __init__(self,name,age):
self.name = name
self.age = age
def bark(self,n):
for i in range(n):
print("wowowo!")
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def add_pet(self,pet):
self.pet = pet
def listen_dog_bark(self,n):
self.pet.bark(n)
tom = Person('tom',20)
tom.add_pet(Dog('旺财',5))
tom.listen_dog_bark(2)
7.3 存放家具
class Furniture(object):
def __init__(self,name,area):
self.name = name
self.area = area
class House(object):
def __init__(self,address,area):
self.address = address
self.area = area
#只有百分之七十可以放家具
self.free_area = area * 0.7
self.ocp = 0
self.Fur = list()
def add_funiture(self,F):
if self.free_area - ( self.ocp + F.area) >= 0:
self.ocp += F.area
self.Fur.append(F.name)
else:
print("不好意思,该家具太大了,不能添加")
def check_having_fur_and_space(self):
if len(self.Fur) == 0:
print("you do not have any FUR")
else:
print("fur: ",self.Fur)
print("having space:",self.free_area-self.ocp)
home1 = House("beijing",100)
home1.check_having_fur_and_space()
print("____________________________________________________________________________")
home1.add_funiture(Furniture('电视',10))
home1.check_having_fur_and_space()
home1.add_funiture(Furniture('桌子',15))
home1.check_having_fur_and_space()
home1.add_funiture(Furniture('床',20))
home1.check_having_fur_and_space()
home1.add_funiture(Furniture('电脑',10))
home1.check_having_fur_and_space()
home1.add_funiture(Furniture('沙发',20))
home1.check_having_fur_and_space()
home1.add_funiture(Furniture('衣柜',15))
home1.check_having_fur_and_space()
结语
点个赞吧!!!求求求了!!!!