python(七)——内置函数,匿名函数

内置函数,匿名函数

内置函数

	python内置了一系列的常用函数,共68个

作用域相关2个

'''
locals():以字典类型返回当前作用域的全部变量
globals()以字典类型返回当前位置的全部全局变量

'''
a = 1
def k ():
    b = 2
    print(locals())#输出所有局部变量
    print(globals())#输出所有全局变量
k()   
print(locals())#输出所有全局变量
print(globals())#输出所有全局变量

迭代器相关3个

'''
range(start, stop[, step]) 创建一个整数列表,一般用在 for 循环中
iter(可迭代对象)	用来生成迭代器,相当于调用了__iter__()
next()返回迭代器的下一个元素,相当于调用了__next__()
'''

文件操作相关1个

'''
open(fileName)用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写
f = open(fileName)
f.readable()是否可读
f.writeable()是否可写

'''

内存相关2个

'''
id([object]) 获取对象内存地址
hash(object) 用于获取取一个对象(字符串或者数值等)的哈希值。
	hash方法只能哈希不可变数据类型
	在程序一次运行过程中,对象的hash值是不变的
	字典查询快,将key做一次hash,将值放在对应哈希值的内存地址中,查询只需要根据key做一次哈希
	就可以得到这个值,所以理论上他的查询复杂度是O(1)
	if key in dic 的效率是 if key in dic.keys()的上千倍 
	前者是字典,后者是列表
'''

输入输出相关2个

'''
input()接受一个标准输入数据,返回为 string 类型
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 用于打印输出,最常见的一个函数
'''1: f = open(fileName,'w')
			print('helloworld',file = f)'helloworld'输入到fileName文件中
			f.close()2:打印进度条
		import time 
		import os
		for i in range(0,101):
		    time.sleep(0.05)
		    
		    chars = '\r %s %% : %s \n' %(i,'' * i)
		    if i == 100:
		        chars = '\r %s %% : %s ' %(i,'*' * i)
		    print(chars,end = ' ' ,flush = False )
#打印进度条的4个库https://blog.csdn.net/m0_38106923/article/details/1038147953 :动态loading
		import time                                                                           
		print("Loading",end = "")
		for i in range(6):
		    print(".",end = '')
		    time.sleep(0.2)

字符串相关11个

'''
eval()用来执行一个字符串表达式,并返回表达式的值  有返回值,适合简单计算
exec()执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码,默认返回None,适合流程控制
compile()将一个字符串编译为字节代码。
format()格式化字符串
bytes([source[, encoding[, errors]]])返回一个新的 bytes 对象
			source 为整数,则返回一个长度为 source 的初始化数组
			source 为字符串,则按照指定的 encoding 将字符串转换为字节序列	(常用)
			source 为可迭代类型,则元素必须为[0 ,255] 中的整数
			 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray
			没有输入任何参数,默认就是初始化数组为0个元素
bytearray([source[, encoding[, errors]]])返回一个新bytes列表,这个列表里的元素是可变的,并且每个元素的值范围: 0 <= x < 256
memoryview()返回可切片的字节对象
ord() 传入单个字符作为参数,返回对应的ASCII码数值
chr()	传入一个整数,返回对应的字符
ascii()传入一个参数,返回对象中属于ASCII的内容(字母,数字,符号,拉丁文),其余以\uxxxx的形式输出
repr()	传入一个数据,完整输出数据,repr(1) ——> 1 	repr('1') ——> '1'
 
'''
st = '1+2+3+4'
ret = eval(st)	执行字符串表达式 有返回值
print(ret)

st = 'print(123)'
ret = exec(st)执行字符串表达式 无返回值

交互类型single
codel = ''name = input('input your name') ''
compilel = compile(codel, ' ','single')将字符串代码编译,通过eval()exec()运行
		参数1,字符串或者AST(Abstract Syntax Trees)对象
		参数2:文件名,从什么文件读取,有参数1,参数2为空即可
		参数3:指定编译代码的种类。可以指定为 exec, eval, single
exec(compilel )


#字符串格式化
print(format('value', '>20'))#右对齐,宽度为20,输出内容为value字符串

