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)   

  

  

posted @ 2018-01-07 12:33  wsg-python  阅读(176)  评论(0编辑  收藏  举报