小知识:pyhon的作用域

http://www.cnblogs.com/wupeiqi/p/5649402.html

五句话搞定JavaScript作用域

从JavaScript  == pyhon 作用域几乎一致 __ 详解:

一、“JavaScript中无块级作用域”

在Java或C#中存在块级作用域,即:大括号也是一个作用域。

在python \ JavaScript语言中无块级作用域.

# 作用域# python   无块级别作用域。# java/c#  不可以生效。if 1==1:    name=‘alex‘   print(name)      #生效.alex

for i in range(10):    name=i   print(name)      #9

# python 以函数为作用域。def func():    name=‘alex‘    #name只在代码块中可以引用。func()print(name)  #不能使用输出,报错。

二、python \JavaScript采用函数作用域

当执行console.log(xo)时,其寻找顺序为根据作用域链从内到外的优先级寻找,

如果内层没有就逐步向上找,直到没找到抛出异常。

四、python \JavaScript的作用域链执行前已创建

python 的作用域在被执行之前已经创建,日后再去执行时只需要按照作用域链去寻找即可。

# 作用域链# python 作用域在执行前已经确定好。在 所在的作用域,往上找
#例子1name=‘alex‘def f1():    print(name)def f2():    name=‘eric‘    f1()

f2()#执行结果:#alex
例子2

#原理:但凡是用到了哪个函数,比如f1(),就会从f1()自己的函数往上找。跟你在函数执行放在哪里一点关系都没有。name=‘alex‘def f1():  #f1所在的作用域,往上找。    print(name)

def f2():    name=‘eric‘  #内部作用域    return f1

ret =f2()# print(ret)ret()

#结果# <function f1 at 0x0000026C7D81DF28># alex


新浪面试题:

# 例子3  进阶.

li=[x+100 for  x in range(10) if x >6 ]print(li)

#执行结果:# [107, 108, 109]

# 新浪面试题:# 以lambda 为元素的列表   li=[函数,函数,函数, ]

li1=[lambda :x  for x in range(4)]  #li 列表中的元素,【函数,函数,函数】,li2=[lambda :1]li3=[x for x in range(10)]print(lambda :9)

print(li1[0])  #生成一个函数名,并没有执行。

ret=li1[0]()print(ret)

print(li2[0]())

print(li3)

###########print([lambda :9,][0]())  #根据内容——自己进行定义的lambda()执行函数。

#执行结果:# <function <listcomp>.<lambda> at 0x00000263D1CA80D0># 3# 1# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# 9

来自为知笔记(Wiz)

时间: 2024-08-27 02:23:27

小知识:pyhon的作用域的相关文章

es6 一些小知识

本人最近被es6感兴趣了,学习一些,以下就是自己总结的一些小知识 1.当你在百度输入"es6"关键字,点击进入es6入门,首先你需要知道怎样学习的顺序,先看第21章Module语法, 严格模式 ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict";. 严格模式主要有以下限制. 变量必须声明后再使用 例如:let 函数的参数不能有同名属性,否则报错 例如:const let 不能使用with语句 不能对只读属性赋值,否则报错 例如:con

小知识(七):代理&事件