b = bytes('你好',encoding = 'utf-8')
print(b)    #b'\xe4\xbd\xa0\xe5\xa5\xbd'
st = b.decode('utf-8')
print(st)   #你好
#网络编程中,数据只能以字节传输
#例如gbk编码文件转为utf-8编码格式文件
#1.以bytes类型读取gbk数据,在decode(‘gbk’)转为unicode
#2.将unicode用bytes()转为utf格式的文件
import chardet
f = open(r'测试.txt',mode = 'rb')#gbk编码文件
f1 = open('file',mode = 'wb')
for i in f:
    date = i.decode('GB2312')#解码为unicode
    da = bytes(date,encoding = 'utf-8')#编码为utf-8的bytes类型写入文件中
    f1.write(da)
    
f.close()
f1.close()
f1 = open('file',mode = 'rb')
d = f1.read()
print(chardet.detect(d))

#bytearray返回一个bytes数组,当需要修改过大字符串中的某一处时,可以用这个方法直接修改,不会在内存中另外生成字符串

m = memoryview(bytes('你好',encoding = 'utf-8')) #可切片的字节对象,不占内存,转为字符串后还是占内存
print(m[0])

数据类型相关的11个

'''
list()将对象转化为列表的形式
tuple()将对象转化为元组的形式
str()将对象转化为字符串的形式
bool()将给定参数转换为布尔类型,如果没有参数,返回 False
int()将一个字符串或数字转换为整型
float()将整数和字符串转换成浮点数
complex()用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。。
以上函数强转时会用到
type(x) 返回变量x的数据类型
dict() 函数用于创建一个字典
set() 函数创建一个无序不重复元素集合
frozenset(可迭代的对象) 函数创建一个不可变的集合,不可增删改,可以作为字典的key
'''
print(complex(1,2))	#(1+2j)
print(complex('1+2j'))	#(1+2j)	此处在"+"号两边不能有空格,否则会报错

进制转换相关的3个

'''
bin() 返回一个整数 int 或者长整数 long int 的二进制字符串表示
oct() 将一个整数转换成8进制字符串表示
hex() 用于将10进制整数转换成16进制,以字符串形式表示
'''

数学运算相关的7个

'''
abs() 函数返回数字的绝对值
divmod(s1,s2) 除法s1/s2加求余s1%s2,返回一个包含商和余数的元组,分页会用到
round() 方法返回浮点数x的四舍五入值
pow() 方法返回 xy(x的y次方) 的值
sum() 方法对系列进行求和计算
min() 方法返回给定参数的最小值,参数可以为序列
max() 方法返回给定参数的最大值,参数可以为序列
'''

print(round(3.1415, 3))#3.142 保留3位小数
print(pow(2, 3))#8

输出字典中值最大的key
dic = {1:'name' , 2:'age' , 3:'sex' , 4:'job'}
def check(key):
    return dic[key]
print(max(dic,key = check))#key选择判断最值的条件

数据结构相关的10个

'''
数据类型:...
数据结构:dict,list,tuple,set,str
	容器类数据结构:list,tuple,dict,set
					序列,映射,集合这三类主要的容器
	线性数据结构:栈stack(先进后出),队列queue(先进先出),双端队列deque,链表linkdList
				
	序列中每个元素都有自己的编号,python中有6中内建序列,list,tuple,str,unicode,buffer,range

reverse() 反向原列表中元素,会改变原列表元素排列
slice() 函数实现切片对象,主要用在切片操作函数里的参数传递
len() 返回对象中元素个数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False
any() 函数用于判断给定的可迭代参数 iterable 有一个元素为True,返回True,否则返回False
zip() 函数接收2个可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象
filter(判断函数,可迭代对象) 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象;将可迭代对象的元素作为参数传入判断函数中,根据返回值True/False绝对是否保留这个元素
map() 会根据提供的函数对指定序列做映射
sorted() 函数对所有可迭代的对象进行排序操作
'''
l = [1,2,3,4,5,6]
l.reverse()
print(l)	#[6, 5, 4, 3, 2, 1]

sl = slice(1,9,2)   #定义一种切片规则,从下标1开始到下标9(不包括9),步长为2
l =list( range(15))
print(l[sl])

print(len('123456'))

l = [4,5,8,9,5,7,8] 
for  index,value  in enumerate(l):#index为元素下标 value为元素值
    print(index,value,end = ' / ')#0 4 / 1 5 / 2 8 / 3 9 / 4 5 / 5 7 / 6 8 /

l = [4,5,8,9,5,7,8] 
print(all(l))#True

