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实现截屏的函数
Jul 26 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
Python基于回溯法子集树模板实现8皇后问题
Sep 01 Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
PyQT实现多窗口切换
Apr 20 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
对python for 文件指定行读写操作详解
Dec 29 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
Python闭包和装饰器用法实例详解
May 22 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
python基础入门之字典和集合
Jun 13 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
需要注意的几个PHP漏洞小结
2012/02/05 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
php命令行写shell实例详解
2018/07/19 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
javascript实现弹出层效果
2019/12/10 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
python之mock模块基本使用方法详解
2019/06/27 Python
Python如何实现爬取B站视频
2020/05/20 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
关键字final的用法
2013/10/02 面试题
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
工地资料员岗位职责
2013/12/31 职场文书
社团活动总结报告
2014/06/27 职场文书
公司授权委托书范本
2014/09/18 职场文书
毕业论文致谢范文
2015/05/14 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
golang 接口嵌套实现复用的操作
2021/04/29 Golang
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS