转载于海内博客「Script Run」:疾速把握 Python 内置函数用法、按用处分类记忆

开篇词

Python 的内置函数提供了十分多实用的性能,这篇文章致力于分类疾速记忆 各个内置函数的「大抵性能与用法」,毕竟咱们的脑子又不是硬盘,只有保障能疾速找到笔记在哪里就能够了~

我将 Python 的内置函数大略分成 9 类,并不是很谨严,仅为了疾速记忆,上面依照分组的形式简略介绍每个函数的「性能」,并提供一个简略的「例子」。

当然,把握函数用法最疾速的形式不是看我薄弱的文字,而是 copy 我的示例代码去跑两遍。

迭代

range()

range() 函数返回数字序列,默认从 0 开始,默认以 1 递增,并以指定的数字完结(不蕴含指定的数字)。

x = range(6)for n in x:  print(n, end=' ')# 输入0 1 2 3 4 5

此外也能够指定数字范畴,语法:range(start, stop, step),比方创立一个从 0 到 6,增量为 2 的数字序列:

x = range(0, 6, 2)for n in x:  print(n, end=' ')# 输入# 0 2 4

reversed()

reversed() 函数用于反向迭代:

alph = ["a", "b", "c", "d"]ralph = reversed(alph)for x in ralph:  print(x, end=' ')# 输入# d c b a 

all()

如果迭代器中的所有元素都为真,则返回True(如果可迭代对象为空,返回True)。

iterable = [True, True]print("all: ", all(iterable))iterable[1] = Falseprint("all: ", all(iterable))# 输入# all:  True# all:  False

any()

如果可迭代对象的任何一个元素为真,则返回True(如果可迭代对象为空,返回False)。

iterable = [False, False]print("any: ", any(iterable))iterable[1] = Trueprint("any: ", any(iterable))# 输入# any:  False# any:  True

iter()

iter() 返回迭代器对象。

x = iter(["apple", "banana", "cherry"])print("iter", next(x))print("iter", next(x))print("iter", next(x))# 输入# iter apple# iter banana# iter cherry

next()

next() 函数返回下一个可迭代对象,示例见上文。

filter()

filter() 函数通过一个函数对「数据结构」进行过滤。

ages = [5, 16, 19, 22, 26, 39, 45]def myFunc(x):  if x < 22:    return False  else:    return Trueadults = filter(myFunc, ages)print("filter:", adults)for x in adults:  print("filter:", x)# 输入# filter: <filter object at 0x102a7f4f0># filter: 22# filter: 26# filter: 39# filter: 45

map()

map() 函数为每一个可迭代对象执行指定的函数。

def myfunc(a, b):  return a + bres = map(myfunc, ('apple', 'banana', 'cherry'), ('orange', 'lemon', 'pineapple'))for i in(res):   print("map:", i, end=" ")# 输入# map: appleorange map: bananalemon map: cherrypineapple max: Steve
map() 函数容易与其余语言的数据结构 map 混同,要牢记 Python 中的 “map” 是 dict。

len()

len() 函数返回数据结构中元素的数量。

当对象是字符串时,len() 函数返回字符串中的字符数。

print("len:", len("abc"))# 输入# len: 3

数学运算

abs()

abs() 被用来「求绝对值」。

print("abs: ", abs(-1))# 输入# abs:  1

sum()

sum() 被用来做「求和运算」。

a = (1, 2, 3, 4, 5)x = sum(a)

此外,也能够提供第二个参数(b):

sum(a, b) == sum(a) + b

pow()

pow(x, y) 函数代表幂运算:$x^y$

print("pow: ", pow(5, 3))# 输入# pow:  125

如果提供第三个参数,则返回 x 的 y 次幂后,取余 z。

print("pow: ", pow(5, 3, 4))# 输入# pow:  1

max()

max() 被用来「取最大值」。

print("max:", max(2,3,1))# 输入# max: 3

如果值是字符串,则按字母程序进行比拟。

print("max:", max("Bill", "Steve",  "Elon"))# 输入# max: Steve

min()

