python 常见的内置函数

时间:2023-12-05 21:05:38

内置函数

接下来,我们就一起来看看python里的内置函数。截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的。那今天我们就一起来认识一下python的内置函数。这么多函数,我们该从何学起呢?

    Built-in Functions    
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()  
delattr() hash() memoryview() set()  

上面就是内置函数的表,68个函数都在这儿了。这个表的顺序是按照首字母的排列顺序来的,你会发现都混乱的堆在一起。比如,oct和bin和hex都是做进制换算的,但是却被写在了三个地方。。。这样非常不利于大家归纳和学习。那我把这些函数分成了6大类。你看下面这张图,你猜咱们今天会学哪几大类呀?

python 常见的内置函数

我猜你们都猜对了。我们今天就要学习用粉红色标注出来的这四大块——56个方法。还有12个方法欠着怎么办呢?我们讲完面向对象这剩下的12个会在两周之内陆续还给你们的,我保证(认真脸)。那这样,我们今天就主要关注我们要学习的这56个方法。

那要学的一共4块,咱们从哪儿开始学起呢?

作用域相关

python 常见的内置函数

基于字典的形式获取局部变量和全局变量

globals()——获取全局变量的字典

locals()——获取执行本方法所在命名空间内的局部变量的字典

  print(globals())#打印全局变量,

  print(locals())#打印局部变量

其他

python 常见的内置函数

字符串类型代码的执行

http://www.cnblogs.com/Eva-J/articles/7266087.html

输入输出相关:

def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
"""
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件
sep: 打印多个值之间的分隔符,默认为空格
end: 每一次打印的结尾,默认为换行符
flush: 立即把内容输出到流文件,不作缓存
"""
sep=' '  在值之间插入字符串,默认空格
#打印进度条
import time
for i in range(0,101,2): mun=i//2 #要打印的星号的数量 # \r 默认表示将输出的内容返回到第一个指针,这样的话,后面的内容会覆盖前面的内容
to_print ='\r%s%%:%s\n'%(i,'*'*mun) if i==100 else '\r%s%%:%s'%(i,'*'*mun)#这里当i=100时 \n 才换行
         # \r 默认表示将输出的内容返回到第一个指针,这样的话,后面的内容会覆盖前面的内容
print(to_print,sep='--',end='',flush=True)# 这里end 要设置成“”否则打印一行,会换行一次
time.sleep(0.2)
# print(1,2,3,4,5,sep='*')  #sep是指定多个要打印的内容之间的分隔符
li=[1,2,3,5]
print(li,sep='//')
print(1,2,3,4,sep='*')
print('aa','bb',sep='122')
#打印的结果
# [1, 2, 3, 5]
# 1*2*3*4
# aa122bb

数据类型相关:

type(o) 返回变量o的数据类型

内存相关:

id(o) o是参数,返回一个变量的内存地址

hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错

调用相关:

callable()#判断是否可调用的

a='s'
def func():
print(a)
print(callable(a))#不可调用 False
print(callable(print))#可以调用 True
print(callable(func))#可以调用 True

#ctrl + 左键单击 :pycharm
#help:包含所有方法名以及他的使用方法 —— 不知道用法
#dir:只包含方法名 —— 想查看某方法是否在这个数据类型中

# f = open('文件名','w',encoding='utf-8')
#打开模式:r、w、a、rb、wb,ab     文件的操作最好不要用  带+ 号的操作方法,  就是不要同时读写,这样会容易造成光标混乱
#编码 utf-8/GBK

哈希
# print(id(1))
# print(id(2))
# print(hash('sajghfj;eyrwodnvjnz,.jifupwk')) #算法
# print(hash(125342))
# print(hash((1,2,3,4))) #数据的存储和查找
#模块:hashlib
# {'k':'v'}
# [1,2,3,4,5,6,] # hash([1,2,3,4,5,6,])
#hash 判断一个数据类型是否可以hash
#在一个程序执行的过程中,对同一个值hash的结果总是不变
#多次执行,对同一个值的hash结果可能改变
#简单求值表达式用eval
# code2 = '1 + 2 + 3 + 4'
# compile2 = compile(code2,'','eval')
# print(eval(compile2)) # code3 = 'name = input("please input your name:")'
# compile3 = compile(code3,'','single')
# # name #执行前name变量不存在
# exec(compile3)
# print(name) #exec
#eval
#compile

 

查看参数所属类型的所有内置方法

dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量  与之类似的还用一个  vars()  它查看的是全局空间的内的属性  以键值对的形式反映

和数字相关

python 常见的内置函数

数字——数据类型相关:bool,int,float,complex

数字——进制转换相关:bin,oct,hex

数字——数学运算:abs,divmod,min,max,sum,round,pow

数据函数:

divmod()函数: 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
print(divmod(3,2))
结果:

(1, 1)
min()函数:

min(iterable, *[, key, default])

min(arg1, arg2, *args[, key])

函数功能为取传入的多个参数中的最小值,或者传入的可迭代对象元素中的最小值。默认数值型参数,取值小者;字符型参数,取字母表排序靠前者。还可以传入命名参数key,其为一个函数,用来指定取最小值的方法。default命名参数用来指定最小值不存在时返回的默认值。功能与max函数相反。

