Python3学习之路~3.3 内置函数
Python内置函数表:
内置参数详解:https://docs.python.org/3/library/functions.html?highlight=built#ascii
用法:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#Author:Zheng Na # abs() 取绝对值 print(abs(-10)) #10 # all() 如果可迭代对象iterabla中的所有元素都为真(或者iterable为空),返回True print(all([])) # True print(all([1,-5])) # True print(all([0])) # False # any() 如果可迭代对象iterable中任意一个元素为真,返回真;如果iterable为空,返回False print(any([])) # False print(any([1])) # True print(any([-5])) # True print(any([0])) # False print(any([1,-5,0])) # True # ascii() 把一个数据对象变成一个可打印的字符串的形式,不常用 print(ascii("你好")) # '\u4f60\u597d' a=ascii([1,2,3]) print(type(a),[a]) # <class 'str'> ['[1, 2, 3]'] # bin() 把一个整数转成二进制 print(bin(1)) # 0b1 print(bin(5)) # 0b101 print(bin(255)) # 0b11111111 # bool() 返回一个布尔值 print(bool(1)) # True print(bool(-1)) # True print(bool(0)) # False print(bool([])) # False print(bool([0])) # True print(bool([1,2])) # True # bitearray() and bytes() #前面讲过,字符串不可修改,字符串的二进制字节格式更不可以修改 # 要修改必须生成一个新的覆盖旧的,如果没覆盖,其实旧的a根本没改,如下 a= bytes("abcde",encoding="UTF-8") print(a.capitalize(),a) # b'Abcde' b'abcde # 但是,bitearray()是可修改的二进制字节格式 b=bytearray("abcde",encoding="UTF-8") print(b[0]) # 97 打印了a的ASCII码 print(b[1]) # 98 打印了b的ASCII码 print(b[2]) # 99 打印了c的ASCII码 #b[1] = 'B' # 报错:TypeError: an integer is required b[1] = 66 print(b) # bytearray(b'aBcde') #如上,可以把字符串变成bytearray形式,然后就可以对字符串进行修改了 # callables() 判断是否可调用,即是否后面可加括号 print(callable([])) # False 列表不可调用 def sayhi():pass print(callable(sayhi)) # True 函数、类可调用 # chr() 返回ASCII码的对应表,参数必须是数字,与ord()对应相反 print(chr(97)) # a print(ord('a')) #97 # classmethod() 类方法 # compile() 用于底层的把代码进行编译的过程,我们基本用不到 code = "for i in range(10):print(i)" c=compile(code,'','exec') # <code object <module> at 0x0000000002444A50, file "", line 1> exec(c) #输出0到9,但其实直接exec(code)就可以执行,哈哈 code2 = "1+3/2*6" c2=compile(code2,'','eval') print(eval(c2) ) # 10.0 code3=''' def fib(max): n,a,b=0,0,1 while n<max: #print(b) yield b a,b = b,a+b n=n+1 return 'done' g = fib(6) while True: try: x = next(g) print('g:', x) except StopIteration as e: print('Generator return value:', e.value) break ''' py_obj=compile(code3,'err.log','exec') #err.log打印错误日志实际上不好使 exec(py_obj) # 输出: # g: 1 # g: 1 # g: 2 # g: 3 # g: 5 # g: 8 # Generator return value: done # complex() 复数,不常用 # delattr() 非常有用 # dict() 生成一个字典 print(dict()) # {} # dir() 查询一个数据类型下面有什么方法可用 a={} print(dir(a)) # 输出: # ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] # divmod() 返回商和榆树 print(divmod(5,2)) # (2, 1) # enumerate() name=['Amy','Bob','Cendy'] print(list(enumerate(name))) # [(0, 'Amy'), (1, 'Bob'), (2, 'Cendy')] print(list(enumerate(name,start=1))) # [(1, 'Amy'), (2, 'Bob'), (3, 'Cendy')] for index,item in enumerate(name): print(index,item) # 输出: # 0 Amy # 1 Bob # 2 Cendy # eval() 将字符串string对象转化为有效的表达式参与求值运算返回计算结果 x = 1 print(eval('x+1')) # 2 # exec() 执行以string类型存储的Python代码 x,y=2,3 exec("ans = x+y") print("Answer is:",ans) # Answer is: 5 # filter() 过滤器,类似于map() #把range(10)中符合lambda n:n>5规则的打印出来 res = filter(lambda n:n>5,range(10)) for i in res: print(i) #打印6 7 8 9 # map() 类似于filter() # 把后面的集合中的每一个值传入前面的lambda n:n*n进行处理,然后覆盖原来的列表 res = map(lambda n:n*n,range(10)) for i in res: print(i) #打印0 1 4 9 16 25 36 49 64 81 # reduce() 在python2.7中有,在python3.0已经将其从内置函数移到标准库中了 import functools res = functools.reduce( lambda x,y:x+y,range(10) ) #0+1+2+3+4+5+6+7+8+9=45 print(res) # 45 # float() 浮点 # format() 类似于字符串的format # frozenset() 冻结的、不可变的集合 #集合默认是可修改的但是将集合变成frozenset之后就不可修改了,像元组一样 a = set([1,2,4,7]) print(dir(a)) #打印方法 b = frozenset([1,2,4,7]) print(dir(b)) #如上,可以看出b比a少了很多方法,比如['add', 'clear', 'pop', 'remove', 'update', 'difference_update', 'discard', 'intersection_update', 'symmetric_difference_update'] # getattr() # globals() 返回一个字典,将当前程序的所有全局变量以key-value的形式打印出来 print(globals()) # locals() 返回一个字典,将当前程序的局部变量以key-value的形式打印出来 def test(): local_var = 333 print(locals()) # {'local_var': 333} print(globals().get('local_val')) # None test() print(globals().get('local_var')) # None # hasattr() # hash() 哈希 # help() 查看帮助 # hex() 把一个整数转成16进制 print(hex(255)) # 0xff # id 返回内存地址 # input() 交互输入 # user= input("Username:") # int() 取整 # isinstance(object,classinfo) 判断object是否是classinfo类型 print(isinstance([1,2,3],list)) # True # issubclass() 判断是否是子类 # iter() 把一个可迭代对象变成一个迭代器 names=iter([1,2,3,4,5,6]) print(type(names)) # <class 'list_iterator'> #len() 长度 print(len([1,2,3])) # 3 # max() 最大值 # min() 最小值 #memoryview() #usage: #>>> memoryview(b'abcd') #<memory at 0x104069648> #在进行切片并赋值数据时,不需要重新copy原列表数据,可以直接映射原数据内存, import time for n in (100000, 200000, 300000, 400000): data = b'x'*n start = time.time() b = data while b: b = b[1:] print('bytes', n, time.time()-start) for n in (100000, 200000, 300000, 400000): data = b'x'*n start = time.time() b = memoryview(data) while b: b = b[1:] print('memoryview', n, time.time()-start) # 输出: # bytes 100000 0.4980285167694092 # bytes 200000 3.0671753883361816 # bytes 300000 2.7071547508239746 # bytes 400000 5.042288541793823 # memoryview 100000 0.021001338958740234 # memoryview 200000 0.04300260543823242 # memoryview 300000 0.06600356101989746 # memoryview 400000 0.09100532531738281 # next() 相当于迭代器中的_next_() # oct() 把一个整数转成八进制 print(oct(13)) # 0o15 # open() 打开一个文件 with open('text.txt','w',encoding='UTF-8') as f: pass # ord() 返回ASCII码的对应表,参数必须是字符,与chr()对应相反 print(chr(97)) # a print(ord('a')) #97 # pow(x,y) 返回x的y次方 print(pow(2,8)) # 256 # print() 打印 msg = "又回到最初的起点" f = open("tofile.txt","w",encoding='UTF-8') print(msg,"记忆中你青涩的脸",sep="|",end="",file=f) # property() # range() for i in range(5): print(i) #输出0到4 for i in range(1,6): print(i) #输出1到5 # repr() 把一个对象变成字符串 a=repr([1,2,3]) print(type(a),[a]) # <class 'str'> ['[1, 2, 3]'] # reversed(seq) 跟列表中的reverse一样 # round() print(round(1.3334)) # 1 print(round(1.3334,2)) # 1.33 # slice() 切片,没什么用处 d = range(20) print(d[slice(2,5)]) #range(2,5) 相当于d[2:5] print(d[2:5]) # sorted() 排序 a={6:2,8:0,1:4,-5:6,99:11,4:22} #将字典变成列表,并按照key排序 print(sorted(a.items())) # [(-5, 6), (1, 4), (4, 22), (6, 2), (8, 0), (99, 11)] #将字典变成列表,并按照value排序 print(sorted(a.items(),key=lambda x:x[1])) # [(8, 0), (6, 2), (1, 4), (-5, 6), (99, 11), (4, 22)] # starticmethod() # str() # super() # tuple() 元组 a = tuple([1,2,3]) print(a) # (1, 2, 3) # type() 查看对象的数据类型,并且他也是所有对象的根 print(type([])) # <class 'list'> # vars() 返回一个对象的所有属性名,不常用 # zip() # zip(a,b)将a和b拼在一起,一一对应,像拉链(zip)一样 a=[1,2,3,4] b=['a','b','c','d'] for i in zip(a,b): print(i) # 输出: # (1, 'a') # (2, 'b') # (3, 'c') # (4, 'd') # 如果a多b少,按照最少的来 a=[1,2,3,4,5,6] b=['a','b','c','d'] for i in zip(a,b): print(i) # 输出: # (1, 'a') # (2, 'b') # (3, 'c') # (4, 'd') # __import__() # import aaa可以引入一个模块名,但是__import__()可以引入一个字符串格式的 # __import__('aaa')