min() 被用来「取最小值」,与 max() 是孪生兄弟。

divmod()

divmod() 函数用于除法,返回商和余数,divmod(a, b) == a除以b

print("divmod:", divmod(5, 2))# 输入# divmod: (2, 1)

complex()

complex() 函数通过指定实数和虚数来创立一个「复数」。

print("complex: ", complex(7, 8))print("complex: ", complex('7+8j'))# 输入# complex:  (7+8j)# complex:  (7+8j)

round()

round()用于指定「小数位数」,并做四舍五入。默认四舍五入为「整数」,意味着小数位数为 0。

print("round", round(3.1415926, 2)) # 输入# round 3.14

Debug

breakpoint()

breakpoint() 是一款 debug 工具,提供三种命令:

  1. 命令'p':输入某个对象的值。
  2. 命令'n':进入到下一行代码执行。
  3. 命令'c':执行程序直到遇到下一个breakpoint()。

比方上面这个例子,进入 pdb 调试过程后,键入 'p lst' 能够将 lst 的以后值打进去,或者用命令'n'进入下一行代码:

# breakpointlst = []for i in range(10):    lst.append(i)    if i == 5:        breakpoint()

输出&输入流

print()

print() 函数将指定的「内容」打印到规范输出设备,内容能够是字符串,也能够是任何其余对象,该对象在打印之前会被转换为字符串。

给出两种进阶操作:

  1. 距离符号
print("log", "param", sep=" --- ")# 输入# log --- param
  1. for 循环调用 print() 打印成一行
x = range(6)for n in x:  print(n, end=' ')# 输入# 0 1 2 3 4 5

语法:print(object(s), separator=separator, end=end, file=file, flush=flush)

参数形容
object(s)任何对象,以及任意数量。打印前将转换为字符串。
sep='_separator_'可选。指定如何分隔对象,如果存在多个对象。默认值为 ' '。
end='_end_'可选。可选的。指定要在开端打印的内容。默认值为 '\n'(换行符)。
file可选。有写入办法的对象。默认为 sys.stdout。
flush可选的。布尔值,指定输入是刷新(True)还是缓冲(False)。默认为 False。

open()

open() 函数关上一个文件,并将其作为文件对象返回。

语法:open(file, mode)

参数形容
file文件的门路或名称。
mode字符串,定义您要在哪种模式下关上文件:
- "r":读取 - 默认值。关上文件进行读取,如果文件不存在,则产生谬误。
- "a":追加 - 关上文件进行追加,如果不存在则创立文件。
- "w":写入 - 关上文件进行写入,如果不存在则创立文件。
- "x":创立 - 创立指定的文件,如果文件存在则返回谬误。

另外,您能够指定文件应以二进制还是文本模式解决
- "t":文本 - 默认值。文字模式。
- "b":二进制 - 二进制模式(例如图像)。

input()

input() 函数容许用户输出。

print('Enter your name:')x = input()print('Hello, ' + x)

创立

set()

set() 函数用于创立「汇合对象」。

x = set(('apple', 'banana', 'cherry'))

slice()

slice() 函数创立「切片对象」。

a = ("a", "b", "c", "d", "e", "f", "g", "h")x = slice(3, 5)print("slice", a[x])# 输入# slice ('d', 'e')

zip()

zip() 函数用于创立「zip对象」。

zip 对象是元组的迭代器,它将迭代器的每一项交融在一起:

a = ("Bill", "Steve", "Elon")b = ("Gates", "Jobs", "Musk", "Richard")x = zip(a, b)for i in(x):   print("zip:", i)# 输入# zip: ('Bill', 'Gates')# zip: ('Steve', 'Jobs')# zip: ('Elon', 'Musk')
如果传递的迭代用具有不同的长度,则项目数起码的迭代器将决定新迭代器的长度。

tuple()

tuple() 函数用于创立「元组对象」。

x = tuple(('apple', 'banana', 'cherry'))

list()

list() 函数用于创立「列表对象」。

x = list(('apple', 'banana', 'cherry'))

dict()

