16.python内置函数

内置函数目录及顺序:

作用域相关:locals(),globals()

迭代器相关:next(),iter(),range()

其他:dir(),callable(),help(),open(),id(),hash(),input(),print() ,exec() ,eval(),compile()

数据类型相关:bool(),int(),float(),complex()

进制转换相关:bin(),oct(),hex()

数据处理相关:abs(),divmod(),round(),pow(),sum(),min(),max(),reverse(),reversed(),slice()

字符串相关:format(),bytes(),bytearray(),ord(),chr(),ascii(),repr(),forzenset()

数据结构相关:all(),any(),zip(),filter(),map(),map(),sort(),sorted()

面向对象相关:property,setter,deleter,isinstance(),issubclass()

作用域相关:

locals()

返回本地作用域中的所有名字
globals()

返回全局作用域中的所有名字

迭代器相关:

next(迭代器)  

迭代器.__next__()=next(迭代器)

 __next__是属于迭代器的初始化方法,next()是内置方法,两者的作用相同,在使用next()方法时实际发挥作用的还是__next__函数

iter(可迭代的对象)

可迭代的对象.__iter__()=iter(可迭代的对象)

两者功能相同,返回一个迭代器

range()

range的结果是可迭代的,但是它不是一个生成器

其他:

dir(变量)

返回一个变量所拥有的其他所有方法

callable(变量)

查看变量是否是函数名,返回True 或False(经常被用来检验变量是否是函数名)

help(数据类型或变量) 

查看打印参数中数据类型或变量的所有使用方法

open()

打开一个文件

id(变量) 

返回变量的内存地址

hash(数据)

hash一个数据,如果数据是不可哈希的话报错,可哈希的话返回hash值,对于相同可hash数据的hash值在一次程序的执行过程中总是不变的

拓展:字典的寻址方式

字典中根据key来查找value的速度特别快,原因是字典将value的值存在内存为hash(key)的地址中,在查找value时,首先得到hash(key)的值,然后访问内存为该值的地址,就可以取到数据

input(提示)

打印提示内容,让用户输入,返回用户在键盘输入的内容

print()

打印内容

默认参数end='/n',指定输出的结果,每条语句打印完成后,会默认自动换行

默认参数sep=''  能够指定暑促多个值之间的分隔符

默认参数file: 之所以能够将指定内容显示在屏幕上,就是把屏幕当作成一个文件,如果把默认文件改成目录中的文件名并用open将文件打开,就会将指定内容打印到文件中

默认参数flushflush=True  立即把内容输出到流文件,不做缓存

exec(),eval()和compile()

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

执行结果:

None
10

这两行代码没有区别,1+2+3+4都会执行,但是exec没有返回值,eval将结果返回打印出来

都可以执行 字符串类型的代码,区别是eval有返回值,exec没有返回值

eval适合处理有结果的简单运算,只能用在你明确知道要执行的代码时什么,可以将代码变得简单
exec适合处理简单流程控制

compile 将数据类型的代码编译,代码对象能够通过exec语句来执行或者evel()进行求值
如果代码长度较大且复用性较大,可以使用compile函数先将函数编译一次,然后使用exec,或者eval对编译后的结果执行,这样函数就只用编译一次,不用每次都编译

数据类型相关:

bool()

用来返回布尔型数据,如: True ,False

int()

用来返回整型数据

float()

用来返回浮点数(有限循环小数,无限循环小数)

complex()

用来返回一个复数,即实数+虚数(虚数在python中用j表示)

进制转换相关:

bin(数据)

将数据转换成十进制

oct(数据)

将数据转换成八进制

hex(数据)

将数据转换成十六进制

数据运算相关:

abs(数据)

求数据的绝对值

divmod(参数1,参数2)

除余方法:返回一个元组(两个参数相除的结果,两个参数取余)

a=divmod(18,5)
print(a)

执行结果:

(3, 3)

round(参数,位数) 

将参数保留到小数点后指定的位数

pow(参数1,参数2,参数3)

如果给两个参数是求幂运算,返回参数1的参数2次方

如果给三个参数,返回前两个参数求出的幂值与参数3的模,就是幂值除以参数3的余数

a=pow(2,4)
b=pow(2,4,3)
print(a)
print(b)

执行结果:

16    #2的4次方
 1     #2的4次方再除以3的余数

sum(可迭代的数据类型,start)

返回参数1中所有元素的和,如果两个参数,就从strat的值开始依次求和

a=sum([1,2,3,4,5])
print(a)
b=sum([1,2,3,4,5],2)   #第二给我参数2表示从2开始加,即2+1+2+3+4+5
print(b)

执行结果:

15
17

min(可迭代对象或多个分开参数)

返回最小值,参数可以是一个可爹地啊对象;也可以是多个数据参数

a=min([2,3,6,8,0])
b=min(2,3,6,8,0)
print(a,b)

执行结果:

0 0

也可以写成min(可迭代对象,key=函数名),根据函数对数据进行操作,根据操作后最小的数据返回原来的值。

max() 

与min的使用方法相同,区别是最后返回最大值

reverse()

将列表中的数据反转,原来的数据丢失,即将原来的列表删除,冲印创建一个同名列表,将元素写入该列表

l=[1,2,3,4]
l.reverse()
print(l)

执行结果:

[4, 3, 2, 1]

reversed()

产生一个新的迭代器。其中的数据就是原列表中的元素反转

l=[1,2,3,4]
l2=reversed(l)
print(l2)

执行结果:

<list_reverseiterator object at 0x000002158C5EB588>

slice()

切片函数,其作用与[]切片相同

