目录
一、高阶函数
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()
结语
点个赞吧!!!求求求了!!!!