python词法作用域和动态作用域

本文探讨了词法作用域和动态作用域的概念,通过Python和Bash的例子解释了两者之间的区别。词法作用域在编译期间关联,而动态作用域在运行时关联。现代语言通常倾向于采用词法作用域,因为它提供了更好的控制和功能,如闭包和高阶函数。动态作用域则相对较少使用,但在某些语言如Perl中,可以通过特定修饰符来实现。
摘要由CSDN通过智能技术生成

不管什么语言,我们总要学习作用域(或生命周期)的概念,比如常见的称呼:全局变量、包变量、模块变量、本地变量、局部变量等等。不管如何称呼这些作用域的范围,实现它们的目的都一样:

  • (1)为了避免名称冲突;
  • (2)为了限定变量的生命周期(本文以变量名说事,其它的名称在规则上是一样的)。

但是不同语言的作用域规则不一样,虽然学个简单的基础就足够应用,因为我们有编程规范:(1)尽量避免名称冲突;(2)加上类似于local的修饰符尽量缩小生效范围;(3)放进代码块,等等。但是真正去细心验证作用域的生效机制却并非易事(我学Python的时候,花了很长时间细细验证,学perl的时候又花了很长时间细细验证),但可以肯定的是,理解本文的词法作用域规则(Lexical scoping)和动态作用域规则(dynamic scoping),对学习任何语言的作用域规则都有很大帮助,这两个规则是各种语言都宏观通用的。

很简单的一段bash下的代码:

1 x=1
2 function g(){ echo "g: $x" ; x=2; }
3 function f(){ local x=3 ; g; echo "f: $x"; } # 输出2还是3
4 f           # 输出1还是3?
5 echo $x     # 输出1还是2?

我是一名python开发工程师,整理了一套python的学习资料,从基础的python脚本到web开发、爬虫、
数据分析、数据可视化、机器学习、面试真题等。想要的可以进群:688244617免费领取

对于bash来说,上面输出的分别是3(g函数中echo)、2(f函数中的ec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值