l=[1,2,3,4]
l2=slice(1,3)  #此处获得切片规则
print(l[l2]) #此处才进行真正的切片

执行结果:

[2, 3]

 字符串相关:

format()

将一个数值进行格式化输出,在数据处理上有强大功能,(前面的博客有相关的介绍)

bytes()

转换成bytes类型   即将unicode转换成utf-8 或gbk格式,用于三者之间的转换

print(bytes('你好',encoding='gbk').decode('gbk'))
print(bytes('你好',encoding='utf-8'))

字节类型的数据通常用于以下三个方面:

1.网络编程 只能传二进制
2.照片和视频也只能二进制存储
3.html网页爬取的内容也是二进制编码

bytearray()

转换成bytes类型后放入列表

ord()

字符按照unicode转数字   ascii转换

ascii()

是ascii的内容就打印出来,不是就转换成\u形式的数据

repr()

用于%r 格式化输出,就是将一个变量原封不动的打印出来,包括符号

a='1'
print(reper(a))

forzenset()

返回一个冻结的集合,冻结后集合不能再添加或删除任何元素

数据结构相关内置函数:

all(可迭代对象)

判断参数的元素中是否含有bool值为false的值,若有返回false,若无返回true

any(可迭代对象)

判断参数的元素中是否含有bool值为true的值,若有返回true,若无返回false

重点:

zip() 

拉链方法 ,返回一个迭代    将两个或两个以上的可列表或元组结合在一起,返回一个类似于字典的迭代器

a1=[1,2,3,4,5]
b1=('a','b','c','d')
c=zip(a1,b1)
print(c)
for i in c:
print(i)

执行结果:

<zip object at 0x000002045A3F4388>
(1, 'a')
(2, 'b')
(3, 'c')
(4, 'd')

filter(函数名,可迭代对象)

过滤函数,将可迭代对象的函数依次放入函数中当作参数执行,将所有的结果为true的值放入迭代器中返回

def is_jinum(x):
    return x % 2 ==1     #返回除以2余数为1的数据,
ret=filter(is_jinum,[1,2,3,4,5,6])   #当遇到除以2余数为1的数据时,结果为True,将该数据返回
for i in ret:
    print(i)

执行结果:

1
3
5

map(函数名,可迭代对象)

将可迭代对象的函数依次放入函数中当作参数执行,将所有的运行结果放入迭代器中返回

ret=map(abs,[1,-1,2,-4])
for i in ret:
    print(i)

执行结果:

1
1
2
4

map和filter函数的不同:

filter 执行了filter后的结果集合 (小于等于) 执行之前的个数
  只管筛选,不会改变原来的值
map 执行前后元素的个数不变,值会根据函数发生相应的改变

sort(key)

在原列表的基础上进行排序,改变原列表,可以设置key来改变排序的规则

sorted(可迭代对象,key,reverse)

对列表进行排序,不改变原列表,返回一个列表(因为复杂的排序算法不支持它返回一个迭代器),key设置排序规则,reverse设置反转排序

def df(x):
    return len(x)

a=['123','23','wewdsd','45677','','6676']
print(sorted(a,key=df))

l=['   ',[1,2],'hello world']
print(sorted(l,key=df))

面向对象相关:

property

内置装饰器函数,只在面向对象中使用,使用property可以把一个函数伪装称一个属性,同时要求被伪装的函数不能有任何参数传入

from math import pi
class Circle:
    def __init__(self,r):
        self.r=r
    def area(self):
        return self.r*2*pi
    def zhouchang(self):
        return self.r**2*pi
r1=Circle(2)
print(r1.area())

以上代码中,圆的周长和面积应该是一种圆的属性,不应该是一种方法,想要将类中的方法当作属性来调用,就要使用property,代码如下:

from math import pi
class Circle:
    def __init__(self,r):
        self.r=r
    @property
    def area(self):
        return self.r*2*pi
    @property
    def zhouchang(self):
        return self.r**2*pi
r1=Circle(2)
print(r1.area)   #将方法转换成属性来调用

setter

修改类中伪装成属性的函数

class Person:
    def __init__(self,name):
        self.__name=name
    @property
    def name(self):
        return self.__name+'sb'
a=Person('二格')
print((a.name))    
a.name='三哥'    #不能属性的方式修改被伪装的函数

以上代码中,想以普通属性的形式直接将伪装成函数的属性进行修改,这是不被允许的,想要修改,就要使用setter

class Person:
    def __init__(self,name):
        self.__name=name
    @property
    def name(self):
        return self.__name+'sb'
    @name.setter
    def name(self,new_name):
        self.__name=new_name
a=Person('二格')
print((a.name))
a.name='三哥'

deleter

想要删除该伪装属性,就必须使用deleter,代码如下:

class Person:
    def __init__(self,name):
        self.__name=name
    @property
    def name(self):
        return self.__name+'sb'
    @name.deleter
    def name(self,new_name):
        self.__name=new_name
a=Person('二格')
print((a.name))
del a.name
print((a.name))

 isinstance(obj,cls)

检查obj是否是类cls的对象,是返回True,否则返回false

class Teacher:
    dic={'学生':'show_stu_info','教师':'show_tea_info'}
alex=Teacher()
print(isinstance(alex,Teacher))

执行结果:True

issubclass(sub,super)

检查sub类是否是super的子类,是返回True

class Teacher:
    dic={'学生':'show_stu_info','教师':'show_tea_info'}
class Student(Teacher):
    pass

print(issubclass(Student,Teacher))

执行结果:True

 

posted @ 2020-10-13 22:58  maday  阅读(129)  评论(0)    收藏  举报