Day15 of learning python--内置函数

1.内置函数的概念和种类

  内置函数:python一共为我们提供了68个内置函数,它们就是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()  

下面对其归类,此处主要学表有红色部分,一个56个方法:

 作用域相关

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

golbals()--获取全局变量的字典

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

而不是golbal,local,nonlocal声明变量的作用域。

其他

(1)字符串类型代码的执行

eval()将字符串类型的代码执行并返回结果

print(eval('1+2+3+4'))   # 有返回值

 

 exec()执行字符串类型的代码,没有返回值

print(exec('1+2+3+4'))   # 没有返回值
exec('print(123)')
code = '''for i in range(10):
       print(i*'*')      
  '''
exec(code)

 

exec和eval都可以执行字符串类型的代码,eval有返回值-有结果的简单计算,exec没有-简单流程控制,eval只能用在你明确知道你要执行的代码是什么

 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)

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

# 交互语句用single
code3 = 'name = input("please input your name:")'
compile3 = compile(code3,'','single')
# name 执行前name变量不存在
exec(compile3)    #执行前显示交互命令,提示输入
print(name)

 

 (2)输入输出相关

input()输入

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

 

 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: 立即把内容输出到流文件,不作缓存
    """

print源码剖析
f = open('F:\hello','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 可以把光标移动到行首但不换行

 

 (3)数据类型相关

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

(4)内存相关

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

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

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

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

hash实例

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

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

(5)文件操作相关

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

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

可以用encoding指定编码.

 (6)帮助方法

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

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

(7)调用相关

callable(i),i是参数,判断i是否可调用,即判断是不是函数

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

 

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

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

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

 和数字相关

 

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

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

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

pirnt(bin(10))   #把十进制转换成二进制
print(abs(-5))    # abs求绝对值
print(divmod(7,2))  # div除法,mod取余
print(round(3.1415,2))  #保存几位小数
print(pow(2,3,1))  #幂运算,第三位是取余
print(sum([1,2,3,4,5,6],10))  #第一个参数必须是可迭代的,第二个是从什么开始
print(min([1,2,3,4]))
print(min(1,2,3,4,-5,key=abs))    #key的意思是以绝对值再比

 和数据结构相关

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

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

ret = bytearray('alex',encoding='utf-8')    #二进制集合
print(id(ret))
print(ret[0])
ret[0] = 65
print(ret)
print(id(ret))
结果为:

2130835965520
97
bytearray(b'Alex')
2130835965520

 

ret = memoryview(bytes('你好',encoding='utf-8'))
print(len(ret))
print(bytes(ret[:3]).decode('utf-8'))
print(bytes(ret[3:]).decode('utf-8'))
结果:
6
你
好

序列:reversed,slice

#翻转
l = (1,2,23,213,5612,342,43)
print(l)
print(list(reversed(l)))

 

#切割
l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,all,any,zip,filter,map

2.面试题讲解

l = range(100)    #有range的都是迭代器,如果要显示就要list强制类型转换
print(l[98])
print(l[-2])
print(list(l[-10:]))

 

def extendlist(val,list=[]):    #对于可变的指定参数
    list.append(val)
    return list

list1 = extendlist(10)        # 此处 list1 -> list   [10]
list2 = extendlist(123,[])
list3 = extendlist('a')      # 此处 list1 -> list     [10,'a']
print('list1 = %s'%list1)     #list1 -> list
print('list2 = %s'%list2)
print('list3 = %s'%list3)    #list -> list

 

3.本章小结

重点掌握:

其他:input,print,type,hash,open,import,dir

str类型代码执行:eval,exec

数字:bool,int,float,abs,divmod,min,max,sum,round,pow

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

序列——字符串相关的:str,bytes,repr

序列:reversed,slice

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,zip,filter,map

posted on 2018-10-12 15:00  smile大豆芽  阅读(147)  评论(0)    收藏  举报