迭代器和生成器
怎么判断他是不是迭代器?
两种方法
1 "__iter__" in dir(object) #判断是不是可迭代的 #注意__iter__要加引号
2.引入模块
li = [1,2,3,4,5]
from collections import Iterable #判断是不是可迭代的
print(isinstance(li,Iterable))
from collections import Iterator #判断是不是迭代器
print(isinstance(li,Iterator))
今日内容大纲
1.生成器表达式,列表推导式(其他推导式)
2.内置函数
一.列表推导式
l = [i for i in range(1,14)]
[变量(加工后的变量) for 变量 in Iterable] 循环模式
l1 = ["python%s期" %i for i in range(1,14)]
优点:1.节省代码,一行搞定.
2.看着高大上
缺点:不好排错
整体:凡使用列表推导式构造的列表对象,用其他方式都可构建,复杂的列表推导式构建不出的.
列表推导式比较有魔性
[变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式
li = [i for i in range(1,14) if i%3==0]
生成器表达式
l1 = ["python%s期"%i for i in range(1,14)]
g_obj = ("python%s期"%i for i in range(1,14)) 循环模式
for i in g_obj:
print(i)
g_obj = ("python%s期"%i for i in range(1,14) if 条件) 筛选模式
生成器:两种方式:1.生成器函数 yield 2. 生成器表达式
为什么有生成器?
生成器本身是自己用Python代码构建的.这样就满足了个性化需求,满足以后工作中需要
字典推导式:
mase = {"a":2,"b":4}
dic = {mase[i]:i for i in mase}
二.内置函数.
一些常用的功能,Python都给封装好了,供我们直接使用.
1.1作用域相关
globals() 永远是全局
locals() 当前位置局部所有变量以及函数名等数据
1.2其他相关
1.2.1 字符串类型代码的执行eval , exec , complie
eval:执行字符串类型的代码,并返回最终结果
print("1+3")
print(eval("1+3"))
print(eval("{'a':1,'b':4}"))
exec:执行字符串类型的代码,返回None
code ="""
for i in range(1,14): #一定要注意要顶格写
print(i)
"""
print(exec(code))
1.2.2输入输出相关
input:函数接受一个标准输入数据返回str类型
print:打印输出
print(1,2,3,sep= "!")#sep是设置每个元素的连接符
print(666,end=" ")#end= "\n"默认换行
1.2.3内存相关
hash:获取一个对象(可哈希对象:int,str,bool,tuple)的哈希值
print(hash("name"))
print(hash(100))
print(hash(True)) 等同于 print(hash(1))
Id 用于获取对象的内存地址
1.2.5帮助
help:函数用于查看函数或模块用途的详细说明
print(help(str))
1.2.6调用相关
callable:函数用于检查一个对象是否可调用的,如果返回True,object仍然可能调用失败,但如果返回False,调用对象object绝对不会成功.
例:def func():
print("你好美")
a = 2
func()
print(callable(func)) #打印的结果是True 所以func是可调用的
print(callable(a)) #打印的结果是False 所以a是不可调用的