Python基础-变量作用域

1.函数作用域介绍

Python基础-变量作用域

 

函数作用域

Python中函数作用域分为4种情况:

  • L:local,局部作用域,即函数中定义的变量:
  • E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的。
  • G:global,全局变量,即模块级别定义的变量,在模块开始、函数外定义的变量。
  • B:built-in,系统固定模块里的变量,比如int,bytearray等。

搜索变量的优先级顺序依次是:局部作用域 > 外层作用域 > 当前模块中全局作用域 > python内置作用域,也就是

L > E > G > B

实例说明:

Python基础-变量作用域

 

2.作用域产生

Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的,如下代码:

  • if 2 > 1 :
  • x = 2
  • print(x) #2

if并没有引入一个新的作用域,x仍处在当前作用域中,后面代码可以使用。

  • def test():
  • x = 2
  • print(x) # NameError: name 'x' is not defined

def、class、lambda是可以引入新作用域的。

3.global关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下,代码如下:

age = 22
def change_age() :
global age # 声明一个age全局变量
print( '修改前: %s',age)
age = 24
print(' 修改后: %s', age )
change_age()
# 修改前:22
#修改后 :24

4. nonlocal关键字

global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量怎么办呢,这时就需要nonlocal关键字了。

def outer():
count = 10
def inner():
nonlocal count
print('修改前:%s',count)
count = 20
print('修改后:%s ' ,count)
inner()
print(count)
outer()
#修改前:10
#修改后:20
#20

 

5.小结:

(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;

(2)只有模块、类、及函数才能引入新作用域;

(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;

(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字,nonlocal是python3新增的关键字。

转载于:https://www.cnblogs.com/jiangzhaowei/p/9045465.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php爱奇艺筛选标签,三种排序 快速筛选好视频_软件资讯技巧应用-中关村在线

使用在线视频播放器来观看视频,通常有可以分为有目标和无目标两种。即是用户如果定点找一部视频和随意查看喜欢的视频,这两种模式往往查找视频的方法也是不一样的。我们这里要和大家讲解的是,用户在没有目标视频的情况下,怎样更快…

Flask项目--发送短信验证码

1.后端代码 具体代码如下&#xff1a; # GET /api/v1.0/sms_codes/<mobile>?image_codexxxx&image_code_idxxxx api.route("/sms_codes/<re(r1[34578]\d{9}):mobile>") def get_sms_code(mobile):"""获取短信验证码""&q…

Jenkins系列之五——通过Publish over SSH插件实现远程部署

Jenkins通过Publish over SSH插件实现远程部署 步凑一、配置ssh免秘钥登录 部署详情地址&#xff1a;http://www.cnblogs.com/Dev0ps/p/8259099.html 步凑二、安装Publish over SSH插件 插…

php柱状图实现年龄分布,考官雅思写作小作文满分范文 柱状图:年龄分布

考官雅思写作小作文满分范文 柱状图:年龄分布2017年06月12日14:48 来源&#xff1a;小站教育作者&#xff1a;小站雅思编辑参与(40)阅读(63981)摘要&#xff1a;为大家分享前考官simon演示的9分雅思小作文。考官亲笔&#xff0c;用最正统的4段式写作&#xff0c;本文主题-柱状图…

Flask项目--注册

0.效果展示 1.后端代码 # coding:utf-8from . import api from flask import request, jsonify, current_app, session from ihome.utils.response_code import RET from ihome import redis_store, db, constants from ihome.models import User from sqlalchemy.exc import I…

图片处理

//图片处理public function img(){//读取图片$imageImage::open(./img/02.jpg);//dump($image);//获取图片的信息// 返回图片的宽度$width $image->width();// 返回图片的高度$height $image->height();// 返回图片的类型$type $image->type();// 返回图片的mime类…

数据流图 系统流程图 程序流程图 系统结构图联系与区别

1.数据流图&#xff08;Data Flow Diagram&#xff09;&#xff0c;简称DFD&#xff0c;它从数据传递和加工角度&#xff0c;以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程&#xff0c;是结构化系统分析方法的主要表达工具及用于表示软件模型的一种…

迄今为止最快的 JSON 序列化工具 Jil

2019独角兽企业重金招聘Python工程师标准>>> 迄今为止最快的 JSON 序列化工具 Jil https://github.com/kevin-montrose/Jil 转载于:https://my.oschina.net/xainghu/blog/1621365

mysql数据库访问编程,mysql 连接数据库

1、首先启动mysql 并链接数据 小意思吧&#xff01;都会了是吧mysql -uroot -p //连接数据net start mysql // 启动mysql2、查询当前 服务器里有哪些数据show databases;3、创建数据库create database jddb -------数据库名字(jddb)4、 使用数据库use jddb;5、查询当前数据库下…

Flsak爱家租房--个人信息

0.页面展示效果 1.设置用户头像–后端代码 # coding:utf-8from . import api from ihome.utils.commons import login_required from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.utils.image_storage impo…

C++ string::size_type

从逻辑上讲&#xff0c;size()成员函数应该似乎返回整型数值&#xff0c;但事实上&#xff0c;size操作返回是string::size_type类型的值。string类类型和其他许多库类型都定义了一些配套类型(companion type)。通过这些配套类型&#xff0c;库函数的使用就与机器无关(machine-…

Flsak爱家租房--实名认证

0.页面展示效果 1.设置用户实名认证信息–后端代码 api.route("/users/auth", methods["POST"]) login_required def set_user_auth():"""保存实名认证信息"""user_id g.user_id# 获取参数req_data request.get_json()if …

php把语音转成帧,[转载]用TCP/IP实现自己简单的应用程序协议:成帧器部分

在前面《字节和字符,对信息进行编码》&#xff0c;《Socket>流&#xff0c;TCP连接,TCP可靠性概述》一系列的随笔中我们已经表述了相应的理论知识&#xff0c;现在可以动手实现一个自己的应用程序协议。将 数据转换成在线路上传输的字节序列只完成了一半的工作&#xff0c;在…

实体联系图简介

通常&#xff0c;使用实体联系图(entity relationship diagram)来建立数据模型。可以把实体联系图简称为ER图&#xff0c;相应地可把用ER图描绘的数据模型称为ER模型。 ER图中包含了实体(即数据对象)、关系和属性3种基本成分&#xff0c;通常用矩形框代表实体&#xff0c;用连…

Flask爱家租房--城区信息

0.效果展示 城市列表使用缓存的过程 1.后端代码 # coding:utf-8from . import api from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.models import Area, House, Facility, HouseImage, User, Order from …

数值计算算法-多项式插值算法的实现与分析

数值计算是指在数值分析领域中的算法。数值分析是专门研究和数字以及近似值相关的数据问题&#xff0c;数值计算在数值分析的研究中发挥了特别重要的作用。 多项式插值是计算函数近似值的一种方法。其中函数值仅在几个点上已知。 该算法的基础是建立级数小于等于n的一个插值多项…

Linux中断 - tasklet

一、前言 对于中断处理而言&#xff0c;linux将其分成了两个部分&#xff0c;一个叫做中断handler&#xff08;top half&#xff09;&#xff0c;属于不那么紧急需要处理的事情被推迟执行&#xff0c;我们称之deferable task&#xff0c;或者叫做bottom half&#xff0c;。具体…

数字电视制播设备间的文件交换格式

在现今的数字电视演播室中&#xff0c;设备之间基本上采用信号流连接方式&#xff0c;如SDI、STDI、模拟YUV、VBS等信号流。在非线性编辑系统和播出系统与服务器之间的连接&#xff0c;还有基于MPEG-2传输流等的信号连接方式。基于信号流连接方式的主要特点是&#xff0c;传送时…

oracle 位移运算符,Oracle“(+)”运算符

在Oracle中&#xff0c;()表示JOIN中的“可选”表。 所以在你的查询中&#xff0c;select a.id, b.id, a.col_2, b.col_2, ... from a,b where a.idb.id()这是一个左外加B表与一个表。 就像现代的左连接查询一样。 (它将返回a表的所有数据&#xff0c;而不会丢失在另一边的数据…