l = [0,1,{},'',[]] 
print(any(l))#True

l = [1,2,3,4,5,6]
l2 = ['a','b','c','d']
ret = zip(l,l2)#返回一个zip对象<zip object at 0x000000000073CC08>
print(list(ret))#[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
#以可迭代对象中元素最少的为准,对于字典元素,只取key作为元组元素

#获取所有偶数
def check(num):
    if num % 2 == 0:
        return True
    return False
ret = filter(check,range(10))
for i in ret:
    print(i,end = ' ')
#filter() 筛选后的结果中元素个数可能变化,值不变

#获取字典的key的长度
l = {'name':'张三','age':'23','sex':'nan'}
ret = map(len,l)
for i in ret:
    print(i,end = ' ')
#map()筛选后的结果中元素个数不变,值可能变化

l = [8,-58,0,5,-123,9,-5,15,67]
ret = sorted(l)#ret = sorted(l,key=abs) 根据绝对值排序,对于字符串,key可以为len,字符串长度排序
print(ret)
 

其它内置函数16个

'''
dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
callable() 函数用于检查一个对象是否是可调用的
		对于函数、方法、lambda 函式、 类以及实现了 __call__ 方法的类实例, 它都返回 True
help() 函数用于查看函数或模块用途的详细说明

对象相关的13个方法
setattr() 函数用于设置对象属性值,该属性不一定是存在的
getattr() 函数用于返回一个对象属性值。
staticmethod()返回函数的静态方法
isinstance() 函数来判断一个对象是否是一个已知的类型
issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类
super() 函数是用于调用父类(超类)的一个方法。
property() 函数的作用是在新式类中返回属性值
vars() 函数返回对象object的属性和属性值的字典对象
classmethod()
__import__() 函数用于动态加载类和函数
hasattr() 函数用于判断对象是否包含对应的属性
delattr(对象,属性名) 函数用于删除对象的属性
object()
'''
#查看list的属性和方法
print(dir([]))

print(callable(dir))#True

#getattr()和setattr()是面向对象阶段需要用到的
class A :
    name = '测试变量'
a = A ()
setattr(a, 'age', '500')#添加一个新变量
print(getattr(a, 'name'))#测试变量  根据变量名获取变量值
print(getattr(a, 'age'))#500

from collections.abc import   Iterator,Iterable
l = [8,-58,0,5,-123,9,-5,15,67]
print(isinstance(l, Iterable))#判断是否可迭代
print(isinstance(l, Iterator))#判断是否是迭代器

匿名函数

函数名 = lambda 参数 : 返回值
#普通函数
def foo(x):
    return x + 2
f = foo(3)
print(f)#5

#匿名函数
f = lambda x : x + 2
print(f(3))#5

#输出字典中value最大的元素对应的key值
d = {'num': 26, 'num2' : 56, 'num3' : 35}
print(max(d,key = lambda k : d[k]))#num2
#min,max,fitter,map,sorted等都可以配合lambda使用
f = filter(lambda x : len(x) > 1 ,['name','addres','job','s'])
for i in f:
    print(i,end = ' ')#name addres job 


def foo():
    return [lambda x:x+2]	#以匿名函数作为列表元素
for i in foo():
    print(i)#匿名函数对象
    ret=i(5)#匿名函数调用
    print(ret)#7
#代码简化print([i(5) for i in foo()])	输出[7]


def foo():
    return [lambda x:x+i for i in range(4)]#相当于[lambda x:x+3,lambda x:x+3,lambda x:x+3,lambda x:x+3]
print([i(5) for i in foo()])#[8, 8, 8, 8]

def foo():
    return (lambda x:x+i for i in range(4))#改为生成器,一次取一个值,for循环值运行一次
print([i(5) for i in foo()])#[5, 6, 7, 8]

应用

#将元组形式的(('name'),('age')),(('张三'),('23'))转为字典元素的列表[{'name':'张三'},{'age':'23'}]
z = zip((('name'),('age')),(('张三'),('23')))#返回一个迭代器
def update(tup):
    return {tup[0]:tup[1]}
ret = map(update,z)
print(list(ret))
#简化代码	ret = map(lambda tu : {tu[0]:tu[1]},z)


发布了16 篇原创文章 · 获赞 0 · 访问量 76

猜你喜欢

转载自blog.csdn.net/qq_31241107/article/details/103809411