print(min(26,7,8,9))
结果

同类型之间可以进行比较

print(min([1,2],[1,3]))
[1, 2]
key参数的另外一个作用是,不同类型对象本来不能比较取最小值的,传入适当的key函数,变得可以比较能取最小值了。

print(min(1,2,'3',key = int))
结果:1

max() 函数与 min()函数类似    都可以让 key= lambda   调用匿名函数

和数据结构相关

python 常见的内置函数

序列——列表和元组相关的:list和tuple

序列——字符串相关的:str,format,bytes,bytearry,memoryview,ord  将字母转换成ASCII码,chr  将ASCII码转成字母,ascii,repr

序列:reversed()  (反转,也是返回一个迭代器),slice

l=[12,44,3,4,-55,-66,7,8,9]
print(list(reversed(l)))
#打印结果是 [9, 8, 7, -66, -55, 4, 3, 44, 12]
l=[12,44,3,4,-55,-66,7,8,9]
seer=slice(1,5,2)
# 代表的是 开始索引,结束索引,步长
print(l[seer])
# 打印出的值是[44, 4]

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,all,any,zip,filter,map

filter和map:http://www.cnblogs.com/wangkun122/p/8278854.html

sorted方法:http://www.cnblogs.com/Eva-J/articles/7265992.html

方法1.用List的成员函数sort进行排序,在本地进行排序,不返回新的列表
方法2.用built-in函数sorted进行排序(从2.4开始),返回新的列表,原始输入不变

sorted(iterable, key=None, reverse=False)

参数说明:
iterable:是可迭代类型;
key:传入一个函数名  可以是一个匿名函数  详见此,函数的参数是可迭代类型中的每一项,根据函数的返回值大小排序;
reverse:排序规则. reverse = True  降序 或者 reverse = False 升序,有默认值。
返回值:有序列表

sort    用法     li. sort()  得到的是新的列表li   从小到大排列    li.sort(reverse=True)#这个是倒叙排列(从大到小)

sorted   ret=sorted(li)   的到的是一个可迭代对象,需要print(list(ret))  强转列表在打印才能取出他的值

reversesed() 反转  与sorted   相同  都是返回一个新的列表

l1 = [1,3,5,-2,-4,-6]
l2 = sorted(l1,key=abs)
print(l1)
print(l2)

字符串类的函数

eval()   是单词Evaluate   将字符串类型的代码执行并返回结果   所以运算类的字符串一般用这个

print(eval('1+2+3+4'))

exec()将自字符串类型的代码执行  无返回结果  所以带print 的字符串一般用这个

print(exec("1+2+3+4"))
exec("print('hello,world')")
code = '''
import os
print(os.path.abspath('.'))
'''
code = '''
print(123)
a = 20
print(a)
'''
a = 10
exec(code,{'print':print},)
print(a)

compile  将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。

参数说明:

compile(source, filename, mode[, flags[, dont_inherit]])   

1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。  

2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值  如直接传   " "。当传入了source参数时,filename参数传入空字符即可。  

3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。

>>> #流程语句使用exec
>>> code1 = 'for i in range(0,10): print (i)'
>>> compile1 = compile(code1,'','exec')
>>> exec (compile1)
1
3
5
7
9 >>> #简单求值表达式用eval
>>> code2 = '1 + 2 + 3 + 4'
>>> compile2 = compile(code2,'','eval')
>>> eval(compile2) >>> #交互语句用single
>>> code3 = 'name = input("please input your name:")'
>>> compile3 = compile(code3,'','single')
>>> name #执行前name变量不存在
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
name
NameError: name 'name' is not defined
>>> exec(compile3) #执行时显示交互命令,提示输入
please input your name:'pythoner'
>>> name #执行后name变量有值
"'pythoner'"

zip()拉链函数:

函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个的元组,然后返回由这些元组组成的迭代器。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组迭代器。

l1=[1,2,3]
l2=[4,5,8,3]
print(list(zip(l1,l2)))
print(*(zip(l1,l2)))
结果: [(1, 4), (2, 5), (3, 8)]
(1, 4), (2, 5), (3, 8)

匿名函数

http://www.cnblogs.com/wangkun122/p/8278643.html

本章小结

说学习内置函数,不如说整理自己的知识体系。其实整理这些内置函数的过程也是在整理自己的知识体系。

我们讲课的时候会归类:常用或者不常用,主要还是根据场景而言。

一个优秀的程序员就应该是在该用这个方法的时候信手拈来,把每一个内置的函数都用的恰到好处。

要想做到这一点,至少要先了解,才能在需要的时候想起,进而将它用在该用的地方。

但是在这里,我还是以自己的一点经验之谈,把几个平时工作中相对更常用的方法推荐一下,请务必重点掌握:

其他:input,print,type,hash,open,import,dir

str类型代码执行:eval,exec

数字:bool,int,float,abs,divmod,min,max,sum,round,pow

序列——列表和元组相关的:list和tuple    都可以用这种方法将他转换成对应的数据

序列——字符串相关的:str,bytes,repr

序列:reversed  翻译为反转 slice

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,zip,filter,map