前言

python有许多内置的函数,它们定义在python的builtins模块,在python的代码中可以直接使用它们。

常用的内置函数

类型转换

  • int

python的整数类型都是int类型的实例,但int类也可以被调用,将参数转换成int类型。

class Dog(object):
def __int__(self):
return 100 if __name__ == "__main__":
dog = Dog()
print(int(dog)) # 100 # int方法调用了参数的__int__魔法方法。
  • str:调用参数的__str__方法获取返回值;

  • float:调用参数的__float__方法获取返回值;

  • complex:调用参数的__complex__方法获取返回值;

class Dog(object):
def __float__(self):
return 3.6 def __complex__(self):
return (3-4j) def __str__(self):
return 'str' if __name__ == "__main__":
dog = Dog()
print(str(dog)) # str
print(float(dog)) # 3.6
print(complex(dog)) # (3-4j)
  • dict:将一个对象转化成字典;

  • list:将一个对象转化成列表;

  • tuple:将一个对象转化成元组;

  • slice:创建一个切片对象,list和tuple类型可用;

my = [i for i in range(10)]
print(my[slice(0,3,2)]) # 无论索引、切片操作都调用了可迭代对象的__getitem__方法。

算术计算

abs():求参数的绝对值,只支持一个参数,会调用参数的__abs__魔法方法;只支持int和float类型
bin(*args, **kwargs):返回整数的二进制表示形式,只支持一个参数,调用参数的__bin__方法,只支持int类型
divmod(x, y):求x//y和x%y的值,即商和余数的元组,调用__divmod__方法,只支持int和float类型
hash():获取一个对象的散列值,相等的两个数哈希值相等,反过来不一定成立
hex(*args, **kwargs):求整数的十六进制表示形式,调用__hex__方法,只支持Int类型
oct(*args, **kwargs):求整数的八进制表示形式,调用__oct__方法,只支持Int类型
pow(*args, **kwargs):求幂,如pow(3,4)表示3的4字方,pow(3,4,5)表示3**4%5,调用__pow__方法,只支持int和float类型
sum(*args, **kwargs):求和,只支持由int类型和float类型构成的可迭代对象,调用__sum__方法,支持所有的可迭代类型
  • round():对于一个数四舍五入计算,第二参数可以指定精度
print(round(3.5)) # 4
print(round(4.77,1)) # 4.8

迭代运算

  • all:对可迭代对象的每个元素进行布尔判断,所有为真返回真,存在假则返回假
print(all((1,'df',[1,2],1.2))) # 结果:True
print(all((None,{1,2}))) # 结果:False
  • any:对可迭代对象的每个元素进行布尔判断,所有为假返回假,存在真则返回真
print(any((1,'df',[1,2],''))) # 结果:True
print(any((None,[]))) # 结果:False
  • max和min:计算容器或多个值的最大值与最小值,可以通过key参数指定比较的规则,默认是算术大小比较。
print(max([1,2,3,4,5])) # 5
print(max('name','jj','age',key=lambda x:len(x))) # 'name'
  • sorted:对任何的可迭代对象进行排序,通过key指定排序规则, reverse指定方向;返回的结果是一个新的对象
print(sorted(['name','age','hight'], key=lambda x:len(x), reverse=False))
print(sorted([4,3,6,8]))

编码运算

  • ascii:返回一个对象的ascii编码,windows系统对象默认的编码是ascii,支持大部分类型
print(ascii('我')) # '\u6211'
print(ascii('x')) # 'x'
print(ascii('100')) # '100'
print(ascii(100)) # 100
print(ascii(10000000000000000)) # 10000000000000000
  • chr:返回一个整数序号在ascii表中代表的单字符,只支持整数
print(chr(97)) # a
print(chr(4)) # ? 不识别,没有对应的字符
  • ord:返回一个单字符代表的Unicode编码。

  • compile:将字符串编译为字节代码,方便exec或eval去执行。

语法:compile(source, filename, mode[, flags[, dont_inherit]])
# 参数:
source -- 字符串
filename -- 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
mode -- 指定编译代码的种类。可以指定为 exec, eval, single。
flags -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。 x = compile('print("hello world")', '', 'exec')
exec(x) # hello world
  • eval:用来执行一个字符串表达式,并返回表达式的值。
参数:
expression:表达式字符串
globals:变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals:变量作用域,局部命名空间,如果被提供,可以是任何映射对象。 for example:
x = 3
def test():
x = 1
res = eval("x ** 3", globals(), locals())
print(res)
return res if __name__ == "__main__":
test() # 如果参数只有globals(),值为27,如果提供了locals(),命名空间为本函数,值为1
  • exec:执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码,返回的永远是None。
