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,一经查实,立即删除!

相关文章

视频源常见接口介绍

在录制和播放中,要通过接口实现文件的传输,下面介绍常用接口。 [AV IN/OUT/PHONES]:这是一个多功能的插孔,在菜单里可以设置其功能。当设置为[IN/OUT]时,此插孔可以输入和输出音频以及视频信号,用于连接电视…

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

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

TSAP传输服务访问点

TSAP(Transport Service Access Point) 传输服务访问点在计算机网络当中,传输层要在用户之间提供可靠和有效的端-端(如TSAP源端->[1]TSAP目的端的传输选择)服务,必须把一个用户进程和其他的用户进程区分开,主要由传…

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插件 插…

Java高级应用开发之Servlet

学习路径&#xff1a; 1.Servlet简介 2.Servlet基础 3.表单处理 4.请求头信息 5.响应头信息 6.cookie 7.session 8.scope: Servlet Context 全局变量 Http Session 会话变量 Http Servlet Request 请求变量 9.Filter Filter是一种特殊的Servlet&#xff0c;其核心函数doFilter(…

typedef 数组使用详解

typedef到处都是&#xff0c;但是能够真正懂得typedef使用的不算太多。对于初学者而言&#xff0c;看别人的源码时对到处充斥的typedef往往不知所错&#xff0c;而参考书又很少&#xff0c;所以在此给出一个源码&#xff0c;供大家参考。 懂得这些&#xff0c;基本上是 对typed…

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类…

react 项目总结

前言 最近在写一个项目,在写react的过程中遇到过很多坑,现在总结一下,为以后的项目作参考.另外借此项目来比较一下 vue.js 和 react.js 之间的一些异同. 先说说组件 刚刚开始写组件的时候&#xff0c;感觉难度不大&#xff08;跟vue差不多&#xff09;。最有意思的应该是jsx语法…

现代数字影视 电影使用标准

1、国际数字电影标准1&#xff09;DCI&#xff08;Digital Cinema Initiatives数字影院系统规范&#xff09;美国好莱坞七大制片公司——Disney、MGM、Fox、Paramount Pictures、Sony Pictures Entertainment、Universal Studios和Warner Bros于2002年联合成立了DCI机构&#x…

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

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

Linux--安装yum源

linux配置yum源 一、修改yum的配置文件 /etc/yum.repos.d/xxx.repo 1、进入yum配置文件目录 # cd /etc/yum.repos.d 2、删除全部原有的文件 # rm -rf * 3、新建一个yum的配置文件 # vi my.repo [myrepo] 标识配置文件名称&#xff08;名字随意&#xff09; namemyrepo 标识yum …

在 Confluence 6 中禁用 workbox 应用通知

如果你选择 不提供应用通知&#xff08;does not provide in-app notifications&#xff09;&#xff1a; Confluence workbox 图标将不会可见同时用户也不能在这个服务器上访问 workbox。这个 Confluence 服务器将不会发送消息到 workbox 中&#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、查询当前数据库下…

linux多线程 pthread用法

#include int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg); Returns: 0 if OK, error number on failure 第一个参数为指向线程标识符的指针。 第二个参数用来设置线程属性。 第三个参数是…

什么是数据字典

数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述&#xff0c;其目的是对数据流程图中的各个元素做出详细的说明。 数据字典最重要的作用是作为分析阶段的工具。任何字典最重要的用途都是供人查询对不了解的条目的解释&#xff0c…

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…