迭代器和生成器

怎么判断他是不是迭代器?

两种方法

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= " "默认换行

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是不可调用的

原文地址:https://www.cnblogs.com/fengkun125/p/9204868.html