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基础教程之Filter使用方法
Jan 17 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
Python3.5 创建文件的简单实例
Apr 26 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
python爬虫 爬取超清壁纸代码实例
Aug 16 Python
pandas数据处理进阶详解
Oct 11 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
python反转列表的三种方式解析
Nov 08 Python
基于plt.title无法显示中文的快速解决
May 16 Python
在django中form的label和verbose name的区别说明
May 20 Python
基于python实现破解滑动验证码过程解析
May 28 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 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
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
Python2.x中文乱码问题解决方法
2015/06/02 Python
对python 调用类属性的方法详解
2019/07/02 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
程序员机试试题汇总
2012/03/07 面试题
linux比较文件内容的命令是什么
2015/09/23 面试题
师范大学音乐表演专业求职信
2013/10/23 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
2014全年工作总结
2014/11/27 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
学期个人自我总结
2015/02/13 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android