dict() 函数用于「创立字典」。

x = dict(name = "Bill", age = 63, country = "USA")

bytearray()

bytearray 返回字节数组,比方返回 5 个字节的数组:

x = bytearray(5)

语法:bytearray(x, encoding, error)

参数形容
x创立 bytearray 对象时应用的资源
- 如果是整数,则会创立指定大小的空 bytearray 对象。
- 如果是字符串,请确保规定了资源的编码。
encoding字符串的编码
error规定若编码失败要做什么。

bytes()

bytes() 和 bytearray() 之间的区别在于,bytes() 返回一个不能批改的对象,而 bytearray() 返回一个能够批改的对象。

memoryview()

memoryview() 函数从指定对象返回内存视图对象,这里内容很多,当前独自聊一聊。

frozenset()

frozenset() 函数返回一个不可更改的 Frozenset 对象(相似于 set 对象,但不可更改)。

mylist = ['apple', 'banana', 'cherry']x = frozenset(mylist)# 如果你执行上面的语句,Python 会报错。# x[1] = "strawberry"

排序

sorted()

sorted() 函数返回指定的可迭代对象的排序列表:

  1. 能够指定升序或降序。
  2. 字符串按字母程序排序,数字按大小排序。
a = ("h", "b", "a", "c", "f", "d", "g", "e")print("sorted", sorted(a))print("sorted", sorted(a, reverse=True))# 输入# sorted ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']# sorted ['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']

sorted() 无奈对同时蕴含字符串值和数字值的列表进行排序。

类型转换

str()

str() 函数将指定的值转换为字符串。

ascii()

ASCII 编码,非 ASCII 编码的字符将应用以反斜杠\模式的转义字符示意。

a = "测试"print("ascii: ", ascii(a))a = "a1"print("ascii: ", ascii(a))# 输入# ascii:  '\u6d4b\u8bd5'# ascii:  'a1'

bin()

将整数转换为前缀为0b的二进制字符串。

print("bin: ", bin(3))# 输入# bin:  0b11

bool()

bool() 函数用于将给定参数转换为布尔类型,如果没有参数则返回 False。

print("bool", bool(0))print("bool", bool(1))print("bool", bool(2))# 输入# bool False# bool True# bool True

oct()

oct() 函数把整数转换为八进制字符串。

print("oct:", oct(15))# 输入# oct: 0o17

Python 中的八进制字符串以 0o 为前缀。

ord()

ord() 函数返回示意指定字符 unicode 编码的数字。

print("ord:", ord("A"))# 输入# ord: 65

chr(i)

chr() 函数返回代表指定 unicode 的字符。

print(chr(78))# 输入# N

float()

float() 把指定值转换为浮点数。

enumerate()

将元组转换为可枚举对象:

enumerate()函数将数据结构转换为枚举对象,并且为每个枚举对象增加一个整数索引:

x = ('apple', 'banana', 'cherry')y = enumerate(x)for i in(y):    print("enumerate", i)# 输入enumerate (0, 'apple')enumerate (1, 'banana')enumerate (2, 'cherry')

int()

int() 函数把指定值转换为整数。

isinstance()

如果指定的对象领有指定的类型,则 isinstance() 函数返回 True,否则返回 False。

print("isinstance:", isinstance(10, int))# 输入# isinstance: True

hex()

hex() 函数将指定的数字转换为十六进制值(以前缀 0x 结尾)。

print("hex:", hex(255))# 输入# hex: 0xff

面向对象

vars()

vars() 函数返回对象的 dic 属性(__dict__ 属性是蕴含对象的可变属性的字典)。

class Person:  name = "Bill"  age = 19  country = "USA"print("vars:", vars(Person))# 输入# vars: {'__module__': '__main__', 'name': 'Bill', 'age': 19, 'country': 'USA', '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}

super()

super() 函数返回代表父类的对象。

用法示例:创立一个子类,子类从父类继承所有办法和属性:

class Parent:  def __init__(self, txt):    self.message  def printmessage(self):    print(self.message)class Child(Parent):  def __init__(self, txt):    super().__init__(txt)x = Child("Hello, and welcome!")x.printmessage()

