1.迭代

通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)

# 遍历字符串
for x in 'hello':print(x)# 遍历列表
lt = [1, 2, 3]
for i in lt:# 手动获取下标print(i, lt.index(i))# 遍历列表,可以直接使用下标
for index, value in enumerate(lt):print(index, value)# 遍历字典
d = {'a': 'apple', 'b': 'banana', 'c': 'cat', 'd': 'dog'}
for k in d:# 默认遍历的是键,值需要单独获取print(k, d[k])for k,v in info.items():print('%s is %s'%(k,v))# for k, v in d.items():
# 上下两个式子等价
for k, v in dict.items(d):print(k, v) 

2.列表生成式

例1:生成[1x1, 2x2, 3x3, ..., 10x10]# 方法一:循环
L = []
for x in range(1, 11):L.append(x * x)# 方法二:列表生成式
[x * x for x in range(1, 11)]>>>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]例2for + if 判断
[x * x for x in range(1, 11) if x % 2 == 0]>>>[4, 16, 36, 64, 100]例3
使用两层循环,可以生成全排列:
[m + n for m in 'ABC' for n in 'XYZ']>>>['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']例4
for循环对dict的items()可以同时迭代key和value:
d = {'x': 'A', 'y': 'B', 'z': 'C' }
for k, v in d.items():print(k, '=', v)>>> y = Bx = Az = C列表生成式,使用两个变量来生成list:
d = {'x': 'A', 'y': 'B', 'z': 'C' }
[k + '=' + v for k, v in d.items()]>>> ['y=B', 'x=A', 'z=C']把一个list中所有的字符串变成小写:
L = ['Hello', 'World', 'IBM', 'Apple']
[s.lower() for s in L]>>> ['hello', 'world', 'ibm', 'apple']

3.生成器

Python中,一边循环一边计算的机制,称为生成器:generator

generator创建:

# 方法一:将一个列表生成式的[]改成()
L = [x * x for x in range(10)]    # 列表生成式
g = (x * x for x in range(10))    # 生成器

generator的下一个返回值,通过next()函数获得
generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误为避免StopIteration的错误
g = (x * x for x in range(10))
for n in g:print(n)# 方法二
def fib(max):n, a, b = 0, 0, 1while n < max:print(b)a, b = b, a + b    # 赋值语句n = n + 1return 'done'斐波拉契数列的推算规则,逻辑类似generator
要把fib函数变成generator,只需要把print(b)改为yield b
def fib(max):n, a, b = 0, 0, 1while n < max:yield ba, b = b, a + bn = n + 1return 'done'

generator和函数的执行流程不一样。

函数是顺序执行,遇到return语句或者最后一行函数语句就返回。

generator,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。 循环过程中不断调用yield,就会不断中断,

因此需要要给循环设置一个条件来退出循环,否则会产生一个无限数列。

for循环调用generator时,发现拿不到generator的return语句的返回值。 如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中。

g = fib(6)
while True:try:x = next(g)print('g:', x)except StopIteration as e:print('Generator return value:', e.value)break>>> g: 1g: 1g: 2g: 3g: 5g: 8Generator return value: done  

4.迭代器

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

Python的for循环本质上就是通过不断调用next()函数实现:
for x in [1, 2, 3, 4, 5]:pass实际上完全等价于:# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:try:# 获得下一个值:x = next(it)except StopIteration:# 遇到StopIteration就退出循环break

5.装饰器

# -*- coding:gbk -*-
'''示例1: 使用语法糖@来装饰函数,相当于“myfunc = deco(myfunc)”
但发现新函数只在第一次被调用,且原函数多调用了一次'''def deco(func):print("before myfunc() called.")func()print("  after myfunc() called.")return func@deco            #@deco和myfunc = deco(myfunc)其实是完全等价的
def myfunc():print(" myfunc() called.")myfunc()
myfunc()# 装饰器被调用
# -*- coding:gbk -*-
'''示例2: 使用内嵌包装函数来确保每次新函数都被调用,
内嵌包装函数的形参和返回值与原函数相同,装饰函数返回内嵌包装函数对象'''def deco(func):def _deco():print("before myfunc() called.")func()print("  after myfunc() called.")# 不需要返回func,实际上应返回原函数的返回值return _deco@deco
def myfunc():print(" myfunc() called.")return 'ok'myfunc()
myfunc()# 对带参数的函数进行装饰
# -*- coding:gbk -*-
'''示例5: 对带参数的函数进行装饰,
内嵌包装函数的形参和返回值与原函数相同,装饰函数返回内嵌包装函数对象'''def deco(func):def _deco(a, b):print("before myfunc() called.")ret = func(a, b)print("  after myfunc() called. result: %s" % ret)return retreturn _deco@deco
def myfunc(a, b):print(" myfunc(%s,%s) called." % (a, b))return a + bmyfunc(1, 2)
myfunc(3, 4)# 让装饰器带参数
# -*- coding:gbk -*-
'''示例7: 在示例4的基础上,让装饰器带参数,
和上一示例相比在外层多了一层包装。
装饰函数名实际上应更有意义些'''def deco(arg):def _deco(func):def __deco():print("before %s called [%s]." % (func.__name__, arg))func()print("  after %s called [%s]." % (func.__name__, arg))return __decoreturn _deco@deco("mymodule")
def myfunc():print(" myfunc() called.")@deco("module2")
def myfunc2():print(" myfunc2() called.")myfunc()
myfunc2()

转载于:https://www.cnblogs.com/Iceredtea/p/9691744.html

数据之路 Day5 - Python基础5相关推荐

  1. 数据之路 Day6 - Python基础6

    一.模块路径及导入 模块路径 ===================================================================================== ...

  2. 大数据的python基础_大数据量化之路之python基础

    一.计算机运行基本原理及python基础 在了解计算机运行基本原理之上,理解python程序运行基本原理.做好数据分析准备工作. 安装好Anaconda做好相应变量配置,下载cmd工具Conemu,利 ...

  3. 我的Python成长之路---第六天---Python基础(20)---2016年2月20日(晴)

    一.面向对象基础 面向对象名词解释: 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公 ...

  4. 老男孩-Python之路,Day1 - Python基础1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  5. 我的Python成长之路---第六天---Python基础(18)---2016年2月20日(晴)

    os模块 提供对操作系统进行调用的接口 >>> import os >>> os.getcwd() # 获取当前工作目录,类似linux的pwd命令 '/data/ ...

  6. 我的Python成长之路---第六天---Python基础(19)---2016年2月20日(晴)

    shelve模块 shelve模块是pickle模块的扩展,可以通过key,value的方式访问pickle持久化保存的数据 持久化保存: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  7. python之路-02 Python基础

    变量声明及赋值 声明变量:name = "Alex Li" 上述代码声明了一个变量,变量名为: name,变量name的值为:"lanhan" #!Author ...

  8. python之路金角大王_Python 之路03 - Python基础3

    本节内容 函数与函数式编程 函数式编程之参数详解 局部变量与全局变量作用域 嵌套函数 递归 函数式编程介绍 高阶函数 内置函数 1. 函数与函数式编程 1.面向对象:华山派--->类---> ...

  9. 老男孩-Python之路,Day2 - Python基础2

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

最新文章

  1. 2020年,最适合AI的5种编程语言
  2. 曾经成功的敏捷团队为什么失败?
  3. Python学习系列day5-python基础
  4. Github Star 11.5K项目再发版:AAAI 2021 顶会论文开源,80+多语言模型全新升级
  5. 信息学奥赛一本通 1023:Hello,World!的大小 | OpenJudge NOI 1.2 10
  6. MaxKey单点登录认证系统 v2.4.0 RC
  7. Spring MVC学习总结(14)——SpringMVC测试框架之mockMVC详解
  8. Linux应用基本命令实验,实验二 linux基本命令的使用
  9. MongoDB工具MagicMongoDBTool使用介绍(一) -- 简单MongoDB入门
  10. python基础教程-学习python有什么好的视频教程?
  11. Kali渗透测试:使用Word宏病毒进行渗透攻击
  12. XJTU-SY滚动轴承加速寿命试验数据集
  13. Android 常用简单bat脚本
  14. 图片像素、大小、分辨率的关系
  15. Linux arm 支持 ntfs 文件系统
  16. pycharm异常问题之Unable to save settings: Failed to save settings. Please restart PyCharm
  17. 企业选择局域网即时通讯软件的必要性是什么?
  18. 群晖 NAS 与 百度云网盘互相进行同步
  19. 美格智能5G模组助力电力巡检之无人机产品智能化高效运作
  20. 2021-BUGKU-做题记录-WEB

热门文章

  1. iOS-数据库sqlite的使用
  2. zabbix分布式监控环境完全编译安装部署
  3. 射雕三部曲的优美片段
  4. 另一种同步软件Unison的使用方法
  5. moofs分布式存储
  6. 挑个很吉利的日子,开通我的博客!
  7. GUI编程与CLI编程
  8. leetcode 392
  9. selective gaussian blur /adaptive-blur
  10. Mysql系列三:Centos6下安装Mysql和Mysql主从复制的搭建