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

相关文章
|
2月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
79 2
|
13天前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
4月前
|
Python
你真的会面向对象吗!解密Python“魔术方法”
你真的会面向对象吗!解密Python“魔术方法”
44 0
|
2月前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
2月前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
3月前
|
前端开发 Python
Python编程的面向对象有哪些(二)
Python编程的面向对象(二)—类的多态
27 7
|
3月前
|
IDE Java 开发工具
Python类与面向对象
Python类与面向对象
|
2月前
|
Python
Python编程-关于面向对象的一些
Python编程-关于面向对象的一些
18 0
|
5月前
|
存储 监控 数据处理
💻Python高手必备!文件系统操作秘籍,让你的数据存取如臂使指
【7月更文挑战第29天】在数据驱动时代, Python以简洁语法、丰富库生态和强大跨平台能力, 成为数据科学等领域首选。本文探讨Python文件系统操作秘籍, 助力高效数据处理。
53 11
|
4月前
|
安全 算法 Go
Python面向对象的三大特性
python面向对象编程(OOP)的三大特性是封装、继承和多态。这些特性共同构成了OOP的基础,使得软件设计更加灵活、可维护和可扩展。
40 3