社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

基础学完了,这几个python高阶函数一起来看看吧!

Python绿色通道 • 4 年前 • 453 次点击  

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包】送你Python自学大礼包

今天给大家介绍python的几种高级函数,一起来看看吧!





Lambda 函数


Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。

Python 函数通常使用如下样式来定义,


def function_name()
  pass

但对于 lambda 函数,我们根本没为它命名。这是因为 lambda 函数的功能是执行某种简单的表达式或运算,而无需完全定义函数。

lambda 函数可以使用任意数量的参数,但表达式只能有一个。
下面我们来看一下普通函数和lambda函数的区别


函数求圆面积


# 求圆面积
import math

def circlearea(r):
    result = math.pi*r*r
    return result

r = 10
print('圆面积为:', circlearea(r))
'''
圆面积为:314.1592653589793
'''


lambda函数求圆面积


# 求圆面积
import math
r = 10
result = lambda r:math.pi*r*r
print('圆面积为:', result(r))
'''
圆面积为:314.1592653589793
'''


再来看看lambda函数在列表推导式中的那些使用


指定范围内的数值列表


import random
# 生成10-100之间的随机列表
list  = [random.randint(10100for x in range(10)]
print(list)
'''
[83, 95, 16, 43, 66, 24, 11, 92, 38, 85]
'''


根据列表条件生成指定的列表


# 每月拿出月薪的30%存定期
salary = [8000810082008500780079888888]
save_sal = [int(x*0.3for x in salary]
print('每月存款数目:', save_sal)
'''
每月存款数目: [2400, 2430, 2460, 2550, 2340, 2396, 2666]
'''



通过列表筛选生成新的列表


# 找出成绩大于等于80的学生
score = [80817275987988]
result = [x for x in score if x >= 80]
print('成绩大于等于80的学生:', result)
'''
成绩大于等于80的学生: [80, 81, 98, 88]
'''


看它多么简单!我们执行了一些简单的数学运算,而无需定义整个函数。这是 Python 的众多特征之一,这些特征使它成为一种干净、简单的编程语言。


lambda函数还可以跟一些内置函数一起使用,接下来一起看看吧!



filter()函数


filter() 函数用于通过指定条件过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,

然后返回 True 或 False,最后将返回 True 的元素放到新列表中。


语法如下:




    
filter(function, iterable)


方法1:求出当前列表内的所有奇数


# 取出列表内所有奇数
def if_odd(n):
    return n % 2 == 1

odd_list = list(filter(if_odd, [897576243]))
print(odd_list)
'''
[9, 7, 5, 7, 3]
'''


方法2:求出当前列表内的所有偶数


# 取出列表内所有偶数
list_num = [897576243]
list_even = list(filter(lambda x: x % 2 == 0, list_num))
print(list_even)
'''
[8, 6, 2, 4]
'''



map()函数


和filter()函数类似,map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。


map() 函数语法:





    
map(function, iterable, ...)


# 求平方
def square(x):
    return x*x

new_list = list(map(square, [897576243]))
print(new_list)
'''
[64, 81, 49, 25, 49, 36, 4, 16, 9]
'''


或者使用lambda表达式


# 求平方
new_list1 = list(map(lambda x:x*x, [897576243]))
print(new_list1)
'''
[64, 81, 49, 25, 49, 36, 4, 16, 9]
'''



reduce() 函数



在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,

它现在被放置在 functools 模块里,

如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:

from functools import reduce


reduce()函数常用于对一个集合做一些累计操作,表示对iterable中的每个元素和上次调用函数后的结果进行运算。

来看例子





    
# 求列表之和

from functools import reduce
list = [897576243]
sum = reduce(lambda x, y: x+y, list)
print(sum) # 51 = 8+9+7+5+7+6+2+4+3


from functools import reduce
# 求0-100之和
def add(x, y):
    return x+y

sum = reduce(add, range(1101))
print(sum)
'''
5050
'''


Range()函数


range() 函数用于生成一个新的 range 类型,多用于 for 循环语句中,用于生成指定范围的整数。range() 函数的语法格式如下:

range(start,end,step)


range()函数接收的参数必须是整数,

不能是浮点数等其他数据类型,否则会提示类型错误。

在使用range()函数时,


如果只有一个参数,那么表示指定的是stop结束整数;


如果是两个参数,则表示指定的是start开始整数和end结束整数;


只有三个参数都存在时,最后一个参数才表示step步长。

for i in range(11):
    print(f'第{i} 个数是:', i)

'''
第0个数是: 0
第1个数是: 1
第2个数是: 2
第3个数是: 3
第4个数是: 4
第5个数是: 5
第6个数是: 6
第7个数是: 7
第8个数是: 8
第9个数是: 9
第10个数是: 10
'''


将生成的序列转换成列表


print(list(range(5)))
'''
[0, 1, 2, 3, 4]
'''


print(list(range(5,16)))
'''
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
'''


print(list(range(010020)))
'''
[0, 20, 40, 60, 80]
'''



reversed ()函数



reversed() 函数用于反转一个序列对象,将其元素从后向前颠倒构建成一个新的迭代器,reversed() 函数的语法格式如下:


reversed(seq)


反转的对象可以是序列,如列表、元组、字符串或 range 对象等。


#字符串反转
str1 = '人生短短几个秋啊'
rev_str = list(reversed(str1))
print(str1)
print(''.join(rev_str))
'''
人生短短几个秋啊
啊秋个几短短生人
'''


# 列表反转
list1 = list(range(5,11))
rev_list = list(reversed(list1))
print(list1)
print(rev_list)
'''
[5, 6, 7, 8, 9, 10]
[10, 9, 8, 7, 6, 5]
'''


tuple1 = tuple(range(1,6))
rev_tup = tuple(reversed(tuple1))
print(tuple1)
print(rev_tup)
'''
(1, 2, 3, 4, 5)
(5, 4, 3, 2, 1)
'''


sorted() 函数


sorted() 函数用于对可迭代对象进行 排序,返回一个重新排序的列表,当使用该函数进行排序后,原列表的元素顺序不变。语法格式如下:


sorted(iterable, key=None, reverse=False):


排序的对象可以是列表、字符串、字典等

grade_list = [656602610618663695622645677640]  # 10名600分以上的学生成绩列表
# 升序列表: [602, 610, 618, 622, 640, 645, 656, 663, 677, 695]
print(f"升序列表: {sorted(grade_list)}")  # 升序排序
# 降序列表: [695, 677, 663, 656, 645, 640, 622, 618, 610, 602]
print(f"降序列表: {sorted(grade_list, reverse=True)}")  # 降序排序



zip() 函数


zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的 zip 对象。语法格式如下:

zip(*iterables) --> zip object参数说明:


iterables:可迭代对象,如列表、字典、元组、字符串等,zip() 函数允许多个可迭代对象作为参数。


当 zip() 函数没有参数时,则返回空的迭代器。


当 zip( ) 函数只有一个参数时,则从参数中依次取一个元素组成一个元组,再将依次组成的元组组合成一个新的迭代器。


当 zip() 函数有两个参数时,分别从两个参数中依次各取出一个元素组成元组,再将依次组成的元组组合成一个新的迭代器。


列表合并生成列表


# 生成列表
name_list = ["Amo""Paul""Jason""Seven"]
age_list = [18192021]
print(list(zip(name_list, age_list)))
'''
[('Amo', 18), ('Paul', 19), ('Jason', 20), ('Seven', 21)]
'''


列表合并生成字典


# 生成字典
name_list = ["Amo""Paul""Jason""Seven"]
age_list = [18192021]
print(dict(zip(name_list, age_list)))
'''
{'Amo': 18, 'Paul': 19, 'Jason': 20, 'Seven': 21}
'''


矩阵转换


x = [123]
y = [456]
z = [789]

print(list(zip(x, y, z)))
'''
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
'''


本文详细介绍了几种事半功倍的python高级函数,

先收藏起来。

有兴趣的读者可以尝试自己动手练习一下。


  1. 离线识别率高达99%的Python人脸识别系统,开源~

  2. 惊呆了!小姐姐用图解 Python,这也太秀了吧?


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132087