python day14

一.昨日内容回顾

可迭代对象:

  内部含有__iter__方法的就是可迭代对象.

  可迭代对象不能取值,因为内部不含有__next__方法

可迭代对象--->迭代器.

  obj.__iter__()

  iter(obj)

迭代器:

  内部含有__iter__,__next__方法的对象.

迭代器的优点:

  1.节省内存.

  2.惰性机制.

  3.单项,不可逆.

如何判断可迭代对象,迭代器.

  1,__iter__in dir(obj)

  2.?

生成器:

  自己用python代码写的迭代器就是生成器.

  生成器的本身就是迭代器.

def func():

  print(1111)

  count=yield 222

  print(count)

  yield 333

g_obj=dunc()

g_obj.__next__()

g_obj.send(666)

生成器表达式和列表推导式:

'''
#可迭代对象: str,list,dict,tuple,set,range
# 文件句柄:是迭代器.
# with open('01 今日内容大纲', encoding='utf-8') as f1:
# f1.read()
# print('__iter__' in dir(f1))
# print('__next__' in dir(f1))
# l1 = [1, 2, 3]
# from collections import Iterable
# from collections import Iterator
# print(isinstance(l1,Iterable))
# print(isinstance(l1,Iterator))
# print(isinstance(l1,list))
'''

# l1 = []
# for i in range(1,14):
# l1.append(i)
# print(l1)
# l1 = []
# for i in range(1,14):
# l1.append('python%d期' % i)
# print(l1)
# 列表推导式
# l2 = [i for i in range(1, 14)]
# [变量(加工后的变量) for 变量 in iterable] 循环模式
# print(l2)
# l3 = [ 'python%s期' % i for i in range(1, 14)]
# print(l3)
# 优点:
# 1,节省代码,一行搞定.
# 2,看着高大上.
# 缺点:
# ,不好排错.
#整体:
# 凡是用列表推导式构造的列表对象,用其他方式都可构建.,非常复杂的列表,列表推导式是构建不出的,
# 列表推导式比较有魔性.
# 构建一个列表:
# ['技师0号','技师1号'... '技师15号']
# print(['技师%s号' % i for i in range(16)])
# ['护士1号', '护士3号','护士5号', ...,'护士13号']
# print(['护士%s号' % i for i in range(1, 14, 2)])

# 分类:
# [变量(加工后的变量) for 变量 in iterable] 循环模式
# [变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式
# l1 = [i for i in range(1, 31) if i % 3 == 0]
# print(l1)
# 10以内所有数的平方
# print([i*i for i in range(11)])
# 30以内所有能被3整除的数的平方
# print([i**2 for i in range(31) if i % 3 == 0])
# 100 以内所有的奇数.
# print([i for i in range(1,101,2)])
# print([i for i in range(101) if i % 2 == 1])
# 生成器表达式
# l1 = ['python%s期' % i for i in range(1,14)]
# print(l1)
# g_obj = ('python%s期' % i for i in range(1,14)) # 循环模式
# g_obj1 = ('python%s期' % i for i in range(1,14) if i % 2 == 0) # 循环模式
# print(g_obj)
# print(g_obj.__next__())
# print(g_obj.__next__())
# print(g_obj.__next__())
# print(g_obj.__next__())
# for i in g_obj1:
# print(i)
# 生成器:两种方式:
# 生成器函数. yield
# 生成器表达式
# 为什么有生成器:
# 生成器本身是自己用python代码构建的,这样就满足了个性化需求,满足以后你工作中需要.
# def func():
# print(111)
# yield 222
# def func2():
# print(333)
# yield 333

# names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
# ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
# l2 = [name for i in names for name in i if name.count('e') == 2]
# l1 = []
# for i in names:
# for name in i:
# if name.count('e') == 2:
# l1.append(name)
# print(l1)
# print(l2)

# mcase = {'a': 10, 'b': 34}
# print({mcase[i]: i for i in mcase})
内置函数:
'''
print()
input()
range()
len()
max()
min()
open()
type()
int()
str()
list()
dict()
set()
dir()
tuple()
bool()
id()
iter()
next()
isinstance()

'''
'''
内置函数: 一些常用的功能,python都给你封装好了,供你直接使用.

'''
a = 333
b = 222
#1.1作用域相关
#*** globals() locals()
# locals() 当前位置的所有变量以及函数名等数据.
# globals() 永远是全局的.
# def func1():
# a1 = 2
# b1 = 3
# # print(globals())
# def func2():
# c = 666
# print('*****',locals())
# func2()
# print(locals())
# func1()
# print(locals())
# print(globals())
# 1.2其他相关
# 1.2.1 字符串类型代码的执行 eval,exec,complie
#
# *** eval:执行字符串类型的代码,并返回最终结果。
# print('1 + 3')
# print(eval('1+3'))
# print(eval('3 * 3'))
# dic = eval("{'name': 'alex'}")
# print(dic,type(dic))
# *** exec:执行字符串类型的代码。

code = '''
for i in range(1, 11):
print(i)
'''
# exec(code)
# compile:将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。
# 1.2.2 输入输出相关 input,print
#
#   *** input:函数接受一个标准输入数据,返回为 string 类型。
#
#   *** print:打印输出。
# print(1,2,3,sep='|') # 设置每个元素的连接符 sep='|'
# print(666,end='') # end='\n' 默认换行
# print(555)
# f1 = open('log', encoding='utf-8', mode='w')
# print('随便写的内容',file=f1)
# f1.close()
# 1.2.3内存相关 hash id
#
# ** hash:获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。
# print(hash('name'))
# print(hash(7117817419752622577))
# print(hash('name1'))
# print(hash('name2'))
# print(hash('name3'))
# print(hash(100))
# print(hash(1))
# print(hash(True))
# ** id:用于获取对象的内存地址。
# l1 = [i for i in range(100) if i % 2 == 1]
# print(l1)
# count = 0
# for i in l1:
# if i == 51:
# print(count)
# count += 1
# 1.2.3文件操作相关
#
#   open:函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。
#
# 1.2.4模块相关__import__ 
#
# __import__:函数用于动态加载类和函数 。

# 1.2.5帮助
#
#   help:函数用于查看函数或模块用途的详细说明。
# print(help(str))
# View Code
# 1.2.6调用相关
# ** callable:函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
def func1():
print(111)
a = 666
print(callable(a))
print(callable(func1))

猜你喜欢

转载自www.cnblogs.com/zm419914/p/9203843.html