python 基础篇 14 程程器表达式 内置函数
Posted 年轻a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 基础篇 14 程程器表达式 内置函数相关的知识,希望对你有一定的参考价值。
昨日内容回顾
可迭代对象:
内部含有__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 = func()
g_obj.send(666)
g_obj.__next__()
--------------->>>>>>>>>>>>>本节重点 生成器表达式 列表推导式<<<<<<<<<<<<<<<<<-------------------
构建一个列表:[\'python1期\', \'python2期\', \'python3期\', \'python4期\', \'python6期\', \'python7期\', \'python8期\', \'python9期\', \'python10期\']
l1 = []
for i in range(1,14):
l1.append(\'python%d期\' % i)
print(l1)
列表推导式:
# l3 = [ \'python%s期\' % i for i in range(1, 14)]
# print(l3)
[变量(加工后的变量) for 变量 in iterable] 循环模式
# 优点:
# 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 条件] 筛选模式
# 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])
生成器表达式
1.把列表解析的[]换成()得到的就是生成器表达式
2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存
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代码构建的,这样就满足了个性化需求,满足以后你工作中需要.
#把列表names中有两个"e"的字符取到 # 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中的K,V键值互换位置 # mcase = {\'a\': 10, \'b\': 34} # print({mcase[i]: i for i in mcase})
------>>>>>>>内置函数:
这个东西慢慢学吧,可以按住Ctrl看源码,也可以help一下,用着就都会了
1.1作用域相关
locals :函数会以字典的类型返回当前位置的全部局部变量。
globals:函数以字典的类型返回全部全局变量。
a = 1 b = 2 print(locals()) print(globals()) # 这两个一样,因为是在全局执行的。 ########################## def func(argv): c = 2 print(locals()) print(globals()) func(3) #这两个不一样,locals() {\'argv\': 3, \'c\': 2} #globals() {\'__doc__\': None, \'__builtins__\': <module \'builtins\' (built-in)>, \'__cached__\': None, \'__loader__\': <_frozen_importlib_external.SourceFileLoader object at 0x0000024409148978>, \'__spec__\': None, \'__file__\': \'D:/lnh.python/.../内置函数.py\', \'func\': <function func at 0x0000024408CF90D0>, \'__name__\': \'__main__\', \'__package__\': None}
1.2.1 字符串类型代码的执行 eval,exec,complie
eval(\'2 + 2\') # 4
n=81
eval("n + 4") # 85
eval(\'print(666)\') # 666
exec:执行字符串类型的代码。
s = \'\'\'
for i in [1,2,3]:
print(i)
\'\'\'
exec(s)
complie没用,可以不记
其他函数在这我就不一一列举了,如有需求可找度娘
以上是关于python 基础篇 14 程程器表达式 内置函数的主要内容,如果未能解决你的问题,请参考以下文章
Python基础篇第2篇: Python内置函数--map/reduce/filter/sorted