资讯专栏INFORMATION COLUMN

熟练掌握Python的内置函数,加快编程速度

KoreyLee / 2129人阅读

摘要:图片描述内置函数概览的所有内置函数共有个。熟练记住和使用这些内置函数,将大大提高写代码的速度和代码的优雅程度。

图片描述

内置函数概览

Python 2.7 的所有内置函数共有80个。熟练记住和使用这些内置函数,将大大提高写Python代码的速度和代码的优雅程度。

以下代码示例用的是ipython,一个比官方解释器好很多的解释器,值的学习和使用。

数学相关的内置函数

abs(x) 返回一个数字的绝对值

In [18]: abs(3.14)
Out[18]: 3.14

In [19]: abs(-3.14)
Out[19]: 3.14

complex(real[, imag]) 生成一个复数

In [135]: complex(1,3)
Out[135]: (1+3j)

divmod(x, y) 返回x除以y的商和余数

In [143]: divmod(12, 7)
Out[143]: (1, 5)

max(iterable[, key]) 返回一个序列的最大元素

In [157]: max([(1,2,3), (4,5,6), (23,4,1,)], key=lambda a: a[-1])
Out[157]: (4, 5, 6)

In [158]: max(1,2,3,4,4,5)
Out[158]: 5

In [159]: max([(1,2,3), (4,5,6), (23,4,1,)])
Out[159]: (23, 4, 1)

In [160]: max([(1,2,3), (4,5,6), (23,4,1,)], key=lambda a: a[-1])
Out[160]: (4, 5, 6)

In [161]: max([{"age":10, "name": "aaa"}, {"age": 12, "name": "bb"}], key=lambda a: a["age"])
Out[161]: {"age": 12, "name": "bb"}

min(iterable[, key]) 返回一个序列的最小元素
参见上面的max() 函数
pow(x, y[, z]) 返回x的y次幂,如果有参数z则返回幂除以z的余数(对z取模)

In [166]: pow(2,3)
Out[166]: 8

In [167]: pow(2,3,5)
Out[167]: 3

round(number[, ndigits]) 返回一个数的四舍五入值,给出ndigits则四舍五入到第n位小数

In [170]: round(3.45)
Out[170]: 3.0

In [171]: round(3.55)
Out[171]: 4.0

In [172]: round(3.55345, 3)
Out[172]: 3.553

sum(sequence[, start]) 对一个数字序列求和,start为起始位置,默认从0开始

In [175]: sum([1,2,3,4])
Out[175]: 10

数字、字符转换

bin(number), hex(number), oct(number)
把一个数字转换成二进制、十六进制、八进制字符串

In [204]: print bin(20), hex(16), oct(9)
0b10100 0x10 011

bool(x) 如果x是真则返回True,否则返回False

In [184]: print bool(3), bool("a")
True True

In [185]: print bool(0), bool(""), bool(None)
False False False

chr(i) 把一个整数转换为ascii码字符, 0<= i < 256

In [188]: chr(320)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
 in ()
----> 1 chr(320)

ValueError: chr() arg not in range(256)

In [189]: chr(65)
Out[189]: "A"

In [190]: chr(0)
Out[190]: "x00"

unichr(i) 把一个整数转换为Unicode字符, 0 <= i <= 0x10ffff

In [225]: unichr(1245)
Out[225]: u"u04dd"

ord(c) 把一个ascii码字符转换为整数

In [192]: ord("a")
Out[192]: 97

In [193]: ord("x23")
Out[193]: 35

float(x), int(x), long(x) 浮点数、整数、长整数之间的转换

In [196]: print float("13"), float(13)
13.0 13.0

In [197]: print int("14"), int(14)
14 14

In [198]: print long("15"), long(15)
15 15

format(value[, format_spec]) 对value按照format_spec格式化

In [212]: format(123, "05d")
Out[212]: "00123"

以上等同于 print ‘%05d’ % 123

hash(ojbect) 对object计算hash值

In [218]: hash(123)
Out[218]: 123

In [219]: hash("abc")
Out[219]: 1453079729188098211