# 参数:
expression:表达式字符串
globals:变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals:变量作用域,局部命名空间,如果被提供,可以是任何映射对象。 for example: exec("def foo(): print('hello world')")
exec("foo()")

进程结束

  • exit()和quit():用来退出进程,抛出SystemExit异常,解释器会捕获该异常退出程序。
try:
exit(0)
except SystemExit as e:
print(e) # 0
print('jjjj') # SystemExit会搜集到错误的code,0表示正常退出,1表示异常退出

输入输出

  • input:该方法会打开一个交互式的窗口,阻塞等待用户的输入;

  • print():这个算是python最常用的方法之一了,在命令窗打印内容,会调用参数的__str__方法,如果该方法不存在则调用__repr__方法,并将返回的值交给file参数。

参数:
values:需要输出的值
sep:设置间隔符,默认为空
end:添加的结束符
file:一个文件对象 for example:
print('name','xx',file=open('./test.txt','w'))

命名空间

  • globals():获取所在模块的全局命名空间,即所有的方法、类、变量等名字和对象键值对构成的字典,包括导入的对象;

  • locals():获取局部的命名空间,即本类或本函数的的属性、方法等构成的字典;

  • vars(p_object):无参数返回locals(),有参数返回参数的__dict___

判断

  • callable:判断参数是否支持调用,返回布尔值,本质是判断参数对象存在__call__方法,只支持一个参数

  • delattr(x, y):将x对象的y属性删除,如果没有这个属性会报错,所以一般先要判断一下,调用了x的__delattr__方法

class A(object):
age = 20
def __init__(self):
self.name = 'cai'
if __name__ == "__main__":
a = A()
delattr(a, 'name') # 实例只能删除实例属性
delattr(A,'age') # 类只能删除类属性
  • hasattr(x,y):判断x对象是否存在y属性
class A(object):
age = 20
def __init__(self):
self.name = 'cai'
if __name__ == "__main__":
a = A()
print(hasattr(A,'age')) # True
print(hasattr(A,'name')) # false
print(hasattr(a,'age')) # True,实例拥有类的属性
print(hasattr(a,'name')) # True
  • getattr(x,y):获取x对象的y属性,如果没有报错,所以需要判断,实例可以获取类的属性,调用了x对象的__getattribute__方法。
class A(object):
age = 20
def __init__(self):
self.name = 'cai'
if __name__ == "__main__":
a = A()
print(getattr(A,'age')) # 20
print(getattr(a,'age')) # 20
print(getattr(a,'name')) # 'cai'
print(getattr(a,"hight")) # 报错
  • setattr(x, y, v):设置x对象的y属性的值是v,如果存在则修改,不存在则创建,调用x对象的__setattr__方法
class A(object):
age = 20
def __init__(self):
self.name = 'cai' if __name__ == "__main__":
a = A()
print(getattr(A,'age')) # 20
setattr(A,'age',30) # 修改类属性
print(getattr(A, 'age')) # 30
print(getattr(a, 'age')) # 30,如果实例没有盖属性会去寻找类有没有这个属性
setattr(a, 'age', 40) # 设置实例属性
print(getattr(A, 'age')) # 30
print(getattr(a, 'age')) # 40
  • isinstance和issubclass:判断一个对象的类型和一个对象是否是另一个对象子类
class A(object):
age = 20
def __init__(self):
self.name = 'cai' class B(object):
pass if __name__ == "__main__":
a = A()
print(isinstance(a,A)) # True
print(isinstance(a,(A,B))) # True 只要有一个符合就返回True
# 同理issubclass的使用和isinstance一样

其他

  • repr():函数将对象转化为供解释器读取的形式。

  • iter():获取一个可迭代对象的迭代器,调用参数的__iter__方法;

  • next():获取一个迭代器的元素值,调用可迭代对象的__next__方法。

  • len():计算一个容器中的项数,会调用参数的__len__方法

  • dir:

函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法_dir_(),该方法将被调用。如果参数不包含|_dir_(),该方法将最大限度地收集参数信息。

class A(object):
age = 20
def __init__(self):
self.name = 'cai' if __name__ == "__main__":
a = A()
print(dir(a)) # 对实例对象返回[]
print(dir(A)) # 参数需要是对象、变量、类型。

dir()和__dict__返回的数据的区别在于__dir__获取对象的所有属性、方法的名字组成列表,包括继承父类的;__dict__记录当前类定义的所有的属性、方法的名字与具体对象组成的键值对。

  • id:获取一个对象在内存空间中的地址;

总结

  • 可以看到很多内置函数的源码都是pass,这是因为源码展示给我们的只有名字而已,方便我们调用,它们的具体实现算法被隐藏;

  • 有些方法的算法直接内置在解释器中,可以直接调用;有些会去调用方法的参数相对应的魔法方法,大部分魔法方法的实现算法也内置在了解释器中;

  • 内置函数都是作为全局函数来使用的,不需要导入即可直接使用,也就是说解释器启动是就加载了内置函数的上下文;

