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

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

一、高阶函数

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流不大,很快就能读完

相关文章
|
7天前
|
Python
你真的会面向对象吗!解密Python“魔术方法”
你真的会面向对象吗!解密Python“魔术方法”
16 0
|
21天前
|
存储 监控 数据处理
💻Python高手必备!文件系统操作秘籍,让你的数据存取如臂使指
【7月更文挑战第29天】在数据驱动时代, Python以简洁语法、丰富库生态和强大跨平台能力, 成为数据科学等领域首选。本文探讨Python文件系统操作秘籍, 助力高效数据处理。
31 11
|
17天前
|
安全 算法 Go
Python面向对象的三大特性
python面向对象编程(OOP)的三大特性是封装、继承和多态。这些特性共同构成了OOP的基础,使得软件设计更加灵活、可维护和可扩展。
14 3
|
20天前
|
安全 数据安全/隐私保护 Python
|
21天前
|
监控 网络协议 网络安全
SMTP操作使用详解并通过python进行smtp邮件发送示例
SMTP操作使用详解并通过python进行smtp邮件发送示例
30 3
|
21天前
|
数据挖掘 数据处理 Python
🔍深入Python系统编程腹地:文件系统操作与I/O管理,打造高效数据处理流水线
【7月更文挑战第29天】深入Python系统编程腹地:文件系统操作与I/O管理,打造高效数据处理流水线
16 3
|
20天前
|
API Python
Python高手修炼手册:精通文件系统操作,掌控I/O管理,提升编程效率
【7月更文挑战第30天】在 Python 编程中, 文件系统操作与 I/O 管理是连接程序与数据的关键。初学者常因路径错误和权限问题受挫, 而高手能自如管理文件。传统 `os` 和 `os.path` 模块易出错, `pathlib` 提供了更直观的对象导向 API。I/O 方面, 同步操作会阻塞程序, 异步 (如使用 `aiofiles`) 则能大幅提升并发能力。真正的高手不仅掌握 API, 更能预见性能瓶颈并优化代码, 实现高效与优雅。
16 1
|
21天前
|
Serverless 语音技术 开发工具
函数计算操作报错合集之怎么何集成nls tts python sdk
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
22天前
|
数据采集 Java C语言
Python面向对象的高级动态可解释型脚本语言简介
Python是一种面向对象的高级动态可解释型脚本语言。
17 3