内置函数
python作为一门好用的语言,其内置了许多函数可直接供程序员们调用,以进一步减轻代码负担。python中的内置函数也是在不断发展的,截止到3.6.2版本,python共有内置函数68个。本文将其共分为四类:
- 作用域
- 其他相关
- 迭代器
- 基础数据类型
见以下详细介绍:
作用域
- globals:函数以字典的类型返回全部全局变量。
- locals:函数会以字典的类型返回当前位置的全部局部变量。
二者均不需传参
# a = 'hiDaLao'
# b = 2
# print(globals())
# print(locals())
# 此时二者一致,因为均在全局空间
{'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': <module 'builtins' (built-in)>, '__builtins__': <module 'builtins' (built-in)>, '_ih': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())"], '_oh': {}, '_dh': ['D:\\骑士python\\day13'], 'In': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())"], 'Out': {}, 'get_ipython': <bound method InteractiveShell.get_ipython of <ipykernel.zmqshell.ZMQInteractiveShell object at 0x0000019402C45208>>, 'exit': <IPython.core.autocall.ZMQExitAutocall object at 0x0000019403710898>, 'quit': <IPython.core.autocall.ZMQExitAutocall object at 0x0000019403710898>, '_': '', '__': '', '___': '', '_i': '', '_ii': '', '_iii': '', '_i1': "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", 'a': 'hiDaLao', 'b': 2}
{'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': <module 'builtins' (built-in)>, '__builtins__': <module 'builtins' (built-in)>, '_ih': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())"], '_oh': {}, '_dh': ['D:\\骑士python\\day13'], 'In': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())"], 'Out': {}, 'get_ipython': <bound method InteractiveShell.get_ipython of <ipykernel.zmqshell.ZMQInteractiveShell object at 0x0000019402C45208>>, 'exit': <IPython.core.autocall.ZMQExitAutocall object at 0x0000019403710898>, 'quit': <IPython.core.autocall.ZMQExitAutocall object at 0x0000019403710898>, '_': '', '__': '', '___': '', '_i': '', '_ii': '', '_iii': '', '_i1': "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", 'a': 'hiDaLao', 'b': 2}
# def func():
# a = 'hiDaLao'
# print(globals())
# print(locals())
# b = 1
# func()
# 此时二者不同,globals输出了当前所有全局变量(包含内置命名空间),而locals输出的则是其所在的fanc()函数中的全部局部变量{'a': 'hiDaLao'}
{'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': <module 'builtins' (built-in)>, '__builtins__': <module 'builtins' (built-in)>, '_ih': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", "def func():\n a = 'hiDaLao'\n print(globals())\n print(locals())\nb = 1\nfunc()"], '_oh': {}, '_dh': ['D:\\骑士python\\day13'], 'In': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", "def func():\n a = 'hiDaLao'\n print(globals())\n print(locals())\nb = 1\nfunc()"], 'Out': {}, 'get_ipython': <bound method InteractiveShell.get_ipython of <ipykernel.zmqshell.ZMQInteractiveShell object at 0x0000019402C45208>>, 'exit': <IPython.core.autocall.ZMQExitAutocall object at 0x0000019403710898>, 'quit': <IPython.core.autocall.ZMQExitAutocall object at 0x0000019403710898>, '_': '', '__': '', '___': '', '_i': "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", '_ii': '', '_iii': '', '_i1': "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", 'a': 'hiDaLao', 'b': 1, '_i2': "def func():\n a = 'hiDaLao'\n print(globals())\n print(locals())\nb = 1\nfunc()", 'func': <function func at 0x0000019403820048>}
{'a': 'hiDaLao'}
其他相关
字符串类型代码的执行
- eval:执行字符串类型的代码,并返回最终结果
- exec:执行字符串类型的代码
- compile:将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值
eval函数单看定义其实挺难理解,但如果同时借助代码来看就会非常清晰了。首先要知道的是eval函数主要作用于字符串类型,当字符串的内容为python中的可执行代码时,我们可以借助eval函数来执行改字符串类型的代码。该函数在文件处理方面大有可为。相见下面代码:
# eval
def func(x):
return x
print('func("hiDaLao is the best")')
print(eval('func("hiDaLao is the best")'))
b = '1 + 1'
print(b)
print(eval(b))
c = '[i for i in range(1,10)]'
print(c)
print(eval(c))
func("hiDaLao is the best")
hiDaLao is the best
1 + 1
2
[i for i in range(1,10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
exec函数与eval函数的定义和用法均较为相似,但最大的不同点是exec函数只执行字符串类型的代码,不返回;而eval函数不仅执行,还会将结果返回给调用者。详细见代码:
# exec
def func1(x):
return x
print('print("hiDaLao is the best")') #最外层的print语句里面的所有内容均为字符串
print("---------------")
print(eval('func1("hiDaLao is the best")')) #遇到
print("---------------")
print(exec('func1("hiDaLao is the best")'))
print("---------------")
print(eval('print("hiDaLao is the best")'))
print("---------------")
print(exec('print("hiDaLao is the best")'))
print("---------------")
exec('print("hiDaLao is the best")')
print("---------------")
eval('print("hiDaLao is the best")')
print("hiDaLao is the best")
---------------
hiDaLao is the best
---------------
None
---------------
hiDaLao is the best
None
---------------
hiDaLao is the best
None
---------------
hiDaLao is the best
---------------
hiDaLao is the best
print(exec('1 + 2'))
None
print(eval('1 + 2'))
3
compile函数是将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值.compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1).下面详细介绍compile中的详细参数:
-
参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。
-
参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。
-
参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。
输入输出相关
- input:函数接受一个标准输入数据,返回为 string 类型。
- print:打印输出
input函数之前接触的较多,不多加赘述。唯一需要注意的是input其返回的值均为字符串类型。
a = input('<<<')
print(a,type(a))
<<<(1,2,3)
(1,2,3) <class 'str'>
print函数,print函数应该是python里面使用最多的内置函数。其源码为:def print(value,*args, sep=' ', end='\n', file=sys.stdout, flush=False),以下对其做详细介绍:
- file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件
- sep: 打印多个值之间的分隔符,默认为空格
- end: 每一次打印的结尾,默认为换行符
- flush: 立即把内容输出到流文件,不作缓存
with open('print函数','w+',encoding = 'utf-8')as f:
print(1,2,3,4,file= f)
print('------------')
print(1,2,3,4,sep = '|')
print('------------')
print(1,2,3,4,end = '_')
print(1,2,3,4)
print('------------')
------------
1|2|3|4
------------
1 2 3 4_1 2 3 4
------------
内存相关
- hash:获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。
- id:用于获取对象的内存地址
hash函数主要用来获取可哈希对象的哈希地址,此知识应与字典练习起来,字典的key必须为可哈希对象,这也是字典查找速度快的原因。非数字和布尔型变量的hash值为一串等长数字,其均唯一。数字的哈希地址为其本身,不可哈希的数据类型使用该函数会报错。True的哈希地址为1,False的哈希地址为0.
print(hash('haDaLao'))
print(hash('你好python'))
print(hash((1,2,3,4)))
print(hash(True))
print(hash(False))
print(hash(1))
print(hash(134657445474))
-3002480309828225705
-6276695183465522733
485696759010151909
1
0
1
134657445474
id函数主要用来获取对象的内存地址。
print(id(123))
print(id(2))
1934389280
1934385408
文件操作相关
- open:函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写
- __import__:import:函数用于动态加载类和函数
- help:函数用于查看函数或模块用途的详细说明。
调用相关
- callable:函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
# callable
def func3():
pass
print(callable(123))
print(callable(func3))
False
True
查看内置属性
- dir:函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
#dir
print(dir())
print('--------------')
print(dir([]))
['In', 'Out', '_', '__', '___', '__builtin__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '_dh', '_i', '_i1', '_i10', '_i11', '_i12', '_i2', '_i3', '_i4', '_i5', '_i6', '_i7', '_i8', '_i9', '_ih', '_ii', '_iii', '_oh', 'a', 'exit', 'f', 'func3', 'get_ipython', 'quit']
--------------
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
迭代器生成器相关
- range:函数可创建一个整数对象,一般用在 for 循环中。
- iter:内部实际使用了next方法,返回迭代器的下一个项目。
- next:函数用来生成迭代器(讲一个可迭代对象,生成迭代器
# range
print([i for i in range(9)])
[0, 1, 2, 3, 4, 5, 6, 7, 8]
# iter next
i = iter([1,2,3,4,5]) #获得Iterale
while 1:
try:
print(next(i))
except StopIteration: # 遇到StopIteration就退出循环
break
1
2
3
4
5
基础数据类型相关
数字相关
数据类型
- bool:用于将给定参数转换为布尔类型,如果没有参数,返回 False。
- int:函数用于将一个字符串或数字转换为整型。
- float:函数用于将整数和字符串转换成浮点数
- complex:函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数
# bool
print(bool(1 < 2 and 3 > 4 or 5 < 6 and 9 > 2 or 3 > 1))
True
int函数,当里面是数字类型时,只取整数部分。当把字符串型数字转化为int型时,只接收整数。
# int 只取整数部分,与round不同
print(int(2.3))
print(int(2.99))
print(int(3/2))
print(int('3.1'))
2
2
1
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-19-46b16cda65dd> in <module>()
3 print(int(2.99))
4 print(int(3/2))
----> 5 print(int('3.1'))
ValueError: invalid literal for int() with base 10: '3.1'
float类型与int型类似,complex型日常使用较少,此处不多加介绍。
进制转换
-
bin:将十进制转换成二进制并返回。
-
oct:将十进制转化成八进制字符串并返回。
-
hex:将十进制转化成十六进制字符串并返回
print(bin(11))
print(oct(7))
print(oct(9))
print(hex(9))
print(hex(10))
print(hex(11))
print(hex(12))
print(hex(15))
print(hex(16))
print(hex(17))
0b1011
0o7
0o11
0x9
0xa
0xb
0xc
0xf
0x10
0x11
数学运算
-
abs:函数返回数字的绝对值。
-
divmod:计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。
-
round:保留浮点数的小数位数,默认保留整数。
-
pow:求x**y次幂。(三个参数为x**y的结果对z取余)
-
sum:对可迭代对象进行求和计算(可设置初始值)。
-
min:返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值)。
-
max:返回可迭代对象的最大值(可加key,key为函数名,通过函数的规则,返回最大值)。
#abs
print(abs(1))
print(abs(-1))
print('---------')
1
1
---------
#divmod
print(divmod(4,2))
print(divmod(18,7))
(2, 0)
(2, 4)
#round
print(round(3.14159))
print(round(3.14159,3)) #保留三位小数
3
3.142
# pow
print(pow(2,5))
32
# sum
print(sum([1,2,3,4]))
print(sum([1,2,3,4],100)) #设置初始值为1000
10
110
max和min函数有共通之处,其第二个参数可接自定义参数,所以这两个函数的可定制型极强。
# max 与 min
print(min([1,-2,3,4,100,101]))
print(min([1,-2,3,4,100,101]))
print(min([1,-2,3,4,100,101],key=abs))
-2
-2
1
#需求
# [('alex',1000),('太白',18),('wusir',500)]
# 求出年龄最小的那个元组
l = [('alex',1000),('太白',18),('wusir',500)]
def func5(x):
return x[-1]
print(min(l,key = func5))
('太白', 18)
网友评论