不容易记住的内置函数整理
1. all()和any(),all判断 可迭代参数 所有元素是否为True,如果是返回True否则返回 False。 any则是有一个为True返回True,参数元素全为False,返回False。他们的区别如同他们的名字一样。
2. bin() 全名 binary,将 int 或者 long int 转换为二进制。
>>> bin(10)
'0b1010'
3.bytes() 返回 新的 bytes对象,对象是一个0 <= x < 256区间内的整数 不可变序列。 bytearray() 与 bytes() 相似但是转为 可变序列。
>>> bytes([65, 66])
b'AB'
4. classmethod修饰符,修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。借用菜鸟教程的例子一下看懂[1]。
class A(object):
# 属性默认为类属性(可以给直接被类本身调用)
num = "类属性"
# 实例化方法(必须实例化类之后才能被调用)
def func1(self): # self : 表示实例化类后的地址id
print("func1")
print(self)
# 类方法(不需要实例化类就可以被类本身调用)
@classmethod
def func2(cls): # cls : 表示没用被实例化的类本身
print("func2")
print(cls)
print(cls.num)
cls().func1()
# 不传递传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准)
def func3():
print("func3")
print(A.num) # 属性是可以直接用类本身调用的
# A.func1() 这样调用是会报错:因为func1()调用时需要默认传递实例化类后的地址id参数,如果不实例化类是无法调用的
A.func2()
A.func3()
5. compile(source, filename, mode[, flags[, dont_inherit]]),将字符串或者AST(Abstract Syntax Trees)[2]对象转换为可执行代码。
source 可以是普通字符串,字节字符串或AST对象。
filename 读取代码的文件名称,如果不是从文件读取代码则传递一些可辨认的值,使用source则filename 可以使用''代替。
mode 要编译成的代码种类,可以指定为 exec, eval, single。如果 source 是语句序列,可以是 'exec', 配合exec()使用;如果是单一表达式,可以是 'eval'配合 eval()使用;如果是单个交 互式语句,可以是 'single',exec() eval()都可以。其余参数请参考官方文档。
mode = 'exec'
>>> str = 'for i in range(4): print(i)'
>>> c = compile(str, '', 'exec')
>>> type(c)
<class 'code'>
>>> exec(c)
0
1
2
3
model = 'eval'
>>> str = '7 + 8'
>>> c = compile(str, '', 'eval')
>>> type(c)
<class 'code'>
>>> eval(c)
15
>>> exec(c) # 无反应
model = 'single'
>>> str = 'input("请输入你的幸运数字:")'
>>> c =c oompile(str)
>>> c = compile(str, '', 'single')
>>> exec(c)
请输入你的幸运数字:6
'6'
>>> eval(c)
请输入你的幸运数字:6
'6'
6. complex
([real[, imag]]) 将字符串或数字转换为一个复数。
# 传入数字
>>> complex(1, 2)
(1+2j)
>>> complex(1) # 不传imag默认为0
(1+0j)
# 传入字串
>>> complex('1+2j')
(1+2j)
>>> complex('1+0j')
(1+0j)
# 字符串 “ + ” 两边是不能又空格的
>>> complex('1 + 0j')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: complex() arg is a malformed string
7. delattr(obj, attr_name),等于del x.attr_name,用于删除一个对象的属性。
class A:
x = 1
y = 2
a = A()
print(a.x)
delattr(A, 'x')
print(a.x) # 报错 AttributeError: 'A' object has no attribute 'x'
8. dir([obj]),函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。想要看某个对象的方法或属性什么的就直接dir() 它就ok了,调试过程中很好用的函数。
9. divmod(num1, num2),返回两个参数的商和余数的元组 (num1 // num2, num1 % num2), 不支持复数。
10. enumerate(seq, start=0) 传入可遍历对象,返回一个组合序列,同时包含数据和数据下标。返回类型为enumerate(枚举)类型。参数 start 为起始位置。
>>> a = ['a', 'b', 'c']
>>> e = enumerate(a)
>>> type(e)
<class 'enumerate'>
>>> for i,j in e:
... print(f'数据为:{i}, 下标为:{j}')
...
数据为:0, 下标为:a
数据为:1, 下标为:b
数据为:2, 下标为:c
# start的作用, 下标从1开始了
>>> e = enumerate(a, start = 1)
>>> for i,j in e:
... print(f'数据为:{i}, 下标为:{j}')
...
数据为:1, 下标为:a
数据为:2, 下标为:b
数据为:3, 下标为:c
11. filter(function, iterable), 根据传入的过滤函数(函数返回True的留下,False过滤不要)条件去过滤序列,返回新的序列。
# code
def filter2 (n):
return n != 2
newSeq = filter(filter2, [1,2,3])
print(f'返回的类型是:{type(newSeq)}')
newList = list(newSeq)
print(f'返回的内容是:{newList}')
# print
返回的类型是:<class 'filter'>
返回的内容是:[1, 3]
12. 持续更新
引用
[1] python3-classmethod修饰符(菜鸟):https://www.runoob.com/python/python-func-classmethod.html
[2] AST(Abstract syntax tree,抽象语法树):https://blog.csdn.net/qq_23599965/article/details/90643984