python面向对象操作1(速通版)

news2024/11/23 14:56:46

目录

一、高阶函数

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()


结语

点个赞吧!!!求求求了!!!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/609527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node服务器和常见模块

1 Node服务器开发 2 fs模块-文件系统 3 event模块-事件处理 4 认识二进制和buffer 5 Buffer的创建方式 6 Buffer的源码解析 node 的fs模块操作&#xff1a; 这里主要讲node如何进行读取文件&#xff0c;操作文件。服务器该有的操作node都有。 node的fs读取文本文件内容的d…

自定义starter

第一步、创建 xxx-spring-boot-starter 的spring Initializr模块 第二步、删除不需要的内容&#xff08;启动类、除下面spring-boot-starter的其它依赖&#xff0c;maven编译插件&#xff09; <dependency><groupId>org.springframework.boot</groupId><…

linux理解软硬链接

软硬连接 在linux下面链接文件有两种&#xff0c;一种是类似window的快捷方式功能的文件&#xff0c;可以让你快速链接到目标文件&#xff08;或目录&#xff09;&#xff0c;叫做软链接&#xff0c;另一种则是通过文件系统的inode链接来产生新的文件名&#xff0c;而不是产生…

Linux 常用开发工具(yum、vim)

绪论 耐心是一切聪明才智的基础。—— 柏拉图。本章进入到Linux下的一些常用的工具&#xff0c;这些工具能帮助我们去更好的使用Linux操作系统。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 附&#xff1a;红色&#xff0c;部分为重点部分&a…

[MAUI程序设计] 用Handler实现自定义跨平台控件

文章目录 Handler与Xamarin.Forms实现的区别为什么要用Handler代替Renderer解耦生命周期管理更细粒度的控制 用Effect来实现呢&#xff1f;自定义手势监听控件在各平台上实现TouchRecognizeriOS中的实现Android中的实现Windows中的实现 创建控件使用控件最终效果项目地址 今天来…

使用 Kubeadm 和 CRI-O 在 Rocky Linux 8 上安装 Kubernetes 集群

在 Rocky Linux 8 上安装 Kubernetes 集群。毫无疑问&#xff0c;Kubernetes 将继续改变我们大规模部署和管理业务应用程序的方式。无论用于部署应用程序的模型是手动还是通过 CI/CD 管道&#xff0c;Kubernetes 仍然是处理编排、管理和扩展应用程序的最佳选择。 对于那些不知…

一劳永逸的方法解决函数scanf报错问题

目录 scanf报错示例 代码 报错提醒 报错翻译 解决方案1&#xff08;不建议&#xff09;:将scanf换成scanf_s&#xff1b; 解决方案2&#xff08;临时解决&#xff09;&#xff1a; 解决方案3&#xff08;建议&#xff09;&#xff1a; 方法1&#xff08;建议&#xff09…

javaScript蓝桥杯----资讯接口

目录 一、介绍二、准备三、目标四、代码五、知识点1.res.end()2.res.end与res.send 六、完成 一、介绍 随着技术的发展&#xff0c;很多前端工程师已经不满足于只做诸如页面布局和交互这些开发工作了&#xff0c;很多人将目光逐渐转向了“大前端”范围&#xff0c;其中就包括不…

Vim学习笔记【Ch03】

Vim学习笔记 系列笔记链接Ch03 Searching FilesVim中打开和编辑文件用Find进行文件搜索用grep进行文件内搜索:vim搜索:grep搜索 通过Netrw浏览文件Fzffzf和ripgrep安装fzf配置fzf语法查找文件在文件内部查找用Rg代替Grep在多个文件中搜索和替换 小结 系列笔记链接 Ch00&#x…

【论文速览】根据人脑fMRI信号重建图像 Image Reconstruction from human brain activity

文章目录 前言文章一研究背景主要方法部分实验结果总结与思考参考资料 文章二研究背景主要方法部分实验结果总结与思考 前言 人类的视觉神经系统对于真实世界的视觉刺激有着非凡的感知与理解能力&#xff0c;比如我们能够准确地识别物体距离和三维几何关系等&#xff0c;这是当…

2023/6/4总结

CSS的学习&#xff1a; 2023-06-01 19-57-46-649 移动开发流式布局&#xff1a; 流式布局&#xff0c;是根据百分比布局&#xff0c;因为手机的尺寸会不一样&#xff0c;所以利用百分比布局可以很好的解决缩放以及尺寸问题&#xff1a; 这是跟着视频做的一个案例&#xff1a;…

Lecture 8 Deep Learning for NLP: Recurrent Networks

目录 Problem of N-gram Language Model N-gram 语言模型的问题Recurrent Neural Network(RNN) 循环神经网络RNN Language Model: RNN 语言模型Long Short-Term Memory Model (LSTM) 长短期记忆模型&#xff08;LSTM&#xff09;Gating Vector 门向量Forget Gate 忘记门Input G…

ChatGPT 使用 拓展资料:大模型时代的开发者新机遇

ChatGPT 使用 拓展资料:大模型时代的开发者新机遇

Nginx-rewrite模块详细介绍

Nginx-rewrite模块 前言一、Nginx-rewrite模块概述1、rewrite场景2、rewrite实现3、rewrite执行顺序4、语法格式 二、rewrite示例1、基于域名的跳转2、基于客户端IP访问跳转3、基于旧域名跳转到新域名后面加目录4、基于参数匹配的跳转5、基于目录下所有 php 结尾的文件跳转6、基…

代码报错 | 出bug-->该如何调试?

代码报错 | 出bug-->该如何调试&#xff1f; 什么叫做bug调试是什么&#xff1f;有多重要&#xff1f;Debug和Release的介绍调试常用的快捷键调试时查看程序当前的信息 如何写出好&#xff08;易于调试&#xff09;的代码对const的通俗生活中举例assert的理解 编译常见的错误…

Java程序员面试经验总结

目录 一、企业是如何筛选简历的1.简历筛选流程2.HR如何筛选简历3.部门负责人筛选简历4.总结-简历筛选规则 二、简历注意事项1.简历整体结构2.职业技能3.项目经历4.总结 三、应届毕业生改如何找到合适的练手项目1.项目来源2.如何深入学习项目3.应该学习哪些模块4.模块该如何吃透…

【owt】WebrtcNode, subscribe-sdp offer 流程(1)

sdp offer 流程 1. AmqpClient - New message received sdp offer 的消息 2023-04-26T21:54:19.790 - DEBUG: AmqpClient - RpcServer New message received {method: onTransportSignaling,args: [b149e44bb10d4e91bd162a8c6806ae7b,{sdp: v0\r\n o- 7177131362423164715 …

K8S常见应用场景(六)

Kubernetes 是一个可移植的、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。 Kubernetes 这个名字源于希腊语&#xff0c;意为“…

【Java系列】Mybatis-Plus 使用介绍二

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 MyBatis-Plus 是 MyBatis 的增强工具&#xff0c;它简化了 MyBatis 的开发&#xff0c;并提供了许多实用的功能和工具类。下面是 MyBatis-Plus 的使用方法&#xff1a; 1 使用方法 1. 引入依赖 在 Maven…

MySQL数据库 9.DQL操作

目录 ​编辑 &#x1f914;前言&#xff1a; &#x1f914;DQL介绍&#xff1a; &#x1f914;查询种类&#xff1a; 1.基本查询&#xff1a; &#x1f50d;1.查询多个字段&#xff1a; &#x1f50d;2.查询所有字段&#xff1a; &#x1f50d;3.去除重复记录&#xff…