代理delegate: 对象引用    指向    某个特定类型的对象. 代理        指向    某个特定类型的方法. 代理四步: 定义自定义代理类:public delegate void first(int i); 实例化代理类:first MyDelegate = null; 实例添加方法:MyDelegate += new first(show); 通过实例对象调用方法:MyDelegate(666); class Program { //定义frist代理 public del

js中级小知识1

首先我们复习之前的小知识,本期博客与之前有关 js数据类型 基本数据类型:string    undefined         null         boolean          number 引用数据类型:     Object     array       function 二者的区别 基本数据类型就是简单的操作值,引用数据类型,把引用地址赋值给变量 堆内存 就是存放代码块的,存放形式有两种,一种是对象一键值对的形式存放 另一种就是函数 以字符串的形式存放 案例 引用数据类型的赋

iOS 小知识-tips

--->1<--- arc的项目中使用非arc代码,则添加-fno-objc-arc: 非arc项目中使用arc代码,则添加-fobjc-arc. --->2<--- 实用的类 NSKeyedArchiver [UIScreen mainScreen] [UIDevice currentDevice] [UIFont familyNames] [UIApplication sharedApplication] [NSUserDefaults standardUserDefaults

Linux 小知识翻译 - 「syslog」

这次聊聊「syslog」. 上次聊了「日志」(lgo).这次说起syslog,一看到log(日志)就明白是怎么回事了.syslog是获取系统日志的工具. 很多UINIX系的OS都采用了这个程序,它承担了「获取系统全部的日志」这个维持系统正常运行的重要任务. syslog的本体是「syslogd」这个daemon(一般翻译成守护进程),常驻内存中获取日志. syslog的特点是可以通过配置文件「/etc/syslog.conf」,对「哪种应用程序?哪种重要度的信息?记录在哪个文件中?」等进行细致的

Linux 小知识翻译 - 「日志」(log)

这次聊聊「日志」. 「日志」主要指系统或者软件留下的「记录」.出自表示「航海日志」的「logbook」. 经常听说「出现问题的时候,或者程序没有安装自己预期的来运行的时候,请看看日志!」. 确实,记录了系统和软件详细运行情况的「日志」是信息的宝库,通过日志来解决问题的事例也非常多. 但事实上,「无论如何也不会看日志」的用户也有很多.理由很简单,日志的信息量非常大,全部用眼睛来看的话是非常吃力的. 而且,英语写的日志也会让英文不好的人敬而远之. 虽说「要养成用眼睛来看日志的习惯」,但实行起来却非常

Linux 小知识翻译 - 「编译器和解释器」

这次聊聊「编译器和解释器」. 编程语言中,有以C为代表的编译型语言和以Perl为代表的解释型语言.不管是哪种,程序都是以人类能够理解的形式记录的,这种形式计算机是无法理解的. 因此,才会有编译器和解释器. 对于编译型语言,是使用编译器将人类可读的代码转换为机器能够理解的「机器语言」文件,然后通过执行这个「机器语言」文件来实现程序的执行. 另一方面,对于解释型语言,是使用解释器将人类可读的代码逐行解释,一边解释一边执行这个程序.(这里的解释是将代码解释成机器语言,让计算机能够理解) 甚至有的语言既

Linux 小知识翻译 - 「补丁」(patch)

这次,聊聊补丁. 当有bug或者安全漏洞的时候,就会发布补丁.打上补丁之后,就能解决相应的bug或者安全漏洞. 那么,「补丁」到底是什么呢? 「补丁」只有少量的代码,一般都是对程序的一部分进行更新或者追加,包括bug修正,安全漏洞修正,功能追加或者变更等等.当然,只有「补丁」是无法运行的. 即,只有将「补丁」附加到原来的程序中,更新原来的程序后,才能运行. 「补丁(patch)」本来是指「打补丁用的小布头」.「patch」正是为了补足现有的程序,堵住程序漏洞的「布头」. 打「补丁」的时候需要用到

Linux 小知识翻译 - 「协议(protocol)」

对于理解服务器和网络来说,「协议」是不可缺少的概念. 「协议(protocol)」有「规则,规定」的意思. 实际上「协议」的函数很广,在通信领域,「协议」规定了「在通信时,什么样的情况下,以什么样的顺序,什么样的方式交互什么样的数据」. 抽象的去理解「协议」可能会比较困难,下面来举个例子. 通过Web以HTML方式交互时使用的协议是「HTTP」(Hyper Text Transfer Protocol).这个协议最重要的就是规定了服务器和客户端之间以HTML方式交互的规则. 比如,客户端连接上服

Linux 小知识翻译 - 「Linux」怎么读?

主要讨论日语中的读法,所以没有完全按照原文来翻译. 「linux」的读法有很多(这里指在日语中),代表性的读法有以下几种: A). 李纳苦思 B). 李奴苦思 C). 纳依纳苦思 A和B相同的是将 linux开头的「li」发音成「李」.这也是linux之父Linus Torvalds的名字的日语假名(「リーナス?トーバルズ」)的由来. linux中「nu」的发音是怎么样的呢?Linux Online的网页上有说明,而且视频中还有 Linus Torvalds 的发音. http://www.li