接下来,我们就一起来看看python里的内置函数。截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的。那今天我们就一起来认识一下python的内置函数。这么多函数,我们该从何学起呢?

 

 

Built-in Functions

 

 

abs()

dict()

help()

min()

setattr()

all()

dir()

hex()

next()

slice()

any()

divmod()

id()

object()

sorted()

ascii()

enumerate()

input()

oct()

staticmethod()

bin()

eval()

int()

open()

str()

bool()

exec()

isinstance()

ord()

sum()

bytearray()

filter()

issubclass()

pow()

super()

bytes()

float()

iter()

print()

tuple()

callable()

format()

len()

property()

type()

chr()

frozenset()

list()

range()

vars()

classmethod()

getattr()

locals()

repr()

zip()

compile()

globals()

map()

reversed()

__import__()

complex()

hasattr()

max()

round()

 

delattr()

hash()

memoryview()

set()

 

 

上面就是内置函数的表,68个函数都在这儿了。这个表的顺序是按照首字母的排列顺序来的,你会发现都混乱的堆在一起。比如,oct和bin和hex都是做进制换算的,但是却被写在了三个地方。。。这样非常不利于大家归纳和学习。那我把这些函数分成了6大类。你看下面这张图,你猜咱们今天会学哪几大类呀? 

内置函数内置函数——eval、exec、compile_字符串

我猜你们都猜对了。我们今天就要学习用粉红色标注出来的这四大块——56个方法。还有12个方法欠着怎么办呢?我们讲完面向对象这剩下的12个会在两周之内陆续还给你们的,我保证(认真脸)。那这样,我们今天就主要关注我们要学习的这56个方法。

那要学的一共4块,咱们从哪儿开始学起呢?

作用域相关

内置函数内置函数——eval、exec、compile_python_02

基于字典的形式获取局部变量和全局变量

globals()——获取全局变量的字典

locals()——获取执行本方法所在命名空间内的局部变量的字典

print(globals())  返回全局作用域中的所有名字

print(locals())  返回本地作用域的所有名字

globao和local是关键字

其他

内置函数内置函数——eval、exec、compile_字符串_03

字符串类型代码的执行

​javascript:void(0)​

 

输入输出相关:

input() 输入

s = input("请输入内容 : ")  #输入的内容赋值给s变量
print(s) #输入什么打印什么。数据类型是str

print() 输出

print('我们是祖国的花朵',end = ' ')     指定结束符

print('我们是祖国的花朵',end = '| ')   指定多个值输出之间的分隔符

#print源码剖析
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
"""
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件
sep: 打印多个值之间的分隔符,默认为空格
end: 每一次打印的结尾,默认为换行符
flush: 立即把内容输出到流文件,不作缓存
"""
file关键字的说明
f = open('tmp_file','w')
print(123,456,sep=',',file = f,flush=True)
打印进度条
import time
for i in range(0,101,2):
time.sleep(0.1)
char_num = i//2 #打印多少个'*'
per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)
print(per_str,end='', flush=True)
#小越越 : \r 可以把光标移动到行首但不换行

字符串类型代码的执行

eval() 将字符串类型的代码执行并返回结果  不能随便用,不安全,用于有结果的简单计算

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

exec()将自字符串类型的代码执行  没有返回值,简单的流程控制

print(exec("1+2+3+4"))
exec("print('hello,world')")
#指定global参数
code = '''
import os
print(os.path.abspath('.'))
'''
code = '''
print(123)
a = 20
print(a)
'''
a = 10
exec(code,{'print':print},)
print(a)

​内置函数——eval、exec、compile​

compile  将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。

参数说明:   

1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。  

2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。  

3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。

>>> #流程语句使用exec
>>> code1 = 'for i in range(0,10): print (i)'
>>> compile1 = compile(code1,'','exec')
>>> exec (compile1)
1
3
5
7
9


>>> #简单求值表达式用eval
>>> code2 = '1 + 2 + 3 + 4'
>>> compile2 = compile(code2,'','eval')
>>> eval(compile2)


>>> #交互语句用single
>>> code3 = 'name = input("please input your name:")'
>>> compile3 = compile(code3,'','single')
>>> name #执行前name变量不存在
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
name
NameError: name 'name' is not defined
>>> exec(compile3) #执行时显示交互命令,提示输入
please input your name:'pythoner'
>>> name #执行后name变量有值
"'pythoner'"

 数据类型相关:

type(o) 返回变量o的数据类型

 

内存相关:

id(o) o是参数,返回一个变量的内存地址

hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。

#hash实例
t = (1,2,3)
l = [1,2,3]
print(hash(t)) #可hash
print(hash(l)) #会报错

'''
结果:
TypeError: unhashable type: 'list'
'''

hash函数会根据一个内部的算法对当前可hash变量进行处理,返回一个int数字,随机的。

*每一次执行程序,内容相同的变量hash值在这一次执行过程中不会发生改变。

 

文件操作相关

open()  打开一个文件,返回一个文件操作符(文件句柄)

f = open()

操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)

可以用encoding指定编码.

f = open('1.复习.py')

print(f.writable())  判断能不能写

print(f.readable())  判断能不能读

模块操作相关

__import__导入一个模块

#导入模块
import

 

#内部实际流程   知道即可,不需要用
#import time

time = __import_('time')
print(time.time())
#__import__
os = __import__('os')
print(os.path.abspath('.'))

帮助方法

help()   查看名字及其用法

print(help(int))

在控制台执行help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出

或者直接执行help(o),o是参数,查看和变量o有关的操作。。。

#如果某个方法属于某个数据剋星的变量,就用点来调用:list.append()

#如果某个方法不依赖任何数据类型,就直接用——内置函数和自定义函数采用: import time

 

查看参数所属类型的所有内置方法

dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量

print(dir(list))  #查看列表的内置方法
print(dir(int)) #查看整数的内置方法

和调用相关

callable(o),o是参数,看这个变量是不是可调用。

如果o是一个函数名,就会返回True

def func():pass
print(callable(func)) #参数是函数名,可调用,返回True
print(callable(123)) #参数是数字,不可调用,返回False

和数字相关

内置函数内置函数——eval、exec、compile_内置函数_04

 

数字——数据类型相关:bool,int,float,complex

数字——进制转换相关:bin,oct,hex

数字——数学运算:abs,divmod,min,max,sum,round,pow

bin   转二进制       用  0b  表示

oct   转八进制       用  0c  表示

hex  转十六进制   用  0x  表示

abs  求绝对值

divmod  #div除法   #mod 求余  #所以divmod就是除余   

形如:
print(divmod(7,2))

结果 (3, 1)

 round  取精确值  ,注意四舍五入

print(round(1.8407524805,4))

结果 1.8408

pow  幂运算

print(pow(2,3))     8  2的三次方
print(pow(3,2)) 9 3的二次方
print(pow(2,3,3)) 2 8处以3余2
print(pow(3,2,1)) 0 9处以1余0

sum  求和  注意必须是可迭代的,并且是数字

print(sum([1,2,3,4]))       10
print(sum([1,2,3,4],10)) 20 #如果有10,表示从10开始加,再加1+2+3+4.如果没有10,则默认从0开始加

 

 

和数据结构相关

内置函数内置函数——eval、exec、compile_内置函数_05

python中的数据类型 int  bool  等

                  数据结构  dict  list  tuple  set  str

序列——列表和元组相关的:list和tuple

序列——字符串相关的:str,​​format​​,bytes,bytearry,memoryview,ord,chr,ascii,repr