前言
python函数在python语言中是一等对象,是非常重要的一类对象,本部分主要记录内置到python解释器中的函数,按照类型进行记录,若函数属于多个类别,则在最相关的部分进行记录。
属性相关
对象属性的操作主要包括三种,检索(lookup)、赋值、删除。
-
getattr(obj, name, [default])
返回对象obj的name属性对应的值,若name属性不存在,并且default非空,则返回default值,否则抛出AttributeError。 -
hasattr(obj, name)
检查obj对象是否有name属性,本质是调用getattr,检查是否抛出AttributeError,若抛出则返回False,否则返回True。 -
setattr(obj, name, value)
将obj对象的name属性值设置为value。 -
delattr(obj, name)
删除obj对象的name属性。 -
dir([obj])
dir函数是比较多功能性的,当不带参数调用时,返回currently local scope的names。当带参数调用时,如果参数对象包含__dir__属性,则自动调用__dir__,否则将根据参数对象的类型做出不同的输出,若参数对象为module对象,则输出模块的属性;若参数对象为类,则输出类及超类的属性名称列表;若参数对象为其他对象,则输出对象、类及超类的属性列表。注意dir函数一般以交互性方式使用,其输出的属性名称列表可能不全,但一般都会输出对象关联性非常强的属性名称。 -
vars([obj])
不带参数时,作用与locals()相似;当提供obj参数时,返回实例、类、module对象的__dict__属性。
数值相关
-
abs(x)
返回数值型x的绝对值。 -
max
有两种形式,1)max(iterable, [key, default]),返回可迭代对象中的最大项,相当于sorted(iterable, key, reverse=True)[0],当可迭代对象为空时,并且default非空,则返回default,否则抛出ValueError,key与default必须是关键字参数。2)max(arg1, arg2, *args, key),返回最大项的位置参数。 -
min
与max对应。 -
round(number, [ndigits])
将number参数四舍五入到小数点后的ndigits位,如果ndigits为None,则返回离number最近的整数。 -
sum(iterable, [start])
求和start与iterable里元素的和,start默认为0。
检验相关
- all(iterable)
当参数迭代器中的元素全部为真值True,或者迭代器为空时,返回True
;否则返回False。
def all(iterable):
for item in iterable:
if not item:
return False
return True
-
any(iterable)
当参数包含的元素任意为真时返回真,否则返回False;相当于not all(x)。 -
callable(obj)
若对象是可调用的,则返回True;否则返回False。 -
type
1)以type(obj)方式调用时,返回object的类型对象,相当于调用“object.__class__”。
2)也可以做视作类工厂函数,签名为type(name, bases, attr_dict),第一个参数为新建类的名字,第二个参数是超类组成的元组,第三个参数是新建类的属性字典。分别对应类的__name__、__bases__、__dict__属性。 -
isinstance(object, classinfo)
输入的classinfo必须是一个type object,或者是包含type object的元组,若object是classinfo的实例或者是classinfo子类的实例,则返回True,否则返回False。 -
issubclass(class, classinfo)
输入的classinfo必须是一个type object,或者是包含type object的元组,若class参数时classinfo的子类,则返回True,否则返回False。 -
iter
iter函数有两种调用方式,1)iter(obj)方式时,obj需要包含__iter__或者__getitem__属性中的任意一种,结果将会生成一个迭代器。2)iter(obj, [sentinel])方式,此时obj必须是一个可调用对象,每次调用迭代器的__next__时,都会不带参数的调用可迭代对象,若迭代对象返回sentinel值,则抛出StopIteration,否则继续。
迭代相关
-
enumerate(iterable, start=0)
返回一个enumerate 对象,该对象是个迭代器,迭代器中的元素为idx与可迭代对象元素 组成的元组,idx默认从0开始。 -
next(iterator, sentinel)
调用迭代器内部的__next__方法返回迭代器的内部元素,若sentinel不为空,当迭代器耗尽时,将返回sentinel的值,否则抛出StopIteration。 -
zip(*iterables)
输入为一个或者多个可迭代对象,输出为迭代器,迭代器中的元素是一个元组,元组由输入的可迭代对象中的元素组成。当多个可迭代对象的长度不同时,以最短的可迭代对象的长度为标准,最短那个可迭代对象中的元素用完后,就不在生成新的元组元素。如果需要以最长的元素为标准,可调用itertools.zip_longst()。
def zip(*iterables):
iters = [iter(item) for item in iterables]
sentinel = object()
while iters:
res = []
for it in iters:
temp = next(it, sentinel)
if temp is sentinel:
return
res.append(temp) # 保证输入参数内部元素的顺序
yield tuple(res)
-
sorted(iterable, *, key=None, reverse=False)
返回一个排序后的列表, key与reverse指定的话,必须以关键字参数的形式指定,因为其前面有星号通配符收集位置参数。key关键值提供的参数必须是一个函数,且该函数只能包含一个参数,该函数处理可迭代对象中的每个元素,根据函数返回值进行排序,默认值为None,即根据可迭代对象的内在元素进行排序,reverse表示是否逆序排序。 -
map(function, *iterable)
返回一个迭代器,迭代器中的元素是function参数返回的结果,function参数为一个函数,其输入为可迭代对象中的元素,若可迭代对象只有一个,则function参数中的函数只能接受一个参数,若可迭代对象为多个,则function参数的函数需要同时接受多个参数,其中map迭代器中的元素数量以最短的可迭代对象参数的数量为准。
def map(function, *iterables):
iters = [iter(item) for item in iterables]
sentinel = object()
while iters:
res = []
for it in iters:
temp = next(it, sentinel)
if temp is sentinel:
return
res.append(temp)
yield function(*tuple(res))
- filter(function, iterable)
返回一个迭代器,逻辑为(item for item in iterable if function(item)),当function为空时,相当于lambda x:x。
字符串相关
-
input([prompt])
以交互式方式获取用户的输入,参数为提示语,会捕获用户的标准输入并转换为字符串返回。 -
ord©
输入一个字符,返回unicode编码表中参数字符对应的整数。 -
chr(i)
输入一个整数,返回unicode编码表中参数i对应的字符。 -
hex(x)
输入参数为整数型数值,函数会将参数转换成带‘0x’的小写的16进制表示的字符串。如果x对象不是整数型,需要包含__index__属性,调用__index__需返回一个整数。 -
oct(x)
输入参数为整数型数值,函数会将参数转换成带‘0o’的小写的8进制表示的字符串。如果x对象不是整数型,需要包含__index__属性,调用__index__需返回一个整数。
-bin(x)
输入参数为整数型数值,函数会将参数转换成带‘0b’的小写的2进制表示的字符串。如果x对象不是整数型,需要包含__index__属性,调用__index__需返回一个整数。
其它
-
locals()
返回current local symbol table的字典,当在函数体内调用locals时,还会返回自由变量,但在类定义体内调用不会返回自由变量;当在module层面调用locals,与globals结果一致。 -
globals()
返回 current global symbol table的字典,总是包含module层面的信息,当在函数体内调用时,返回的是定义module的信息,而不是调用module的信息。 -
hash(obj)
返回obj对象的hash值,若obj是数值型,若数值相等,则返回的hash值是一样的,尽管类型可能不一致。也可以自定义__hash__方法,改变默认行为。 -
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None,newline=None, closefd=True, opener=None)
- 对于mode参数,指明打开文件对象的模式,有rwatb,分别表示只读、重新写、附加、文本模式、二进制模式,默认以只读文本模式打开。
- encoding参数指明编码或者解码方式,
主要用于文本模式的打开方式
。当以二进制打开时,文件内的bytes直接输出,而以文本模式打开时,文件内的bytes首选需要解码成str,然后再输出。 - 其它参数用默认配置就OK。
-
super()
super本质是一个类, 并且实现了描述符协议。其核心功能是调用父类的方法。下列的模拟代码解释了super类的主要功能。
def super(cls, instance):
"""
- cls代表类, inst代表实例
- 对于python中定义的每一个类,Python 会计算出一个方法解析顺序(Method Resolution Order, MRO)列表,它代表了类继承的顺序,计算方式就是类.mro()
- super函数的本质就是先计算`inst`的mro,然后根据`cls`的索引位置返回列表中idx+1位置的**类**
- super的实现
"""
mro = instance.__class__.mro()
return mro[mro.index(cls) + 1]
-
id(object)
cpython中,返回obj在内存中的地址。 -
len(object)
返回obj包含的元素的数量,输入只能是sequence
或者collection
。 -
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
sep指定了多输入之间的分割方式, end指定了打印结束后换行,sep与end的值必须为字符串;objects收集任意多个位置参数,因此sep、end、file、flush必须以关键字参数的形式提供;所有位置参数都会进行str()转换。file参数自定文件对象,用于写入信息,由于所有位置参数都转换为字符串,因此文件对象不能以二进制方式打开,并且必须包含write方法。 -
repr(obj)
返回字符串表示的对象,可在obj对象对应的类中自定义__repr__属性,控制repr调用obj的返回字符串。
参考资料
1. super函数的使用