python函数中的内置函数及⽤法详解
今天来介绍⼀下Python解释器包含的⼀系列的内置函数,下⾯表格按字母顺序列出了内置函数:
下⾯就⼀⼀介绍⼀下内置函数的⽤法:
1、abs()
返回⼀个数值的绝对值,可以是整数或浮点数等。
print(abs(-18))
print(abs(0.15))
result:
18
0.15
2、all(iterable)
如果iterable的所有元素不为0、''、False或者iterable为空,all(iterable)返回True,否则返回False。
print(all(['a','b','c','d'])) #列表list,元素都不为空或0,返回True
True
print(all(['a','b','','d'])) #如果存在⼀个为空的元素,返回False
False
print(all([0,1,2,3]))  #如果存在为0的元素,同样返回False
False
print(all([]))  #空元组和空列表返回值为True
True
print(all(()))
True
3、any(iterable)
如果iterable的任何元素不为0、''、False,all(iterable)返回True,如果iterable为空,返回Fasle。
注意:此函数与all()函数的在于,any()函数中有任意⼀个元素为0、''、False不影响整体,会返回True,⽽all()函数中必须是全部不包含特殊元素才会返回True,只要有⼀个特殊元素,会直接返回False.
print(any(['a','b','c','d'])) #列表list,元素都不为空或0
True
print(any(['a','b','','d'])) #列表list,存在⼀个为空的元素,返回True
True
print(any([0,False]))  #如果元素全部是0,Fasle,返回Fasle
False
print(any([]))  #any函数中空列表和空元组返回Fasle
False
print(any(()))
False
4、bin()
将⼀个整数转换成⼀个⼆进制字符串,结果以'0b'为前缀。
print(bin(32))  #将⼗进制转换成⼆进制
print(bin(64))
print(bin(128))
result:
0b100000
0b1000000
0b10000000
5、hex()
将⼀个整数转换成⼀个⼩写的⼗六进制字符串,结果以'0x'为前缀。
print(hex(255))  #将整数转换成⼗六进制
print(hex(192))
result:
0xff
0xc0
6、oct()
将⼀个整数转换成⼋进制的字符串,结果以'0o'为前缀。
python正则表达式不包含
print(oct(255))  #将整数转换成⼋进制
print(oct(192))
result:
0o377
0o300
7、bool()
返回⼀个布尔值,True或False。
print(bool())  #bool值缺省为False
False
print(bool(0))
False
print(bool('jack'))
True
print(bool(""))
False
8、bytes()
将⼀个字符串转换成你想要的编码格式的字节。
print(bytes('你好',encoding='utf-8')) #将字符串转换成utf-8编码格式的字节
b' e4 bd a0 e5 a5 bd'
print(bytes('你好',encoding='gbk')) #将字符串转换gbk编码格式的字节
b' c4 e3 ba c3'
9、chr()
介绍chr()函数之前先看⼀下ASCII码对照表:
chr()函数就是返回整数对应的ASCII码对照表⾥的字符,取值范围[0~255]之间的正数。ord()函数作⽤正好和chr()函数相反,不再介绍,请看下⾯例⼦:
n = chr(65)  #根据⼗进制到在ascii码⾥对应的字符
print(n)
result:A
a= ord("a")  #根据字符到在ascii码⾥对应的⼗进制
print(a)
result:97
10、compile(source,filename,mode)
将source编译为,代码对象能够通过exec语句来执⾏或者eval()进⾏求值。source:字符串或者对象;
filename:代码⽂件名称,如果不是从⽂件读取代码则传递⼀些可辨认的值;model:编译代码的种类,可以指定为'exec','eval','single'。
print(cmpcode)
result:
<code object <module> at 0x000002A54E938ED0, file "", line 1>
11、exec()
exec语句⽤来执⾏储存在字符串或⽂件中的Python语句。
exec("print('hello,world')")  #执⾏exec()⾥的python语句
result:
hello,world
12、eval()
eval()函数将字符串str当成有效的表达式来求值并返回计算结果。
ret = eval("8*8")    #执⾏表达式并返回结果
print(ret)
#result:64
t = exec("8*8")    #执⾏python代码,可以接收或字符串,没有返回值
print(t)
#result:None
13、divmod(a,b)
divmod(a,b)⽅法是计算a,b的商和余数,即:a//b 余⼏,返回结果为元组。以后做⽹页翻页的时候会。num = divmod(9,2)    #9//2
print(num)
#result:
(4,1)    #结果为商4余1
14、enumerate(iterable,start=0)
返回⼀个枚举对象。iterable必须是序列,迭代器,或者其他⽀持迭代的对象。
dic = {'name':'jack',
'age':18,
'sex':'boy',}
for i in enumerate(dic.keys(),start=0):
print(i)
#result:
(0, 'name')
(1, 'sex')
(2, 'age')
15、filter()
对于序列中的元素进⾏筛选,最终获取符合条件的序列。
filter()  #循环第⼆个参数,让每个循环元素执⾏函数,如果函数返回值为True,表⽰元素合法
filter内部实现⽅法:
for item in 第⼆个参数:
r = 第⼀个参数(item)
if r:
result(item)
return result
#例:
def f1(args):
if args>22:
return True
li=[11,22,33,44]
ret = filter(f1,li)
print(list(ret))  #返回值为⼀个迭代器,所以使⽤list()函数来返回像上⾯这种简单的函数可以使⽤lambda函数来执⾏:
像上⾯这种简单的函数可以使⽤lambda函数来执⾏:
li = [11,22,33,44]
ret = filter(lambda a:a>22,li) #通过lambda函数处理,lambda是有返回值的,条件成⽴返回True
print(list(ret))
对于列表中字符串跟数字并存的提取⽅法:
li = [2,32,4,45,22,'tony',33,25,5,76,'liupeng',19,78,'jack',24]
l1 = []
<br>ret = filter(lambda i:type(i) == str,li)      #使⽤filter函数结合lambda表达式来过滤type为str的元素
print(ret,type(ret))
for i in ret:
l1.append(i)                    #把过滤掉的str元素导⼊到新列表中
print(l1)
#result:
<filter object at 0x7f4c5d1abcf8> <class 'filter'>
['tony', 'liupeng', 'jack']
li = [11,22,33,44,55,66,77,88,99,90]
def numb(args):
if args % 2 ==0:      #取列表中偶数值,要想取基数值把0变成1
return True
ret = filter(numb,li)
print(list(ret))
#result:
[22, 44, 66, 88, 90]
li1 = ['A','','B',None,'C',' ']
def numb1(args):
if args and args.strip():      # 去空
['A', 'B', 'C']
filter主要的功能其实就是进⾏过滤及筛选。在此进⾏⼀段插曲。python中的正则表达式也可以进⾏过滤跟筛选,主要是⾯向于字符串的过滤中起到了很好的作⽤。对于正则表达式打算另起章节具体介绍,在此仅简单列举1-2个案例仅供参考。
⼩插曲(正则表达式筛选案例):
需求1:取出s变量中的speed跟angle。
import re                       #在这⾥我们需要提前导⼊re模块。⽬的为了是使⽤re模块中findall⽅法
s = 'speed=210,angle=150'
m = re.findall(r'(\w*[a-zA-Z]+)\w*',s)      #\w代表匹配字母跟数字,*代表对于前⼀个字符重复0到⽆穷次,[a-zA-Z]代表匹配26个包含⼤⼩写的字母,⽽后⾯的+号表⽰把匹配到的字母拼接起来# m = re.findall(r'([a-zA-Z]+)',s)       #上述代码的简化版。不需要指定过度的匹配字符,因为[a-zA-Z]的范围已经是指定了所有字母组合了。
print (m)
#result:
['speed', 'angle']
需求2:从s这个字符串中,把数字跟字符分别提取出来。
import re
s = 'lajsfdhoiqu190821AWJKJE34ijoohoyyuoi1234uh12412io980843'
s1 = re.findall(r'[0-9]+',s)              #使⽤⽅法跟需求1中的运⽤⽅法基本⼀致。只不过范围我们从字符转到了字母⾝上。⽽在指定字母的时候给出【0-9】的范围即可。
print(s1)
s2 = re.findall(r'([a-zA-Z]+)',s)
print(s2)
#result:
['190821', '34', '1234', '12412', '980843']
['lajsfdhoiqu', 'AWJKJE', 'ijoohoyyuoi', 'uh', 'io']
需求3:从s这个字符串中,把数字跟字符分别提取出来。
import re
relink = '<a href="(.*)">(.*)</a>'
info = '<a href="www.baidu">baidu</a>'
cinfo = re.findall(relink,info)
print (cinfo)
#result:
[('www.baidu', 'baidu')]
16、map(函数,可迭代的对象)
我们先看map。map()函数接收两个参数,⼀个是函数,⼀个是序列,map将传⼊的函数依次作⽤到序列的每个元素,并把结果作为新的list返回。
举例说明,⽐如我们有⼀个函数f(x)=x2,要把这个函数作⽤在⼀个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以⽤map()实现如下:
现在,我们⽤Python代码实现:
>>> def f(x):
...  return x * x
...
>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]
map()传⼊的第⼀个参数是f,即函数对象本⾝。
你可能会想,不需要map()函数,写⼀个循环,也可以计算出结果:
def f(x):
return x*x
L = []
for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
L.append(f(n))
print(L)
#result:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
的确可以,但是,从上⾯的循环代码,能⼀眼看明⽩“把f(x)作⽤在list的每⼀个元素并把结果⽣成⼀个新的list”吗?
所以,map()作为⾼阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,⽐如,把这个list所有数字转为字符串:
>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
['1', '2', '3', '4', '5', '6', '7', '8', '9']
只需要⼀⾏代码(仅限于python2的版本。python3返回的是个迭代器需要for循环出元素)。
li = [11,22,33,44]
ret = map(str,li)
l1 = []
for x in ret:
l1.append(x)
print(l1)
#result:
['11', '22', '33', '44']
map结合lambda表达式案例:
li = [11,22,33,44]
new_list = map(lambda a:a+100,li)
print(list(new_list))
new_list = map(lambda a, b: a + b, li, sl)
print(list(new_list))
#result:
[12, 24, 36]
map结合⽣成器案例:
def func(x,y):
return x*y*2  #返回结果为x*y的和再成2
li = [1,2,3,4]
li1= [2,3,4,5]
ret = map(func,li,li) # 第⼀个参数为func函数本⾝,第⼆个参数为x(li列表中的每个值),第三个参数为y(li1列表中的每个值)
print(ret.__next__())
for i in ret:
print(i)
#result:(结果为li列表跟li1列表每个值相乘再成2)
4
12
24
40
17、reduce()
对于序列内所有元素进⾏累计操作:
li = [11,22,33]
result = reduce(lambda x,y:x + y,li)
print (result)
#result:      #注意在Python3中已经没有了reduce函数
66<br><br>当然也可以通过结合lambda表达式3⾏解决<br><br>
1
from functools import reduce#python3中已经把reduce踢出了内置函数。需要通过import functools函数来引⽤reduceli = [11,22,33]result = reduce(lambda x,y:x+y,li)print(result)#result:66 18、isinstance()
判断对象是不是类的实例。
li = [11,22,33]
n = isinstance(li,list)  #判断li是不是list类的实例
print(n)
#result:
True
19、len()
判断字符串长度。
s = "你好"
print(len(s))    #在python3中len函数既可以取的字符的长度,也可以取字节的长度
#python2.*中len函数只可以取字节的长度
#result:2
s = "你好"
b = bytes(s,encoding='utf-8')
print(len(b))
#result:6
分别使⽤2.*和3.*循环“你好”,查看结果:
2.7 for 循环“你好”      #输出6个空字符
3.5 for 循环“你好”查看结果    #输出"字符串结果"
20、max()、min()、sum()
max():取最⼤值; min():取最⼩值; sum():取总的值
li=[11,22,33]
print(max(li))      #最⼤值
33
print(min(li))      #最⼩值
11
print(sum(li))      #总和
66
21、pow(x,y)
pow()返回x的y次⽅的值。
print(pow(2,3))      #计算2的3次⽅
8
print(pow(2,4))      #计算2的4次⽅
16
22、round()
round()⽅法返回浮点数x的四舍五⼊值。
print(round(2.3))    #四舍五⼊
2
print(round(2.8))
3
23、random()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。