全局变量:

  -   在书写中顶格开始;
  -   一旦定义完毕在整个文件生效;
  -   在函数内如果定义了同名全局变量名,会“覆盖”掉全局变量;
  -   在函数中同名的变量,当在函数退出后消失,全局的同名变量恢复;
  -   如果在函数中想修改外部的全局变量加global关键字;

局部变量   

  -   在函数、过程中定义的变量
  -   只在函数、过程中有效;

#在函数中修改外部的全局变量

name="abc"

def test1():
global name
print("修改前:",name)
name="ZZZ"
print("修改后:",name) test()

可变&不可变的全局变量:

  -   函数中直接引用外部不可变的全局变量时,是只读的;
  -   如果引用的外部全局变量是可变类型(列表、字典),则可以对内部元素进行操作;
  -   如果想修改不可变类型的,就要加global关键字;
  -   如果在函数中定义了同名的局部变量同时又global关键字引用了外部的全局变量,则报错
  -    (个人意见)不要同时引用,变量名那么多,为什么硬要把自己搞的那么复杂,代码可读性那么差

注意,变量名定义规范:
  - 全局变量名一律大写;
  - 局部变量名一律小写;

#引用外部全局变量

name="abc"

def test1():
print("name是:",name) test1()

#操作外部可变类型的变量

name=["abc","ZZZ"]
def test1():
name.append("CCC") #当全局变量是可变类型时,无需加global关键字,要谨慎这种操作
print(name) test1()
返回结果:
['abc', 'ZZZ', 'CCC']

#修改外部可变类型的全局变量

name=["abc","ZZZ"]
def test1():
name.append("CCC")
name[0]="KKK"
print(name) test1()
返回结果:
['KKK', 'ZZZ', 'CCC']

#内部定义之后同时引用外部全局变量,会报错

name=["abc","ZZZ"]
def test1():
name=[1,2,3]
global name
print(name) test1()
返回结果:
SyntaxWarning: name 'name' is assigned to before global declaration
global name
[1, 2, 3]

函数嵌套中引用外部全局变量,同时定义同名内部变量,要注意这期间的变化;
下面的global引用的是最外层的全局变量,而非上层函数内的变量
例如:

name="python"

def test1():
name="Java"
def test2():
global name
name="C++"
test2()
print(name) #注意这里的name仍旧是test1函数里的name print(name)
test1()
print(name)
返回结果:
python
Java
C++

nonlocal关键字:
  -   指定上一级变量;
  -   非引用全局变量;
例如:

name="python"

def test1():
name="Java"
def test2():
nonlocal name #引用上一级函数内的name
name="C++" #修改上一级函数中的name
test2()
print(name) print(name)
test1()
print(name)
返回结果:
python
C++
python

python之全局变量与局部变量的更多相关文章

  1. python中全局变量和局部变量的一个小坑

    python 中全局变量和局部变量在使用过程中的一个容易出错的地方 什么是全局变量 python中,在函数外部声明的变量可以叫做全局变量. x = 10 def fn1(): pass fn1() 什 ...

  2. python之全局变量和局部变量

    一.定义 1.全局变量 定义在函数外部一级代码的变量,叫全局变量,全局能用. 2.局部变量 定义在函数内的变量,只能在局部生效 二.用法 1.在函数内部可以引用全局变量,如果全局和局部都有一个变量na ...

  3. python中全局变量和局部变量

    例1: a = 100 #定义全局变量a def test1(): print(a) #此处a为全局变量 def test2(a):#此处a为局部变量 print(a)#此处a为局部变量 test1( ...

  4. python函数 全局变量和局部变量

    li1=[1,2,3,4,5] str1='abc' def func1(): li1=[7,8,9] str1='efg' print(str1) func1() print(li1)#输出的结果为 ...

  5. Python之路 day3 全局变量、局部变量

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 全局与局部变量 在子程序中定义的变量称为局部变 ...

  6. python函数的 全局变量与局部变量

    一.函数的全局变量 1.什么是全局变量 顶着头开始写,没有任何缩进,在py文件的任何位置都能调用 #!/usr/bin/env python # _*_ coding:utf8 _*_ name=&q ...

  7. python开发_python中的变量:全局变量和局部变量

    如果你在为python中的变量:全局变量和局部变量头疼,我想这篇blog会给你帮助 运行效果: 代码部分: #Python中的变量:全局变量和局部变量 #在很多语言中,在声明全局变量的时候,都喜欢把全 ...

  8. Python之路Python全局变量与局部变量、函数多层嵌套、函数递归

    Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...

  9. python基础:函数传参、全局变量、局部变量、内置函数、匿名函数、递归、os模块、time模块

    ---恢复内容开始--- 一.函数相关: 1.1位置参数: ef hello(name,sex,county='china'): pass #hello('hh','nv') #位置参数.默认参数 1 ...

随机推荐

  1. react的学习笔记

    React中几个核心的概念### 虚拟DOM(Virtual Document Object Model) + **DOM的本质是什么**:浏览器中的概念,用JS对象来表示 页面上的元素,并提供了操作 ...

  2. ECMAScript 6 新特性-set。const

    一.let命令是es6新增的特性,作用与var命令类似,声明变量,不同之处在于声明的变量的作用域为块级作用域.引入let后带来了很多新的特性. 1作用域,es5之前之后函数作用域和全局作用域,let的 ...

  3. Windows10最新更新破坏了PowerShell功能

    Java9%E6%8E%A5%E8%BF%91%E4%BA%A4%E4%BB%98%E6%97%A5%E6%9C%9F%E5%92%8C%E8%8C%83%E5%9B%B4%E5%AE%A1%E6%9 ...

  4. Exp3 免杀原理与实践 20164313

    基础 AV厂商检测恶意软件的三种主流方式: 基于特征码的检测 启发式恶意软件检测 基于行为的恶意软件检测 实现免杀就是防止恶意软件被这是三种方式找到.具体手段为: 改变特征码 改变行为 非常规恶意软件 ...

  5. @Override is not allowed when implementing interface method

    使用idea导入maven项目时 会出现如下报错 @Override从jdk1.5开始出现的,是用来标注方法重写:通常方法重写发生在继承父类,重写父类方法,或者实现接口,实现接口方法: @Overri ...

  6. 如何使用cloudflare的CDN加速网站隐藏网站IP

    原文:http://www.safecdn.cn/contact-zh/2018/12/cloudflare-cdn/1146.html 高防CDN:https://www.safeidc.cn/cd ...

  7. Java序列化相关

    java类实现serializable有什么好处或意义 一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的.因此如果要序列化某些类的对象,这些类就必须实现Ser ...

  8. 简单的PHP上传图片和删除图片示例代码

    分享一例简单的PHP上传图片和删除图片示例代码,很简单,适合初学的朋友参考,用来研究php上传图片还是不错的. 1.php上传图片: <?php if (!empty($_FILES[" ...

  9. python-day7-静态方法、类方法、属性方法、特殊成员方法、反射、异常处理、socket

    @特殊方法.异常处理.反射.socket @类 属性 实例变量 类变量 私有属性__var 方法 构造方法, 析构函数(python自带,不写也有,写了相当与重构) 私有方法 继承 继承 组合 @7. ...

  10. ActiveMQ(4)---ActiveMQ原理分析之消息消费

    消费端消费消息的原理 我们通过上一节课的讲解,知道有两种方法可以接收消息,一种是使用同步阻塞的MessageConsumer#receive方法.另一种是使用消息监听器MessageListener. ...