Python中常用的内建函数

  Python中有许多强大的内建函数,通过这些函数可以很方便的完成一项功能。如果能够熟练的运用能够在编码的时候帮上大忙。当然内建函数不止下面这些,后面会逐渐补充学习。

1. eval(source[, globals[, locals]])

执行一个字符串表达式,并返回执行的结果(可以理解为去掉引号后python代码):

>>> x = 10
>>> y = 5
>>> eval('x+y')
15
>>> eval('[1,2,3,4]')
[1, 2, 3, 4]
>>> eval('123')
123

2. filter(function or None, sequence) -> list, tuple, or string

filter用来提取系列中满足function函数的元素,
当第一个参数为None是,则判断条件为系列中的每隔元素是否为False(在Python中None, '', 0表示False)
下面是计算10以内的偶数:

>>> filter(lambda x : x % 2 == 0, range(10))
[0, 2, 4, 6, 8]

函数为None时, 只是将0过滤了:

>>> filter(None, range(10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

3. enumerate(iterable[, start]) -> iterator for index, value of iterable

用enumerate返回下面的结构,

(0, seq[0]), (1, seq[1]), (2, seq[2]), ...

因此可以很方便的遍历一个可迭代的对象,并且知道其索引,start为索引的开始值。下面用enumerate方法打印出字符串的每个字母及其索引:

>>> for index, c in enumerate('hello world'):
    print index, c

0 h
1 e
2 l
3 l
4 o
5  
6 w
7 o
8 r
9 l
10 d

start为10:

>>> for index, c in enumerate('hello world', 10):
    print index, c

10 h
11 e
12 l
13 l
14 o
15  
16 w
17 o
18 r
19 l
20 d

4. map(function, sequence[, sequence, ...]) -> list

又一个强大好用的内建函数,下面的function为空时候的例子,但是后面的系列不能为None,否则抛出异常

>>> map(None, 'hello', (1,2,3), [5,6,7,8])
[('h', 1, 5), ('e', 2, 6), ('l', 3, 7), ('l', None, 8), ('o', None, None)]

  由此可见当后面有多个序列,并且长度不一致时,按照最长的系列来生成元组,其它长度不够的用None补足。实际上第一个参数就是用来处理生成的系列中的元组的,把处理的结果作为元素组成一个列表返回。
  根据上面的例子可以知道第一个参数可以为空,那么对于作为第一个参数的函数有什么要求吗?

>>> map(lambda x:x, (1,2,3),(4,5,6))

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    map(lambda x:x, (1,2,3),(4,5,6))
TypeError: <lambda>() takes exactly 1 argument (2 given)

当函数只传递一个参数的时候,程序报错了。根据错误信息:提供了两个参数,但实际只有一个,所以对第一个参数要求传入的参数个数必须等于后面系列的个数

>>> map(lambda x,y : x+y, (1,2,3),(4,5,6))
[5, 7, 9]

5. max

max函数有两种形式:
max(iterable[, key=func]) -> value
  第一种是计算一个可迭代对象的最大值,如果需要对每个元素处理后再计算最大值还可以传递一个函数作为比较依据。

  • 计算整数列表中的最大值:
>>> max([1,3,6,2,4,9,8,2,7])
9
>>> max('hello world')
'w'
  • 包含key的情况:计算年龄最大的用户
>>> users = [{'name':'zhao','age':18},{'name':'qian','age':20},{'name':'sun','age':19}]
>>> max(users, key=lambda item:item['age'])
{'age': 20, 'name': 'qian'}

max(a, b, c, ...[, key=func]) -> value
  第二种是直接传递多个要比较的元素。

  • 计算多个数字之间的最大值:
>>> max(1,3,6,2,4,9,8,2,7)
9
  • 包含key的情况:计算年龄最大的用户
>>> max({'name':'zhao','age':18},{'name':'qian','age':20},{'name':'sun','age':19}, key=lambda item:item['age'])
{'age': 20, 'name': 'qian'}

6. min

min函数同max一样,只不过是用来计算最小值的。

7. set

set方法用来创建一个不重复的集合

>>> set()
set([])
>>> set('hello world')
set([' ', 'e', 'd', 'h', 'l', 'o', 'r', 'w'])
>>> set((1,3,3,4,5,9,7))
set([1, 3, 4, 5, 7, 9])

8. len(object) -> integer

len()函数用来计算一个序列或者集合对象的元素个数

>>> len('hello world')
11
>>> len((1,2,3))
3
>>> len({'name':'zhao','age':18})
2
>>> len(set('hello world'))
8

9. range

range(stop) -> list of integers
生成从0到stop的一个列表,步长为1:

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(start, stop[, step]) -> list of integers
生成列表的时候可以指定步长step,且默认值为1:

>>> range(0,10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> range(0,10,2)
[0, 2, 4, 6, 8]

10. round(number[, ndigits]) -> floating point number

四舍五入计算,第二个可选参数表示小数点后面的精度。返回的结果跟传入的数据类型无关,都是float类型。

>>> round(1)
1.0
>>> round(1.2574, 2)
1.26

另外,在math模块中有两个方法与round方法类似,但是需要先用import math引入才能使用:

  • floor(x)
    取地板计算:返回给定值的整数部分,返回的结果也是float类型。如果参数为整数,则返回结果等同于float(x)
>>> import math
>>> math.floor(1)
1.0
>>> math.floor(1.222)
1.0
>>> math.floor(1.999)
1.0
  • ceil(x)
    取天花板计算:返回比给定值大的最小整数,不过这里依然是float类型。当给定值为整数类型时,返回结果等同于float(x)
>>> import math
>>> math.ceil(1)
1.0
>>> math.ceil(1.222)
2.0
>>> math.ceil(1.999)
2.0

11. sum(iterable[, start]) -> value

字面意思:求和运算,如果有传递start,则最后还要加上start;当序列为空(不是None)时就返回start,start默认为0

>>> sum([])
0
>>> sum([],2)
2
>>> sum([1,2,3,4,5])
15
>>> sum([1,2,3,4,5],6)
21

12. sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

对可迭代得对象进行排序,并返回一个新列表
参数说明:

  • iterable: 用来排序得可迭代对象
  • cmp:默认为None,用来比较iterable中两个元素得先后顺序(类似于Java中的Comparetor)。且这个函数有两个参数,当大于时返回1,小于时返回-1,等于时返回0
  • key:这个参数与max和min函数中的key用法类似,该函数只有一个参数,即迭代对象中的元素
  • reverse:False表示升序,True表示降序,默认为升序

下面是对字符串中得字母和列表排序:

>>> sorted('hello world')
[' ', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
>>> sorted([8,3,5,7,9,0,1,2,4])
[0, 1, 2, 3, 4, 5, 7, 8, 9]
>>> sorted([8,3,5,7,9,0,1,2,4], reverse=True)
[9, 8, 7, 5, 4, 3, 2, 1, 0]

在其它一些复杂使用场景下,实现cmp函数或者key和reverse组合的方式都可以达到排序的目的

# 测试要用到的数据
>>> persons = [{'name':'zhao','age':18},{'name':'qian','age':20},{'name':'sun','age':19},{'name':'li','age':17}]
  • 实现cmp函数来根据age进行排序:
# 升序
>>> sorted(persons, cmp=lambda x,y:x['age']-y['age'])
[{'age': 17, 'name': 'li'}, {'age': 18, 'name': 'zhao'}, {'age': 19, 'name': 'sun'}, {'age': 20, 'name': 'qian'}]
# 降序
>>> sorted(persons, cmp=lambda x,y:y['age']-x['age'])
[{'age': 20, 'name': 'qian'}, {'age': 19, 'name': 'sun'}, {'age': 18, 'name': 'zhao'}, {'age': 17, 'name': 'li'}]
  • 用key和reverse来实现排序:
# 升序
>>> sorted(persons, key=lambda x:x['age'])
[{'age': 17, 'name': 'li'}, {'age': 18, 'name': 'zhao'}, {'age': 19, 'name': 'sun'}, {'age': 20, 'name': 'qian'}]
# 降序
>>> sorted(persons, key=lambda x:x['age'], reverse=True)
[{'age': 20, 'name': 'qian'}, {'age': 19, 'name': 'sun'}, {'age': 18, 'name': 'zhao'}, {'age': 17, 'name': 'li'}]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • 内置函数Python解释器内置了许多功能和类型,总是可用的。他们是按字母顺序列在这里。 abs(x)返回一个数的绝...
    uangianlap阅读 1,234评论 0 0
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,942评论 17 410
  • pyspark.sql module Module context Spark SQL和DataFrames中的重...
    盗梦者_56f2阅读 5,423评论 0 19
  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,802评论 0 27
  • 想念是一张泛黄的照片夹在厚厚的书页无意间翻索滑落在光溜的地面嗖的一下 不知所向想念是一座古老的石桥绕开你所流经的任...
    牽塵1991阅读 198评论 0 3