Python变量的作用域教程

这篇具有很好参考价值的文章主要介绍了Python变量的作用域教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在写代码的时候,免不了要使用变量。但程序中的一个变量并不一定是在哪里都可以被使用,根据情况不同,会有不同的“有效范围”。

看这样一段代码:

def func(x):
    print ('X in the beginning of func(x): ', x)
    x = 2
    print ('X in the end of func(x): ', x)
     
x = 50func(x)print ('X after calling func(x): ', x)

输出:

X in the beginning of func(x):  50
X in the end of func(x):  2
X after calling func(x):  50

变量 x 在函数内部被重新赋值。但在调用了函数之后,x 的值仍然是50。为什么?

这就得说一下变量的“作用域”:

当函数内部定义了一个变量,无论是作为函数的形参,或是另外定义的变量,它都只在这个函数的内部起作用。函数外即使有和它名称相

同的变量,也没有什么关联。这个函数体就是这个变量的作用域。像这样在函数内部定义的变量被称为“局部变量”。

要注意的是,作用域是从变量被定义的位置开始。像这样的写法是有问题的:

def func():
    print (y)
    y = 2
    print (y)

报错:

UnboundLocalError: local variable 'y' referenced before assignment

因为在 y = 2 之前,y 并不存在,调用 y 的值就会出错。

回到开始那个例子:

在函数 func 外部,定义的变量 x,赋值为 50,作为参数传给了函数 func。而在函数 func 内部,变量 x 是形参,它的作用域是整个函数体内部。它与外面的那个 x 没有关系。只不过它的初始值是由外面那个 x 传递过来的。

所以,虽然函数体内部的 x 被重新赋值为 2,也不会影响外面那个 x 的值。

不过有时候,我们希望能够在函数内部去改变一些变量的值,并且这些变量在函数外部同样被使用到。怎么办?

一种方法是,用 return 把改变后的变量值作为函数返回值传递出来,赋值给对应的变量。比如开始的那个例子,可以在函数结尾加上

return x

然后把调用改为

x = func(x)

还有一种方法,就是使用“全局变量”。

在 Python 的函数定义中,可以给变量名前加上 global 关键字,这样其作用域就不再局限在函数块中,而是全局的作用域。

通过 global 改写开始的例子:

def func():
    global x    print ('X in the beginning of func(x): ', x)
    x = 2
    print ('X in the end of func(x): ', x)
     
x = 50func()print ('X after calling func(x): ', x)

输出:

X in the beginning of func(x):  50
X in the end of func(x):  2
X after calling func(x):  2

函数 func 不再提供参数调用。而是通过 global x 告诉程序:这个 x 是一个全局变量。于是函数中的 x 和外部的 x 就成为了同一个变

量。这一次,当 x 在函数 func 内部被重新赋值后,外部的 x 也随之改变。

前面讲的局部变量和全局变量是 Python 中函数作用域最基本的情况。实际上,还有一些略复杂的情况,比如:

def func():
    print ('X in the beginning of func(x): ', x)    # x = 2
    print ('X in the end of func(x): ', x)
#Python小白学习交流群:153708845     
x = 50func()print ('X after calling func(x): ', x)

输出:

X in the beginning of func(x):  50
X in the end of func(x):  50
X after calling func(x):  50

程序可以正常运行。虽然没有指明 global,函数内部还是使用到了外部定义的变量。然而一旦加上

x = 2

这句,程序就会报错。因为这时候,x 成为一个局部变量,它的作用域从定义处开始,到函数体末尾结束。

建议在写代码的过程中,显式地通过 global 来使用全局变量,避免在函数中直接使用外部变量文章来源地址https://www.toymoban.com/news/detail-711297.html

到了这里,关于Python变量的作用域教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python教程 入门学习笔记 第3天 编程基础常识 代码注释 变量与常量

    编程基础常识 一、注释 1、对代码的说明与解释,它不会被编译执行,也不会显示在编译结果中 2、注释分为:单行注释和多行注释 3、用#号开始,例如:#这是我的第一个python程序 4、注释可以写在单独一行,也可以写在一句代码后面 5、不想执行编译,又不能删除的代码,可

    2024年02月14日
    浏览(55)
  • Python 函数和变量作用域

    Python 引用变量的顺序:当前作用域局部变量-外层作用域变量-当前模块中的全局变量-Python内置变量。 1、 global global 用来在函数或其他局部作用域中使用全局变量,如果不对全局变量进行修改,那么可以不使用global;如果想要在函数或局部作用域中对全局变量进

    2024年04月24日
    浏览(31)
  • Python中的变量作用域

    问题: 简述以下Python中的变量作用域(变量查找顺序) 变量的作用域:变量的有效使用范围 变量的作用域由变量的定义位置决定  Python变量作用域分4种情况: L:Local, 局部作用域 ,即在函数中定义的变量; E:Enclosed, 嵌套作用域 ,可理解为嵌套的父级函数的局部作用域,

    2024年02月13日
    浏览(35)
  • Python变量:创建、类型、命名规则和作用域详解

    变量是用于存储数据值的容器。 创建变量 Python没有用于声明变量的命令。 变量在您第一次为其分配值时被创建。 示例 变量不需要声明为特定类型,并且甚至在设置后可以更改类型。 示例 如果要指定变量的数据类型,可以使用类型转换。 示例 获取类型 您可以使用type()函数

    2024年02月08日
    浏览(39)
  • python 函数-06-变量&参数内存管理及作用域

    python的参数传递,传递的是参数值而非参数地址。参数值被复制后传递进函数。 对于数值类型的参数(即不可变类型,整型、浮点、复数等),在函数内改变参数值,函数外面不受影响。 对于容器类型的参数(即可变类型,列表、字典、字符串等),在函数内改变了容器里

    2024年02月22日
    浏览(39)
  • FPGA设计Verilog基础之数据类型的作用和特点、常量和变量的代码示例详解

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus 在Verilog中,有多种数据类型可供使用,包括位向量类型、整数类型、实数类型、布尔型、时间类型和字符串类型等。下面详细介绍Verilog的所

    2024年02月03日
    浏览(42)
  • C语言系列(所需基础:大学C语言及格)-1-编译器/简单的求和代码/数据类型/变量的分类/变量的作用域和生命周期

    为了方便,我使用的是在线的C语言编译器进行程序的运行。 链接:https://www.bejson.com/runcode/c740/ 效果如下: 分为局部变量和全局变量 说白了,放在main函数外面的变量为全局变量,其他为局部变量。

    2024年02月19日
    浏览(53)
  • Python入门【变量的作用域(全局变量和局部变量)、参数的传递、浅拷贝和深拷贝、参数的几种类型 】(十一)

     👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错

    2024年02月15日
    浏览(51)
  • vscode 的代码提示有时候有,有时候没有(python)

    vscode 的代码提示有时候有,有时候没有。没有的时候出现如下报错: Sorry, something went wrong activating IntelliCode support for Python. Please check the “Python” and “VS IntelliCode” output windows for details. 不太清楚为什么,把 IntelliCode 的版本换了别的也不好用。 先存一下,以后遇到解决方法

    2024年02月09日
    浏览(80)
  • 【30天python从零到一】---第六天:函数、变量作用域、函数的链式调用和递归调用

    🍎 博客主页:🌙@披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 Python专栏 🌙请不要相信胜利就像山坡上的蒲公英一样唾手可得,但是请相信,世界上总有一些美好值得我们全力以赴,哪怕粉身碎骨!🌙 🍉一起加油,去追寻、去成为更好的自己

    2023年04月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包