参考

python基础之常用内置函数的更多相关文章

  1. Python 基础之常用内置函数

    1.常用内置函数 (1)abs 绝对值函数 intvar = -9 res = abs(intvar)print(res) (2)round 四舍五入 (n.5 n为偶数则舍去 n.5 n为奇数 ,则 ...

  2. PYTHON语言之常用内置函数

    一 写在开头本文列举了一些常用的python内置函数.完整详细的python内置函数列表请参见python文档的Built-in Functions章节. 二 python常用内置函数请注意,有关内置 ...

  3. Python基础学习五 内置函数

    1.函数补充: 1)函数返回值return可以有多个 2)补充示例: nums = [0,1,2,3,4,5,6,7,8] #如何将list里面的元素变为字符串类型 new_nums = [str(x ...

  4. python 基础篇 15 内置函数和匿名函数

    ------------------------>>>>>>>>>>>>>>>内置函数<<< ...

  5. python基础学习笔记——内置函数

    一. 简介 python内置了一系列的常用函数,以便于我们使用,python英文官方文档详细说明:点击查看, 为了方便查看,将内置函数的总结记录下来. 二. 使用说明 以下是Python3版本所有的内 ...

  6. python基础 (装饰器,内置函数)

    https://docs.python.org/zh-cn/3.7/library/functions.html 1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使 ...

  7. python基础学习Day14 内置函数 匿名函数

    一.内置函数里几个高频重要函数 (1)min\max函数的用法 以min函数的为例: min:返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值). l1 =[(,),(, ...

  8. python基础一 day15 内置函数

    '\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖: '\n' 换行,换到当前位置的下一行,而不会回到行首: # print()# input()# le ...

  9. Python学习笔记-常用内置函数

    输出:print() 功能:输出打印 语法:print(*objects, sep=' ', end='\n', file=sys.stdout) 参数:objects----复数,表示可以一次输出多 ...

随机推荐

  1. 在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号

    在Delphi中动态地使用SQL查询语句 在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态特性.下面介绍如何在Delphi中实现这种功能.在Delphi中,使用SQL查询语句的途 ...

  2. 第188天:extend拷贝创建对象的原理

    一.拷贝创建对象的原理 //拷贝创建对象核心代码 function extend(target,source) { //遍历对象 for(var i in source){ target[i] = s ...

  3. 【明哥报错簿】可以访问jsp但是访问不到controller

    此工程wms-web-enterprise启动之后,jsp页面可以访问,但是进不了controller.后来发现wms-consumer无法打包编译,在仓库m2里面发现此consumer.jar包为完 ...

  4. java学习2-webserver测试工具soapUI使用

    file-->new soap project-->输入project Name(随便)输入 WSDL地址,其他默认,点ok展开左侧加载的项目下的方法名,双击Request ,右侧出现测试 ...

  5. 康托展开&康托逆展开 的写法

    康托展开 康托展开解决的是当前序列在全排序的名次的问题. 例如有五个数字组成的数列:1,2,3,4,5 那么1,2,3,4,5就是全排列的第0个[注意从0开始计数] 1,2,3,5,4就是第1个 1, ...

  6. vim在行首和 行尾加

    在每行开始加入“<a href=”   vim 命令:          :%s/^/<a href=/g 在每行尾加入 “</a>”    vim命令 :           ...

  7. Codeforces 744C. Hongcow Buys a Deck of Cards(状压DP)

    这题的难点在于状态的设计 首先显然是个状压,需要一维表示卡的状态,另一维如果设计成天数,难以知道当前的钱数,没法确定是否能够购买新的卡,如果设计成钱数,会发现状态数过多,空间与时间都无法承受.但是可以 ...

  8. 【agc003E】Sequential operations on Sequence

    Portal -->agc003E Description 给你一个数串\(S\),一开始的时候\(S=\{1,2,3,...,n\}\),现在要对其进行\(m\)次操作,每次操作给定一个\(a ...

  9. 【hash】【P5079】P5079 Tweetuzki 爱伊图

    Description Input 第一行两个正整数 \(r~,~c\),表示矩阵的行数和列数. 接下来 \(r\) 行,每行输入 \(c\) 个字符,用空格隔开,保证只含有 . 和 # 两种字符.输 ...

  10. HAOI2017游记

    HACF的最终成绩已经出炉,但是事情还没有结束. 好多想说的,不知道从何说起,就按照时间顺序说吧. 考前 考前大概一周半就开始复习了,一些比较重要的算法,比如KDT,单纯性,线性基等等没有再继续学,所 ...