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. JavaScript特效源码(6、页面特效一)

    1.页面全屏 页面全屏显示[ALT+F4关闭][共1步][新弹出窗口并以全屏幕方式显示] ====1.将以下代码加入HTML的<body></body>之间: <form ...

  2. 21分钟教会你分析MaxCompute账单

    背景 阿里云大计算服务MaxCompute是一款商业化的大数据分析平台,其计算资源有预付费和后付费两种计费方式.并且产品每天按照project为维度进行计量计费(账单基本情况下会第二天6点前产出).本 ...

  3. 第九章 Odoo 12开发之外部 API - 集成第三方系统

    Odoo 服务器端带有外部 API,可供网页客户端和其它客户端应用使用.本文中我们将学习如何在我们的客户端程序中使用 Odoo 的外部 API.为避免引入大家所不熟悉的编程语言,此处我们将使用基于 P ...

  4. TmodJs:常用语法

    ylbtech-TmodJs:常用语法 1.返回顶部 1.循环 {{each items as item index}} <tr> <td>{{index+1}}</td ...

  5. day 46 Javascript学习

    Javascript学习   JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScri ...

  6. PAT甲级——A1103 Integer Factorization

    The K−P factorization of a positive integer N is to write N as the sum of the P-th power of Kpositiv ...

  7. <每日一题>题目24:冒泡排序

    ''' 冒泡排序:比较相邻元素,顺序错误就交换顺序 ''' import random import cProfile def bubble_Sort(nums): for i in range(le ...

  8. Referenced assembly does not have a strong name

    Step 1 : Run visual studio command prompt and go to directory where your DLL located. For Example my ...

  9. scrapy中下载文件和图片

    下载文件是一种很常见的需求,例如当你在使用爬虫爬取网站中的图片.视频.word.pdf.压缩包等的时候 scrapy中提供了FilesPipeline和ImagesPipeline,专门用来下载文件和 ...

  10. HtmlHelper1

    <div> @using(Html.BeginForm("Test","Default")) { 4 @Html.TextBox("nam ...