变量作用区域

变量器作用的额代码范围称为变量的作用与,不同作用区域之间互不影响,函数每部定义的变量一般为局部变量,而不属于任何函数的变量一般为全局变量。所以我们在这里按变量的作用区域分为两类,全局变量和局部变量。

局部变量:在某个函数内部定义,作用在函数内部。生命周期:从变量被创建开始到函数结束死亡。
全局变量:定义在.py模块内部,作用在整个.py模块。生命周期:从变量被创造开始到.py模块结束死亡。

案例1:

def Demo1():
num = 1
print(num) Demo1()
print(num) """
因为num是局部作用,所以在函数外面是找不到num这个变量的,
所以程序会报错:NameError: name 'num' is not defined
"""

  

案例2:

num = 0

def Demo1():
num = 1
print("在demo1中的结果:",num) def Demo2(): print("在demo2中的结果:",num) Demo1()
Demo2() print("在函数外面中的结果:",num)
"""
运行结果为:
在demo1中的结果: 1
在demo2中的结果: 0
在函数外面中的结果: 0
分析:
从结果可以看出,我们在demo1中num = 1,只在demo1内部起作用,而全局变量num仍然是0;因为在python中,在函数内部改变全局变量的值,会默认的在函数内部创建一个新的变量,全局变量并没有改变。要想要改变全局变量的值,需要在函数内部用global声明。 """
#修改上面如下
num = 0 def Demo1():
global num
num = 1
print("在demo1中的结果:",num) def Demo2(): print("在demo2中的结果:",num) Demo1()
Demo2() print("在函数外面中的结果:",num)
""'
运行结果为:
在demo1中的结果: 1
在demo2中的结果: 1
在函数外面中的结果: 1
"""

  

 案例3: 还有一种情况是当全局变量是可变数据类形,我们可以通过修改可变数据类型的方法,修改可变类型的内容,从而实现修改全局变量。(这里因为可变数据类型改变时,会在内存中改变数据的值)

num_list = [1,2,3]

def Demo1(demo1_list):
demo1_list.append(4)
print("在demo1中的结果:",demo1_list) def Demo2(): print("在demo2中的结果:",num_list) Demo1(num_list)
Demo2() print("在函数外面中的结果:",num_list) """
运行结果:
在demo1中的结果: [1, 2, 3, 4]
在demo2中的结果: [1, 2, 3, 4]
在函数外面中的结果: [1, 2, 3, 4]
"""

  

案例4:列表 += 与 + 的区别

+
num_list = [1,2,3] def Demo1(demo1_list):
demo1_list = demo1_list + [4,5,6]
print("在demo1中的结果:",demo1_list) def Demo2(): print("在demo2中的结果:",num_list) Demo1(num_list)
Demo2() print("在函数外面中的结果:",num_list)
执行结果:
在demo1中的结果: [1, 2, 3, 4, 5, 6]
在demo2中的结果: [1, 2, 3]
在函数外面中的结果: [1, 2, 3] +=:
num_list = [1,2,3] def Demo1(demo1_list):
demo1_list += [4,5,6]
print("在demo1中的结果:",demo1_list) def Demo2(): print("在demo2中的结果:",num_list) Demo1(num_list)
Demo2() print("在函数外面中的结果:",num_list)
结果:
在demo1中的结果: [1, 2, 3, 4, 5, 6]
在demo2中的结果: [1, 2, 3, 4, 5, 6]
在函数外面中的结果: [1, 2, 3, 4, 5, 6]  

因为:
对于+号操作,可变对象和不可变对象调用的都是__add__操作

对于+=号操作,可变对象调用__add__,不可变对象调用的是__iadd__(不可变对象没有__iadd__) __iadd__是原地修改。

python基础 — 局部变量/全局变量的更多相关文章

  1. python - 基础局部变量和全局变量

    python中全局变量和局部变量的最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问 首先我们来看下什么是全局变量和局部变量 全局变量:在函数之外定义的变量,所有函数内可以调用这个全局变量 ...

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

    #全局变量作用于全局或整个程序中,程序执行完毕后销毁,局部变量作用在当前函数中,调用函数执行完毕及销毁 #如果函数的内容无global关键字,优先读取同名局部变量,如果没有同名局部变量,只能读取同名全 ...

  3. python基础局部变量、全局变量

    局部变量的作用域只作用与当前函数块(或代码块)中,对函数块(或代码块)之外的重名变量,没有任何影响. 在函数块(或代码块)中,局部变量可用通过global关键字声明变量来改变在函数块(或代码块)之外对 ...

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

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

  5. Python 基础之返回值与函数使用与局部变量和全局变量locals() 和 globals()

    一.函数的返回值 return return: 自定义返回值,返回到哪里? 返回到函数的[调用处]1.return 后面可以跟上六个标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return ...

  6. python基础五(函数、全局变量和局部变量)

    一.全局变量和局部变量 全局变量,即可以在当前文件所有地方都可使用的变量,一次修改,整个文件都影响.如果函数体内部使用全局变量,要先声明global 局部变量,只能在函数体内部使用,除了函数体就不可使 ...

  7. 第十二篇 Python函数之全局变量&局部变量&递归函数

    全局变量:在定义的时候,顶头写的,没有任何缩进的变量就是全局变量. 全局变量的特点:在当前文件里的任何地方都可以进行调用 局部变量:在子程序里定义的变量,就是局部变量. 子程序:比如.py文件里,写的 ...

  8. 进击的Python【第三章】:Python基础(三)

    Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...

  9. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

随机推荐

  1. 使用Quasar设计Material和IOS风格的响应式网站

    使用Quasar设计Material和IOS风格的响应式网站 栏目: CSS · 发布时间: 8个月前 来源: segmentfault.com   本文转载自:https://segmentfaul ...

  2. jmeter使用教程

    jmeter是基于JVM(最新版本基于jdk8+)的压测工具包.提供了丰富的工具来设置压测计划,执行压测任务和生成压测报告. 我这边使用的是windows10平台. 整个流程如下: 1.下载jmete ...

  3. 开源项目 03 DocX

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. 洛谷 P4071 [SDOI2016]排列计数 题解

    P4071 [SDOI2016]排列计数 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳 ...

  5. 验证和交叉验证(Validation & Cross Validation)

    之前在<训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)>一文中已经提过对模型进行验证(评估)的几种方式. ...

  6. GoCN每日新闻(2019-10-08)

    GoCN每日新闻(2019-10-08) <premenlo';font-size:9.0pt;">GoCN每日新闻(2019-10-08) 1. Go 构建高性能数据库中间件: ...

  7. python爬虫中XPath和lxml解析库

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  8. 【docker】 yaml.scanner.ScannerError: mapping values are not allowed here in "./docker-compose.yml", line 60, column 35

    在启动docker-compose 时候 报错了 命令: docker-compose up -d && docker-compose logs -f 错误代码: 解决 出现这个错误的 ...

  9. matlab学习笔记11_2高维数组操作 squeeze,ind2sub, sub2ind

    一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind 觉得有用的话,欢迎一起讨论相互学习~Follow Me squeeze ...

  10. httpcomponent框架MultipartEntityBuilder addTextBody中文乱码

    版本4.5.6 String url = "https://172.16.3.50:8111/api/tts/offline"; HttpPost httpPost = new H ...