str(object=’’) 把一个对象转换成字符串:

In [221]: str(123)
Out[221]: "123"

In [222]: str([1,2,3])
Out[222]: "[1, 2, 3]"

In [223]: str({"a": 1, "b": 2})
Out[223]: "{"a": 1, "b": 2}"

输入输出

file(name[, mode[, buffering]]), open 打开一个文件

In [251]: file("abc.txt", "w")
Out[251]: 

In [252]: open("abc.txt", "w")
Out[252]: 
input([prompt]), raw_input() 从终端输入信息
In [253]: input("pls input a number >>")
pls input a number >>123
Out[253]: 123

序列处理

all(iterable) 如果一个序列所有值都为真就返回True,否则返回False
any(iterable) 如果一个序列至少有一个为真就返回True, 否则False

In [255]: all([1,2,3,4])
Out[255]: True

In [256]: all([1,2,3,4, 0])
Out[256]: False

In [257]: any([1,2,3,4, 0])
Out[257]: True

enumerate(iterable[, start]) 遍历一个序列的元素及其索引

In [261]: for i, value in enumerate(["a", "b", "c"]):
   .....:     print i, value
   .....: 
0 a
1 b
2 c

filter(function or None, squence) 返回满足function(item)为True的元素

In [263]: filter(lambda x: x>3, [1,2,3,4,5])
Out[263]: [4, 5]

iter(collection) 返回一个对象的迭代器
读取文件的时候比较有用:

with open("mydata.txt") as fp:
    for line in iter(fp.readline, "STOP"):
        process_line(line)

len(object) 返回一个对象的元素个数

In [267]: len("abc"), len([1,2,3])
Out[267]: (3, 3)

map(function, sequence[, sequence, …]) 把一个函数应用于每一个元素并返回一个list

In [269]: map(lambda x: x+3, [1,2,3])
Out[269]: [4, 5, 6]

In [270]: a = [1,2]; b = ["a", "b"]; c = ("x", "y")

In [271]: map(None, a, b, c)
Out[271]: [(1, "a", "x"), (2, "b", "y")]

reduce(function, sequence[, sequence, …]) 把函数作用于初始两个元素,并把返回值和下一个元素作为输入调用函数,依次迭代所有元素

In [281]: reduce(lambda a, b: a-b, [1,2,3])
Out[281]: -4

zip(seq1 [, seq2 […]]) -> [(seq1[0], seq2[0] …), (…)]
把多个序列合并成一个序列list

In [283]: zip([1,2,3], ("a", "b", "c"))
Out[283]: [(1, "a"), (2, "b"), (3, "c")]

range() xrange() 返回一个整数序列

In [274]: [x for x in xrange(10)]
Out[274]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [275]: [x for x in xrange(5, 10)]
Out[275]: [5, 6, 7, 8, 9]

In [276]: [x for x in xrange(5, 10, 2)]
Out[276]: [5, 7, 9]

In [277]: range(10)
Out[277]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [278]: range(5, 10)
Out[278]: [5, 6, 7, 8, 9]

In [279]: range(5, 10, 2)
Out[279]: [5, 7, 9]

sorted(iterable, cmp=None, key=None, reverse=False) 对一个序列排序
可选参数cmp、key和reverse与list.sort()方法的参数含义相同(在可变的序列类型一节描述)。
cmp指定一个自定义的带有两个参数的比较函数(可迭代的元素),它应该根据第一个参数是小于、等于还是大于第二个参数返回负数、零或者正数:cmp=lambda x,y: cmp(x.lower(), y.lower())。默认值是None。
key指定一个带有一个参数的函数,它用于从每个列表元素选择一个比较的关键字:key=str.lower。默认值是None(直接比较元素)。
reverse是一个布尔值。如果设置为True,那么列表元素以反向比较排序。
通常情况下,key和reverse转换处理比指定一个等同的cmp函数要快得多。这是因为cmp为每个元素调用多次但是key和reverse只会触摸每个元素一次。使用functools.cmp_to_key()来转换旧式的cmp函数为key函数。

