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

Python学习之旅 —— 基础篇内置函数装饰器

Python基础

0 博客目录

Python基础第十一天——内置函数的补充内置函数与lambda递归

Python小白到老司机,快跟我上车!基础篇(十四)