python--内置函数
对迭代器与生成器的区别
迭代器和生成器
迭代器
可迭代协议-含有iter方法的都是可迭代的
迭代器协议-含有next和iter的都是迭代器
特点:节省内存空间
方便逐个取值,一个迭代器只能取一次
生成器
生成器函数
含有yield关键字的函数都是生成器函数
生成器函数的特点:
调用之后函数内的代码不执行,返回生成器
每次从生成器中取一个值就会扫一段代码,遇见yield停止
如何从生成器中取值:
for:如果没有break会一直取完
next:每次只取一个
send:不能用第一个,取下一个值的时候给上个位置传一个新值
生成器表达式:
条件成立想放在生成器中的值 for in 可迭代的if条件
内置函数:
作用域相关:
1.globals() 获取全局变量的字典
2.locals() 获取执行本方法所在命名空间内的局部变量的字典
3.global 使用场景和作用域不一样
迭代器:
1.__next__()与next()
迭代器的实现方法:
def next(迭代器):实现方法(简易)
迭代器.__next__()
迭代器 = iter(可迭代的)
2.range()是可迭代的但不是一个迭代器,range()迭代后没有生成对象
例:'__next__' in iter(range(10))
如果想要打印range(),需加list(range())或其它打印迭代器的对象
调用相关:
1.dir() 查看对像的属性和方法
2.callable() 查看对象是否可调用,返回值True和False
例:callable(print)
def func_1():pass
callable(func_1)
其它:
help() 查看方法名的用法
help与dir
help仔细查找,帮助
dir简略查找
例:help(dir) 退出按'q'
模块相关:
1.import
2.time = __import__('time') 不常用
文件相关:
open()
例:
print(f.writable()) 能不能写
print(f.readable()) 能不能读
内存相关:
1.id()
2.hash()
注意:
1.对一次程序执行中,保证可哈希的值不会变
2.把可哈希的数据类型转换为一串数字
3.字典的寻址方式
输入输出相关:
1.input()
2.print()
例:print有很多种参数,有很多方式接收传进来的值
a. print(1,2,3,4,5,sep='|')
b. print(1,2,3,end='')
将输入内容输出到文件
c. f = open('file','w')
print('aaaa',file=True)
f.close()
d. 老师写的进度条显示,其中用到知识点关键点为格式化输出,flush=True
'''
import time
for i in range(0,101,2):
time.sleep(0.01)
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)
'''
另外方面:progress Bar(为专业打印进度条)
字符串代码执行:
1.compile(source, filename, mode[, flags[, dont_inherit]])
'''
source -- 字符串或者AST(Abstract Syntax Trees)对象。。
filename -- 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
mode -- 指定编译代码的种类。可以指定为 exec, eval, single。
flags -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。。
flags和dont_inherit是用来控制编译源码时的标志
'''
字符串类型的代码编译。代码对象能够通过exec语句或eval进行求值
2.eval(expression[, globals[, locals]])
'''
expression -- 表达式。
globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
'''
eval有返回值,eval一般时候不用,
只能用在你明确知道你要执行的代码是什么 流程,执行,交互
3.exec obj
'''
obj -- 要执行的表达式
'''
exec 返回值永远为 None。执行储存在字符串或文件中的Python语句,exec没有返回值
例:
1. name = input('>>>') 上面第二条相关
eval(name) name可嵌套代码,危险
2. code1 = 'for i in range(10):print(i)' #流程
com = comple(code1,'','exec')
code2 = '1+2+3' #执行
com = compile(code2,'','eval')
code3 = 'name = input('>>')' #交互
com = compile(code3,'','sigle')
exec(com) #pyCharm会报错,但执行后无错
print(name)

浙公网安备 33010602011771号