python局部变量和全局变量(6)

在python开发中,变量也是有生命周期的,一旦周期结束,程序会自动清理暂用的空间,释放内存,变量分为两者,一种是局部变量,一种是全局变量,两者具体有什么区别呢……

一.局部变量

一般而言在函数内部或者类中声明的变量默认都是局部变量。一旦函数结束,变量的生命周期也会结束,占用的空间会被自动释放。

def func1():
    # 在函数内部定义的变量默认都是局部变量
    a = 1
    print(a)
    # 函数结束,局部变量a的生命周期结束

# 由于a是局部变量,并且a的生命周期已经结束,外部再次调用局部变量a,程序会产生异常,崩溃
print(a)

程序报错:NameError: name ‘a’ is not defined ,原因:函数内部定义的局部变量只能在函数内部使用。

二.全局变量

全局变量和局部变量相反,在函数外部或者类外部声明的变量默认为全局变量。全局变量的生命周期直到程序结束才会结束,比局部变量生命周期更长。

a = 2
def func1():
    print(a)
    # 函数结束,局部变量的生命周期结束
    # 全局变量直到程序结束,生命周期才结束

func1()
# 输出全局变量a
print(a)

输出结果:

2
2

三.局部变量和全局变量的区别

1.全局变量的生命周期是直到程序结束,而局部变量生命周期是函数结束;

2.如果需要在函数内部修改全局变量的值,需要在函数内部为该全局变量前面加上 global 关键字, 否则该变量默认为函数内部定义的局部变量,示例代码如下:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com

@File:python_global.py
@Time:2019/10/10 21:00

@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
# 在函数内部定义的变量默认都是局部变量
a = 2
def func1():
    # global a # 声明 a 是全局变量,在该函数内部对a的操作就是对全局变量a的操作
    a = 1      # 如果没有上一行代码,默认a就是函数内部的局部变量,函数结束,生命周期结束
    print(a)
    # 函数结束,局部变量的生命周期结束

func1()
# 输出全局变量a
print(a)

输出结果:

1
2

是不上觉得很奇怪:为什么最后一个值是2,应该是1才对?

因为没有第17行代码的话,默认a只是函数内部的一个普通局部变量,所以函数内部的print函数输出到控制台是1;函数结束,函数内部的局部变量a值生命周期结束,执行fun1函数之后的print函数输出的是全局变量a的值2.

也就是说函数内部对a值得修改并没有成功,只有在函数内部,为全局变量加上关键字global声明为全局变量,才能修改成功,取消第17行得注释,控制台输出:

1
1

四.重点总结

1.注意局部变量和全局变量的生命周期;

2.如果想在函数内部修改全局变量的值,需要加上关键字global;

猜你喜欢:

1.python变量

2.pycharm设置头文件模板

转载请注明:猿说Python » python局部变量和全局变量

技术交流、商务合作请直接联系博主

扫码或搜索:猿说python

猿说python

微信公众号 扫一扫关注

原文地址:https://www.cnblogs.com/shuopython/p/12034557.html

时间: 2024-10-23 21:52:10

python局部变量和全局变量(6)的相关文章

python 局部变量和全局变量 global

当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的.这称为变量的 作用域 .所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始. 使用局部变量 例7.3 使用局部变量 #!/usr/bin/Python# Filename: func_local.py def func(x):    print 'x is', x    x = 2    print 'Changed local x to', x x = 50func(

Python 局部变量与全局变量

本来以为 局部变量就是在函数/def/class/lambda内部的变量,全局变量就是在之前这些之外的变量.但是,再一次学习Python atm 中应用时发现了一次特例(意外) 字典中 在函数内部改变 其部分值之后,在函数外打印字典,字典的值竟然改变了. x = {"w":1,"k":2} def a(x): x["w"] = 123 x = {"w":999,"k":3433} return x def

Python局部变量和全局变量global

当你在函数定义声明变量的时候,它们与函数外具有相同名称的其它变量没有任何关系,即变量名称对于函数来说是 局部  的.这称为变量的 作用域 .所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始. 使用局部变量 例子:func_local.py #!/usr/bin/python #encoding:utf-8 def func(x): print 'x is', x x=2 print 'Changed local x to', x x=50 func(x) print 'x is s

Python 局部变量 与全局变量

Demo 全局变量是在整个py文件中声明,全局范围内都可以访问 局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了 monet=22323 # 全局变量#局部变量 不加globaldef functiondemo(): # 如果 函数 不带参数,但是想要访问 全局变量 #必须加上global ,这样子就是局部变量了 global monet # 转换为全局变量,假如不转换的话,会报错的 s=2 monet += 2 #没有转换的话这里会报错 因为这是局

python 局部变量和全局变量 day15

全局变量,全局都可以调用的变量 局部变量,在子程序中可以调用的变量 name = 'w' def text(): name = 'l' print(name) text() print(name) global调用全局变量,且可以重新赋值,如果没有则不能重新赋值 text()决定调用顺序 name = 'w' def text(): global name name = 'l' print(name) def text2(): print(name) text2() text() print(n

python局部变量、全局变量,global、nolocal的区别

def fun1(): x = 5 # 非全局变量的外部变量,在fun2()的外部作用域里边 def fun2(): x *= x # 会报错未定义 return x return fun2()fun1() 解决办法1:用容器存放,因为容器类型不是存放在栈里边(局部变量存放在栈里边),所以不会被屏蔽起来 def fun2(): x = [5] def fun2(): x[0] *= x[0] return x[0] return fun2()fun2()解决办法2:用nolocal def fu

Python中的全局变量与局部变量的区别

全局变量与局部变量两者的本质区别就是在于作用域 用通俗的话来理解的话, 全局变量是在整个py文件中声明,全局范围内都可以访问 局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了 如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的.因此不建议这样使用,这样会使得程序很不健全 直接来看几个例子来理解全局变量和局部变量的区别吧: Demo1: def fun(x):       y=2       print("乘法

python入门基础教程07 python的局部变量和全局变量

局部变量 要谈局部变量和全局变量的技术前提是对函数有一定的理解,我们先在这里简单说明一下Python的函数,Python有自带的函数也可以使用第三方工具包了外部引用函数,有的时候用户自己可以自主开发一些特定功能的函数我们称之为自定义函数.用户怎么才能自己定义函数呢?Python 规定的自定义函数语法结构如下: def function_name(parameters): (TAB)statement1 (TAB)statement2 (TAB)statement3 (TAB)etc. 第1行是定

python基础--局部变量与全局变量

首先来看两张图,局部变量与全局变量的区别: 局部变量: class MyClass(): def a(self): n=100 print('a中的n数值为:%d'%(n)) def b(self): n=n+200 print('b中的n数值为:%d'%(n)) 这个时候就会报错,函数b中的n=n+200会显示n未定义错误,原因是n只是在函数a中定义了一个值100,但是函数b中并未赋值,如果还是要使用n这个数值,就可以定义一个全局变量,表示区分我这里写成_n 全局变量: _n=1111 cla