python的作用域与javaScript是一样的,参考:http://www.cnblogs.com/sunshuhai/p/9112578.html

一、python是以函数作为作用域的

if 1==1:
xo = 123
print(xo)
#输出:123
xo = "alex"
def f1():
print(xo)
def f2():
xo = "xxoo"
f1()
f2()
#输出:alex

 二、python函数是有内层向外查找的

li=[]
for i in range(10):
def f1():
return i
li.append(f1)
print(li) #输出列表,列表内包含10个函数
print(li[0]()) #输出:9,
#为什么输出9呢?
#1、执行完for循环函数只是写入内存并没有被执行
#2、此时f1函数外部变量i的值为9,函数执行时首先去函数内部找i,找不到时则逐层向外查找

以上代码换为lambda表达式结果是一样的:

li=[]
for i in range(10):
f1=lambda :i
li.append(f1)
print(li) #输出列表,列表内包含10个函数
print(li[0]()) #输出:9,

可以继续简化:

li=[]
for i in range(10):
li.append(lambda:i)
print(li) #输出列表,列表内包含10个函数
print(li[0]()) #输出:9,

三、支持列表特殊操作语法

python支持列表特殊操作,如下面代码:

li = [x for x in range(10)]
print(li)
#结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

开头的X可以支持表达式运算:

li = [x+10 for x in range(10)]
print(li)
#结果:[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

还可以支持条件语句:

li = [x+10 for x in range(10) if x > 5]
print(li)
#结果:[[16, 17, 18, 19]]
#循环x,判断x的值是否大于5,如果大于5则+10

那么再看下面的代码:

li = [lambda: x for x in range(10)]
print(li) #结果是:列表内存放着10个函数
print(li[0]()) #结果是:9
#循环每x,并返回lambda:x

【python之路40】Python 作用域的更多相关文章

  1. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  2. Python之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  3. 【Python之路】Python目录

    Python基础1 -- Python由来.Python种类.编码方式, Python基础2 -- Python运算符.数据类型.enumerate.range.for循环 python基础3 -- ...

  4. Python之路,Day1 - Python基础1

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

  5. Python之路:Python简介

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间他为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 ...

  6. Python之路-初识python及环境搭建与测试(Python安装、Anaconda安装、PyCharm安装)

    一.认识Python 起源 Python的作者是著名的“龟叔”Guido van Rossum,他希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻 ...

  7. Python之路,Day1 - Python基础1(转载Alex)

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

  8. Python之路,Day1 - Python基础1 --转自金角大王

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

  9. Python之路,Day1 - Python基础1 介绍、基本语法、流程控制

    本节内容 1.python介绍 2.发展史 3.python 2.x or python 3.x ? 4.python 安装 5.第一个程序 Hello World 程序 6.变量 7.用户输入 8. ...

随机推荐

  1. 如何在asp.net(C#)里用正则表达式验证手机号码

  2. linux sudo命令失败 提示sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位

    sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位 一.前言 这是一个神奇的错误,缘由是因为有人将/usr/bin/sudo的权限改为777或其他. 解决 ...

  3. java 上传MultipartFile和String post请求

    /** * POST Multipart Request * @Description: * @param requestUrl 请求url * @param requestText 请求参数 * @ ...

  4. 跟我一起使用socket.io创建聊天应用

    安装express插件 新建index.js var app = require('express')(); var http = require('http').Server(app); app.g ...

  5. AJAX相关概念及应用

    1.Ajax(Asynchronous JavaScript And XML) 异步的JavaScript和XML XML 可扩展标记语言 Ajax是常用的WEB开发技术,是联系前端和后端的桥梁 应用 ...

  6. Java写爬虫代码时报org.apache.http.client.ClientProtocolException: URI does not specify a valid host异常的处理

    异常原因是url写错,导致无法解析 比如:这个报错就是因为写了两个“http:”导致该无法解析

  7. 洛谷P3376【模板】网络最大流  Dinic模板

    之前的Dinic模板照着刘汝佳写的vector然后十分鬼畜跑得奇慢无比,虽然别人这样写也没慢多少但是自己的就是令人捉急. 改成邻接表之后快了三倍,虽然还是比较慢但是自己比较满意了.虽然一开始ecnt从 ...

  8. mysql 存中文失败问题

    在向数据库存中文时报错: 将中文字段的字符集改为utf8即可: 成功截图:

  9. android 头像选择以及裁剪

    一.布局申明 <ImageView android:id="@+id/head_image" android:layout_width="80dp" an ...

  10. iOS之CATiledLayer的属性简介和使用

    1.CATiledLayer简介 CATiledLayer用于大型图片进行分割显示,需要显示的图片才会加载,直接上代码: - (void)viewDidLoad { [super viewDidLoa ...