python中for循环变量作用域及用法详解


Posted in Python onNovember 05, 2019

在讲这个话题前,首先我们来看一道题:

代码1:

def foo():
  return [lambda x: x**i for i in range(1,5,2)]
print([f(3) for f in foo()])

伙伴们,你们认为这里产生的结果是什么呢?我们再来看下这题的变体:

代码:2

def foo():
  functions=[]
  for i in range(1,5,2):
    def inside_fun(x):
      return x ** i
    functions.append(inside_fun)
  return functions
print([f(3) for f in foo()])

这两题的结果是一样的:都是[27,27]。我相信大部分的伙伴也都会有个疑问,为什么不是[3,27]呢?

这里的就是我们今天要说的for循环中的变量作用域,因为for循环不是一个函数体,所以for循环中的变量i的作用域其实和for循环同级,即类似下面代码

代码3:

def foo():
  i=None
  for i in range(1,5,2):
    pass
  print(i)
foo() # 结果为3,即循环结束i的最终值

另外因为python运行到代码行时才会去查找该变量的作用域,所以代码1和代码2中的i值在调用的时候为for循环最终值3,所以结果都是执行x**3。

ps:下面看下python中for循环的用法

Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

语法模式:for iterating_var in sequence:

in 字面意思,从某个集合(列表等)里顺次取值

#遍历数字序列
the_count=[1,2,3,4,5]
for number in the_count:
  print(f"This is count {number}")
输出结果:
This is count 1
This is count 2
This is count 3
This is count 4
This is count 5 
#遍历一维字符串数组
fruits=['apples','oranges','dimes','quarters']
for fruit in fruits:
  print(f"A fruit of type:{fruit}")
输出结果为:
A fruit of type:apples
A fruit of type:oranges
A fruit of type:dimes
A fruit of type:quarters
#遍历字符串
list_python='python'
for j in list_python:
  print(f"{j}")
输出结果为:
p
y
t
h
o
n
#通过序列索引迭代
elements=[]#列表为空
for i in range(0,6):#012345
  print(f"Adding {i} to the list.")
  elements.append(i)#得到elements=[0,1,2,3,4,5]
  #len(elements)长为6,range(len(elements))==range(6)
for i in range(len(elements)):
  print(f"Elemnet was:{i}")
输出结果为:
Adding 0 to the list.
Adding 1 to the list.
Adding 2 to the list.
Adding 3 to the list.
Adding 4 to the list.
Adding 5 to the list.
Elemnet was:0
Elemnet was:1
Elemnet was:2
Elemnet was:3
Elemnet was:4
Elemnet was:5

总结

以上所述是小编给大家介绍的python中for循环变量作用域及用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
跟老齐学Python之Import 模块
Oct 13 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
用python对oracle进行简单性能测试
Dec 05 Python
Python实现对齐打印 format函数的用法
Apr 28 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 #Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 #Python
Python socket模块ftp传输文件过程解析
Nov 05 #Python
python3.6、opencv安装环境搭建过程(图文教程)
Nov 05 #Python
Python socket模块方法实现详解
Nov 05 #Python
基于python3 的百度图片下载器的实现代码
Nov 05 #Python
Python hashlib模块加密过程解析
Nov 05 #Python
You might like
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
nodejs分页类代码分享
2014/06/17 NodeJs
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
javascript学习之json入门
2016/12/22 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
Node爬取大批量文件的方法示例
2019/06/28 Javascript
python dict remove数组删除(del,pop)
2013/03/24 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
python 如何上传包到pypi
2020/12/24 Python
电子商务专业个人的自我评价分享
2013/10/29 职场文书
商务英语毕业生自荐信范文
2013/11/08 职场文书
员工年终演讲稿
2014/01/03 职场文书
12岁生日感言
2014/01/21 职场文书
销售会计岗位职责
2014/03/15 职场文书
文明寝室标语
2014/06/13 职场文书
英语专业自荐书
2014/06/13 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
红与黑读书笔记
2015/06/29 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
MySQL池化框架学习接池自定义
2022/07/23 MySQL
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL