前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python的range和map函数

Python的range和map函数

作者头像
fem178
发布2021-08-20 15:40:15
9450
发布2021-08-20 15:40:15
举报

函数式编程(Functional programming)是一种编程范式,目前没有统一的定义。对于并发编程有广泛应用。Python中,range,map,filter,zip等属于函数式编程。

首先要明确一个概念--可迭代对象。列表、字典、range等都是可迭代对象(Iterables)。

代码语言:javascript
复制
numbers = [101, 2, 3, 42]
for num in numbers:
    print(num)

range

它返回一个range对象,该对象提供“查看特定数字序列的机会”(the opportunity to go over the specific series of numbers),而不实际创建数字列表。获取一个对象而不是整个列表有很多优点。体现了惰性求值的特点。

调用方法:

  • range(start, end, step)
  • range(start, end) - 步长step 默认为1
  • range(end) - 起始默认为 0, 步长step 默认为1

在下一个示例中,我们将看到range函数返回的对象需要多少内存,以及需要多少内存才能拥有相应的数字列表。现在让我们看看如何使用它:

代码语言:javascript
复制
import sys

rng = range(3, 22, 2) #rng 是rang型对象

# list将 rng 对象转换成列表形式
list_rng = list(rng) 

print(rng)
# 输出 rng 对象的地址:  <map object at 0x000000265AA67F350>
print(list_rng)
#输出[3,5,7,9,11,13,15,17,19,21]
print(sys.getsizeof(rng))
# 输出 rng 对象的大小为48 bytes
print(sys.getsizeof(list_rng))
# 输出 list_rng 对象的大小为136 bytes

range对象仅为48 bytes,而且是固定的。

map

map(func,seq)函数接收两个参数,一个是函数,一个是Iterable(可迭代对象,序列),map将传入的函数func()依次作用到序列seq的每个元素,并把结果作为新的Iterator(迭代器)返回,之后可转为lis或其他类型输出。注意:这里每个元素都有相同的操作要做。调用方法:

  • map(function, iterable, ...)
代码语言:javascript
复制
def double(n):
    return 2 * n

num = [1, 2, 3, 4, 5, 6, 7, 8]
mp = map(double, num)   #mp 是map型对象
print(mp)
# 输出mp对象的地址:  <map object at 0x000000265AA67F400>

可以用list将mp对象转换成列表形式:

代码语言:javascript
复制
import sys

def double(n):
    return 2 * n

num = [1, 2, 3, 4, 5, 6, 7, 8]
mp = map(double, num) #mp 是map型对象
list_mp = list(mp)  # list将mp对象转换成列表形式
print(list_mp )
# 输出[2,4,6,8,10,12,14,16]

print( sys.getsizeof(mp) )
# 输出mp对象的大小为48 bytes
print( sys.getsizeof(list_mp) )
# 输出list_mp对象的大小为120 bytes

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数值分析与有限元编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档