一、定义
python自动调用的,本来就有的函数。
不依赖某个函数,即使用前不需要加.
二、举例
1.dir
#dir 查看一个变量包含的所有方法名 print(dir(int)) m=[1,2,3,4] print('__next__' in dir(m)) g=iter(m) print('__next__' in dir(g))
2.collable
#callable检测是否是个函数 a=1 print(callable(a)) #false print(callable(globals)) #true
3.help
#help返回所有的方法名字以及用法 help(str)
4.id和hash
#内存相关 #id 内存地址 #hash 返回hash值 #列表属于不可哈希的类型 print(hash(1)) #不变,1 print(hash('111')) #会变 print(hash((1,2,3,4))) #不变,大数 #在一个程序执行中,可哈希的类型返回的哈希值不会变。但是再执行一次就会变。 #字典中key进行hash算法,得到一个数值即内存地址,存入value。所有key不可重复,而且必须可哈希
5.input、print与end,sep
#input每次执行就会必须输入值,得到回车然后结束。可以传入参数作为提示 #print。end指定如何换行,默认 。
#sep指定多个值之间的分隔符,默认空格。file指定文件,如果指定就是将打印的东西写到文件中 print('abcde',end='') print('abcde',end='') print('abcde',end='') print('') print(1,2,3,sep='|')
6.exec、eval与compile
#eval,exec,compile exec('print(1,2,3)') eval('print(1,2,3)') print(exec('1+2+3')) #none 没有返回值,适合简单的流程控制 print(eval('1+2+3')) #6,用在明确知道代码是什么,并且比较安全的情况下,一般不用 #exec,eval都可以执行字符串类型的代码,但是exec没有返回值 #关于exec code=''' for i in range(1,5): print('this is %s'%i) ''' exec(code) #compile 将需要执行的代码翻译成字节码以执行,一次编译,可以多次执行 #exec,流程类 c=compile(code,'','exec') #参数source,file exec (c) #eval,计算类 code2='1+2 +3' #无视空格 c2=compile(code2,'','eval') #参数source,file print(eval (c2)) #返回6 #single,交互类 code3='r=input("please input r:")' compile_3=compile(code3,'','single') #print(r) exec(compile_3) print(r) #虽然报错但其实此时执行到这里就可以用r了,上一步exec执行之前不可以用
7.几个简单内置函数
#复数不能比较大小,5+2j(python用j,一般用i) #浮点数:无限循环小数,有限循环小数,因为科学技术法的小数点可以浮动 #当小数点后特别长,会出现误差,而不是一般的四舍五入。因为计算机用的二进制转化 #bin 二进制 oct 八进制 hex 十六进制 #abs 返回绝对值 print(abs(-3)) #divmod 除法 接收两个参数而返回值是商和余数 print(divmod(9,5)) #round 做小数的精确, print(round(3.1415,2)) 返回3.14 #pow 求幂 print(pow(5,3,2)) 5的3次方对2取余,两个参数就直接算幂pow(5,3) #sum 求和 最多两个参数,可迭代的里面是数也可以print(sum([1,2,3,4,5],4)) # start=4,其实也是加,但是不可以按关键字传参,只能按位置传参 #min 求最小值 传参可以是可迭代的,也可以是不定长传参 print(min([1,2,5,4])) # print(min(1,2,5,-4,key=abs)) 计算按方法得到的结果再找最小值 #max 求最大值
#reversed和reverse区别 都是反转,reverse用后原先的已经变了,产生一个新的数据,reversed会保留原数据,产生一个新的迭代器
#sort与sorted区别,都是排序。但sort会改变原来的数据,而sorted重新创建一个数据,比较占内存。
#sli=slice(1,5,2) print(l[sli]) 切片,类似一种语法糖 #format 格式化输出,进制转换,计算,小数点精确,调整格式,左对齐等 # 左对齐 print(format('test','<20')) #bytes转换进制,其实一般读到内存都是unicode,用encoding转换 # print(bytes('ccc',encoding='gbk')) unicode转换成gbk # print(bytes('ccc',encoding='gbk').decode('gbk')) #又变成ccc # 网络通讯中,只能传二进制 , # 照片和视频也基本用二进制存储, # html爬取到的也是编码, #bytearray byte是个整体,将其作为列表进行操作,print(b_array[0])返回二进制的第一个的十进制数 # 修改时可以节省内存,但只能通过字符编码来修改 #memeryview 转换成utf-8的bytes可以进行切片,得到字节类型的切片,不占内存,但看到的只是字节,如果转换成字符串又占空间了
#ord 转换成ascii码,如果是中文得到一个很大的数 #ascii 转换成ascii码,如果是中文得到一个类似二进制编码 #chr ascii转换成字符
#repr print(repr('1'))返回有引号 print(repr(1))返回无引号 print('dcs is %r' %cccc) 原封不动的输出 #大括号括起来的都是无序的 #frozenset令集合不可变,可以成为字典的key #len长度 #enumerate 计数
#all()接收一个可迭代的值,看是否所有值都不为空 #any()接收一个可迭代的,看是否有某一个值是空,返回true
*很重要的几个内置函数 #zip(几个可迭代的),得到一个zip object,这是可以迭代的。左右两边拉成对应的,如果长度不一样就后面的值不再出现。无序地拉 # 字典只能拉key #filter() 循环可迭代地类型。ret=filter(panduan_1,[1,2,3,4]),可以,将后面的可迭代的值全放入第一个的函数进行判断,筛选适合的值 # 传递函数名不加括号,函数可以非常复杂
#map 使每个值执行一遍第一个参数代表的函数