type()

type() 函数用户获取「对象的类型」。

a = ('apple', 'banana', 'cherry')b = "Hello World"c = 55print("type:", type(a))print("type:", type(b))print("type:", type(c))# 输入# type: <class 'tuple'># type: <class 'str'># type: <class 'int'>

object()

object() 函数返回一个空对象:

x = object()

这个对象不能被增加新的属性或办法。

这个对象是所有类的根底,它领有所有类默认的内置属性和办法。

dir()

dir() 函数返回指定对象的所有属性(包含内置属性)和办法,不带值。

class Person:  name = "Bill"  age = 63  country = "USA"print("dir:", dir(Person))# 输入# dir: ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'country', 'name']

hash()

获取指定对象的「Hash值」,比方对下面例子中的 Person 对象做哈希:

print("hash:", hash(Person))# 输入# hash: 344004709

issubclass()

issubclass() 用于判断是否是子类。

class myAge:  age = 63class myObj(myAge):  name = "Bill"  age = myAgeprint("issubclass:", issubclass(myObj, myAge))# 输入# issubclass: True

setattr()

setattr() 函数用于设置对象的「属性的值」。

class Person:  name = "John"  age = 36  country = "Norway"setattr(Person, 'age', 40)print("setattr:", Person.age)# 输入# setattr: 40

getattr()

getattr() 函数从指定的对象获取「属性的值。

class Person:  name = "Bill"  age = 63  country = "USA"print("getattr:", getattr(Person, 'age'))print("getattr:", getattr(Person, 'page', 'my message'))# 输入# getattr: 63# getattr: my message

hasattr()

如果指定的对象领有指定的属性,则 hasattr() 函数将返回 True,否则返回 False。

class Person:  name = "Bill"  age = 63  country = "USA"print("hasattr:", hasattr(Person, 'age'))# 输入# hasattr: True

callable()

如果指定的对象是可调用的,则 callable(object) 函数返回 True,否则返回 False。

id()

id() 函数用户获取对象的「惟一id」。

Python 中的所有对象都有其本人的惟一 id,并且在创立时就已被调配,id 是对象的内存地址,并且在每次运行程序时都不同。(除了某些具备恒定惟一 id 的对象,比方 -5 到 256 之间的整数)。

x = ('apple', 'banana', 'cherry')print("id:", id(x))# 输入# id: 4308973376

编译与执行

不太罕用,理解即可。

eval()

eval() 函数计算指定的表达式,如果该表达式是非法的 Python 语句,它会被执行。

eval('print(78)')# 输入# 78

语法:eval(expression, globals, locals)

参数形容
expression字符串,会被评估为 Python 代码。
globals可选。蕴含全局参数的字典。
locals可选。蕴含局部参数的字典。

exec()

exec() 函数执行指定的 Python 代码。

exec() 函数承受大量代码块,这与 eval() 函数仅承受单个表达式不同。

exec('name = "Bill"\nprint(name)')# 输入# Bill

语法与 eval(expression, globals, locals) 相似

compile()

compile() 函数将指定的源作为代码对象返回,并筹备执行。

x = compile('print(78)', 'test', 'eval')exec(x)# 输入# 78

语法:compile(source, filename, mode, flag, dont_inherit, optimize)

参数形容
source必须。要编译的资源,能够是字符串、字节或 AST 对象。
filename必须。源所来自的文件的名称。如果源不是来自文件,则能够编写任何内容。
mode必须。非法值:
- eval:如果源是单个表达式
- exec:如果源是语句块
- single:如果源是单个交互式语句
flags可选。如何对源进行编译。默认为 0。
dont-inherit可选。如何对源进行编译。默认为 False。
optimize可选。定义编译器的优化级别。默认为 -1。

globals()

globals() 函数将全局符号表作为字典返回。

符号表蕴含无关以后程序的必要信息。

x = globals()print("globals:", x["__file__"])# 输入# globals: /Users/xxx/code/python-demo/basic/built_in.py