专栏首页程序员学府Python 关键字global全局变量详解

Python 关键字global全局变量详解

变量作用域

一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。

全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优先使用局部变量

那么问题来了, 如果想在函数内使用全局变量,或改变全局变量的值, 应该怎么做呢?

global关键字

为了解决函数内使用全局变量的问题,python增加了global关键字, 利用它的特性, 可以指定变量的作用域。

global关键字的作用:声明变量var是全局的

代码实例

实例1:

函数优先使用局部变量

结果:

实例2:

在没有局部变量的情况下, 使用全局变量

str = ‘global’

def func1():

print(str)

func1()

print(str)

结果:

global

global

实例3:

改变全局变量的值, 通过实例1可以看到, 函数内赋值并不能改变全局变量的值,所以需要global关键字

str = ‘global’

def func1():

global str

str = ‘local’

print(str)

func1()

print(str)

结果:

local

local

其他用法

你可以使用同一个global语句指定多个全局变量。

例如

global var1, var2, var3

特殊类型

字符串、数字类型是不能被在局部被修改的,除非使用global关键字,但是 列表,字典是可修改,但不能重新赋值,如果需要重新赋值,需要在函数内部使用global定义全局变量

代码实例1:

list = [‘global’, ‘pythontab.com’]
def func1():
list.append(‘bbs.pythontab.com’)
print(list)
func1()
print(list)

结果:

[‘global’, ‘pythontab.com’, ‘bbs.pythontab.com’]
[‘global’, ‘pythontab.com’, ‘bbs.pythontab.com’]

发现上面的list并没有使用global但是值却改变了, 说明列表是可以在局部被修改的

代码实例2:

list = [‘global’, ‘pythontab.com’]
def func1():
list = [‘docs.pythontab.com’]
print(list)
func1()
print(list

)

结果:

[‘docs.pythontab.com’]
[‘global’, ‘pythontab.com’]

局部变量赋值不能改变全局变量的值

代码实例3:

list = [‘global’, ‘pythontab.com’]
def func1():
global list
list = ‘docs.pythontab.com’
print(list)
func1()
print(list)

结果:

docs.pythontab.com
docs.pythontab.com

使用了global关键字后, 变量被重新赋值

————————————————

本文分享自微信公众号 - 程序员学府(xiexiaocui0228),作者:浩轩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解决Python找不到ssl模块问题 No module named _ssl

    用户7081581
  • PyCharm第一次安装及使用教程

    本文通过图文并茂的形式给大家介绍PyCharm第一次安装及使用教程,分步骤通过实际案例给大家操作演示,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋...

    用户7081581
  • Python count()方法:统计字符串出现的次数

    count 方法用于检索指定字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回 0,否则返回出现的次数。

    用户7081581
  • 搭建个人博客网站Github、Hexo与Next

    过年回家前在公司的最后一天,说实话有点心不在焉了。整个2017也就这样恍然过去,很多事都来不及回想。在这最后的时间里,想起把自己使用Hexo搭建个人博客网站的流...

    梧雨北辰
  • Hexo-完全免费全平台搭建个人博客(1)-整体搭建

    2017-03-0911:04:17 发表评论 2,405℃热度 几个月前就想写这篇文章了,很多人也让我写过,也帮很多人搭建过,但是一直没时间纪录下来,这次有...

    timhbw
  • EfficientDet训练自己的物体检测数据集

    我们常常有一个概念,SSD 等单阶段目标检测器很快,但准确性比不上 Mask R-CNN 等两阶段目标检测器,尽管两阶段目标检测推断速度要慢许多。那么有没有一种...

    机器学习AI算法工程
  • 基于 Hexo + GitHub Pages 搭建个人博客(二)

    点击文章底部“ 阅读原文 ”,围观我基于 Hexo + GitHub Pages 搭建的个人博客。 在 基于 Hexo + GitHub Pages 搭建个人博...

    compassblog
  • 个人博客案例

    很多人都希望能有自己的博客,但是搭建一个博客需要大量的人力物力,比如说,需要一台一天24小时运行的服务器,需要购买一个域名,备案,自己需要运维服务器,需要繁重的...

    worker
  • 《Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using Rx Kotlin )《Kotlin 反应式编程》使用

    我们现在已经基本知道 Kotlin 中 DSL 的样子了。但是这些 DSL 都是怎样实现的呢?本节我们就通过实现一个极简的http DSL来学习创建 DSL 背...

    一个会写诗的程序员
  • kali入侵windows

    因为我是一个爱好和平的人(捂嘴笑),所以就在虚拟机中,创建二个系统,一个kali,一个windows xp,来进行这次入侵实验,以此迈入hacke的大门。 -...

    东风冷雪

扫码关注云+社区

领取腾讯云代金券