In [288]: sorted(d.items(), key=lambda a: a[1])
Out[288]: [("a", 3), ("b", 4)]

In [289]: sorted(d.items(), key=lambda a: a[1], rev)

In [289]: sorted(d.items(), key=lambda a: a[1], reverse=True)
Out[289]: [("b", 4), ("a", 3)]

In [290]: sorted(d.items(), cmp=lambda a, b: cmp(a[1], b[1]))
Out[290]: [("a", 3), ("b", 4)]

数据结构

bytearray() dict() frozenset() list() set() tuple()
python里面常用的数据结构有列表(list)、字典(dict)、集合(set)、元组(tuple)

对象、类型

以下是一些类(class)和类型相关的函数,比较不常用,可以查看手册详细了解。
basestring() callable() classmethod() staticmethod() property() cmp() compile() delattr() getattr() setattr() hasattr() dir() globals() locals() vars() help() id() isinstance() issubclass() object() memoryview() repr() super() type() unicode() import() eval() execfile()

不重要的内置函数

apply() buffer() coerce() intern()

ipython

ipython是一个非常好的交互式python解释器,它查看一个函数或类的用法的方法有:

help(xxx)
xxx?
查看一个类/对象的成员函数或变量时,在类或对象变量后面输入.后按tab键:

In [292]: import time

In [293]: time.
time.accept2dyear  time.clock         time.gmtime        time.sleep         time.struct_time   time.tzname        
time.altzone       time.ctime         time.localtime     time.strftime      time.time          time.tzset         
time.asctime       time.daylight      time.mktime        time.strptime      time.timezone      

In [293]: time.ti
time.time      time.timezone  

In [293]: time.time?
Docstring:
time() -> floating point number

Return the current time in seconds since the Epoch.
Fractions of a second may be present if the system clock provides them.
Type:      builtin_function_or_method

文章首发于我的个人博客,同时我也在猿人学网站上写Python教程
你也可以关注我的个人公众号:猿人学Python

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43422.html

相关文章

  • ❤️不一样测试之旅:医疗行业软件测试有什么不一样?❤️

    一直在网站上学习别人的测试之路,现在也想分享一下自己的经历。 结缘测试 和大家不同的地方在于,作为一名生物医学工程专业毕业生,我都是在医疗行业打转。 我的软件测试之旅分为两段,第一段是一份实习,从2019年9月到2020年1月,第二段是毕业后的第一份工作,从2020年4月到今天。 实习之路 虽然从时间上来看,我的软件测试之旅接近两年,尤其是第一份实习,虽然时间跨度有四个月,但因为当时学校导师给的压...

    CarterLi 评论0 收藏0
  • Python中扩展C语言加快执行速度实现方法

    摘要:通过执行时间对比可以发现调用函数来扩展功能可以大大提高执行速度,而自带的库由于在源生代码上进行封装,执行时间会高于源生代码扩展方式,但库使用方便,特别适合应用在第三方封装代码,提供动态链接库和调用文档的场合。 前言 当我们提到一门编程语言的效率时,通常包含了开发效率和运行效率这两层意思。Python作为一门高级语言,它功能强大,易于掌握,能够快速的开发软件,life is short,...

    MudOnTire 评论0 收藏0
  • 就因为Python自动化,那个天天摸鱼同事,他居然升职了!

    摘要:根据具体的自动化测试岗位来说的,不要觉得自动化测试是机构炒起来的,确实有它存在的必要。自动化测试是相对手工测试而存在的,主要是通过所开发的软件测试工具脚本等来实现,具有良好的可操作性可重复性和高效率等特点。 当代的打工人真的太苦了! 每个月拿着几千块的工资,却为公司拼命,为老板赚钱; 天天9...

    laznrbfe 评论0 收藏0
  • 一名【合格】前端工程师自检清单

    摘要:在他的重学前端课程中提到到现在为止,前端工程师已经成为研发体系中的重要岗位之一。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。一基础前端工程师吃饭的家伙,深度广度一样都不能差。 开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。 winter在他的《重学前端》课程中提到: 到现在为止,前端工程师已经成为研...

    罗志环 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<