python内置函数
dir()
返回拥有的方法
print(dir([]))
# ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
callable()
返回是否为函数
def aaa():
pass
print(callable([]))
# False
print(callable(aaa))
# True
help()
返回函数的指引(详细的帮助)
def aaa():
'''
我是aaa
:return:
'''
pass
help(aaa)
# Help on function aaa in module __main__:
#
# aaa()
# 我是aaa
# :return:
–import–(module_name)
import pkg
# import pkg.mod
# from pkg import mod, mod2
# from pkg.mod import func, func2
# from pkg.mod import submod
# 在前两种情况下,import语句将最左侧模块对象分配给了: pkg。之后的import pkg.mod可以这样使用pkg.mod.func(),因为import语句引入了本地的模块pkg,这是一个具有mod属性的模块对象。因此__import__函数必须返回最左侧的模块对象,以便将其分配给pkg。这两种情况相当于
#
# pkg = __import__('pkg')
# pkg = __import__('pkg.mod')
# 后面三种情况,import就必须做更多的工作了,它必须从模块对象获取并分配多个名称。但是__import__函数只能返回一个对象,并且它不能从模块对象中检索出多个名字,所以对于第三种情况就是:
#
# pkg = __import__('pkg')
# mod = pkg.mod
# mod2 = pkg.mod2
# 但是如果mod和mod2在该模块pkg中尚未导入,那将无法生效。__import__函数需要知道mod和mod2是它可以访问的名称,以便它可以查看他们是否是模块并且尝试导入他们。所以像一下这个方式更为接近:
#
# pkg = __import__('pkg', fromlist=['mod', 'mod2'])
# mod = pkg.mod
# mod2 = pkg.mod2
# 这会导致__import__先尝试pkg.mod和pkg.mod2,如果不生效的话,它并不会抛出异常。但是第五种例子按照以上方式依然不行:
#
#
# tmp = __import__('pkg.mod', fromlist=['submod'])
# submod = tmp.submod
–len–
返回容器长度
list=[12,31,21]
print(list.__len__())
# 3
id()
返回内存地址
hash()
返回hash值,(不可变数据类型)
exec()和eval()
print(exec('1+2+3')) # None
print(eval('1+2+3')) #6
# exec()和eval()都能执行字符串内的Python语句,区别exec没有返回值.
compile()
# str = "for i in range(0,10): print(i)"
# c = compile(str,'','exec') # 编译为字节代码对象
# c
# <code object <module> at 0x10141e0b0, file "", line 1>
# exec(c)
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# str = "3 * 4 + 5"
# a = compile(str,'','eval')
# eval(a)
# input这样式交互式代码用
# a=compile('input('please')','','single')
# exec(a)
sum
求迭代器等的合,默认为0+迭代器合,0可以修改 sum([],10)
min 或 max
求迭代器最小值或最大值,当有负数时候可以设置求正数最小值. min((,key=abs))
bytes
转换成bytes类型
注意:utf-8转gbk,过程:utf-8(decode)>unicode(encoding)>gbk
print(bytes('作业',encoding='gbk'))
print(bytes('作业',encoding='utf-8'))
# b'\xd7\xf7\xd2\xb5'
# b'\xe4\xbd\x9c\xe4\xb8\x9a'
bytearray
print(bytearray('作业',encoding='gbk'))
# bytearray(b'\xd7\xf7\xd2\xb5')
print(bytearray('打砂机',encoding='gbk')[0])
print(bytearray('打砂机',encoding='gbk')[1])
print(bytearray('打砂机',encoding='gbk')[2])
# 180
# 242
# 201
memoryview
返回byte类型的可切片的东西,不占内存,不知道干嘛用,先记着
print(memoryview(bytes('我的', encoding='utf-8')))
# <memory at 0x01E27F38>
ord \ chr
字符与asc码相互转换
print(ord('a'))
print(chr(97))
# 97
# a
ascii
内容在ascii码中返回原内容,如果不在返回 ‘\uxxxx’’
print(ascii('a'))
print(ascii('你'))
# 'a'
# '\u4f60'
repr
返回数据该有的样子,如果是字符串就带冒号
name='小花'
print('%r要去吃饭'%name)
print(repr(1))
# '小花'要去吃饭
# 1
all 和 any
all(可迭代的):迭代器中有1假,返回假.全是真返回真
any(可迭代的):迭代器中有1真,返回真,全是假返回假
zip
拉链函数,
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
filter
过滤
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
for i in newlist:
print(i) #1,3,5,7,9
map
>>>def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
reversed 和 sorted
reversed :反转列表,返回迭代器,不占内存
sorted:排序,返回新的列表,占内存,慎用!
list.sort():排序原列表
注意:sort(列表,key=匿名函数或者内置函数(比如len,abs,只写函数名))