python基础-函数作用域
函数
函数对象
- 函数是第一类对象
- 函数名可以被引用
- 函数名可以当作参数使用
- 函数名可以当作返回值使用
- 函数名可以当作容器类型的元素
函数嵌套
嵌套调用:在函数内部中调用函数
嵌套定义:在函数内部中定义函数
名称空间
存放变量名称的空间,分为内置名称空间、全局名称空间、局部名称空间
内置名称空间:python中,提前定义的名字,存在内置名称空间中。例如:关键字、内置方法
全局名称空间:存放于文件级别的名字,就是全局名称空间
if / while / for 内部定义的名字,在执行之后都存放于全局名称空间
# if 的示例:
var = 4
if var > 5:
var = "var 大于5"
else:
var = "var 小于等于5"
print(var) # 打印结果:var 小于等于5 # while 的示例:
num = 0
while num <= 3:
num += 1
print(num) # 打印结果:4 # for 的示例
for i in range(2):
pass
print(i) # 打印结果:1
局部名称空间:函数内部定义的所有名字都是存放于当前函数的内置名称空间
如果想访问一个变量值,必须先访问对应的名称空间,获取到该变量的名称以及名称和值内存地址之间的关系。
生命周期
- 内置名称空间:python 解释器启动时生效,关闭时失效
- 全局名称空间:当前python文件执行生效,执行结束后失效
- 局部名称空间:函数调用时生效,函数体代码结束时失效
查找顺序
局部名称:局部 → 全局 → 内置函数
全局名称:全局 → 内置
内置再找不到就会报错
函数内部使用的名字,在定义阶段已经规定死了,与调用位置无关
作用域
全局作用域:全局可以调用的名字存在于全局作用域。内置名称空间和全局名称空间属于此处
局部作用域:局部可以调用的名字存在于局部作用域。局部名称空间属于此处
global:将局部名称空间的变量声明成全局变量
注意:global需要在函数内部声明,若在函数外声明,则函数依然无法操作
# 这种情况不能修改x1的值
x1 = 1
def func1():
x1 = 2
func1()
print(x1) # 打印结果:1 # 使用global 后,可以修改x2的值
x2 = 1
def func2():
global x2 # 先声明成全局变量
x2 = 2
func2()
print(x2) # 打印结果:2 # global 若在函数外声明,无法操作变量
global x3
x3 = 1
def func2():
x3 = 2
func3()
print(x3) # 打印结果:1
nonlocal:在局部名称空间声明局部变量。
nonlocal 声明后的变量会从当前函数的外层函数开始一层层去查找该变量。若是一直到最外层函数都找不到,则会抛出异常。
def f3():
x = 4
def f1():
y = 2
def f2():
nonlocal x
x = 3
f2() # 调用f2(),修改f1作用域中名字x的值
print(x) # 在f1作用域查看x。打印结果:3
f1()
print(x) # 打印结果:3
f3()
def f3():
x = 4
def f1():
x = 2
def f2():
nonlocal x
x = 3
f2() # 调用f2(),修改f1作用域中名字x的值
print(x) # 在f1作用域查看x。打印结果:3
f1()
print(x) # 打印结果:4
f3()
python基础-函数作用域的更多相关文章
- python基础—函数嵌套与闭包
python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间 内置在解释器中的名称 2 全局名称空间 顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...
- Python基础-函数参数
Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...
- python基础,函数,面向对象,模块练习
---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? # [] {} () None 0 2,位和字节的关系? # ...
- python基础——函数的参数
python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...
- python基础—函数装饰器
python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...
- Python基础-变量作用域
1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局 ...
- Python基础-作用域和命名空间(Scope and Namespace)
在Python中,对象是独立的,不同作用域中的不同名字都可以被绑定在同一个对象上,当然对这个对象的修改会影响所有的引用.赋值操作就是名字和对象的绑定或重绑定.这和C++中的引用是一样的. 1,基础概念 ...
- Python基础-函数篇
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 函数与函数式编程 1.面向对象: 华山派-- ...
- 第三章:Python基础の函数和文件操作实战
本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...
随机推荐
- 【Java】后台将文件上传至远程服务器
问题:由于系统在局域网(能访问外网)内,但外网无法请求局域网内服务器文件和进行处理文件. 解决:建立文件服务器,用于存储文件及外网调用. 客户端(文件上传): package cn.hkwl.lm.u ...
- Nebula 架构剖析系列(零)图数据库的整体架构设计
Nebula Graph 是一个高性能的分布式开源图数据库,本文为大家介绍 Nebula Graph 的整体架构. 一个完整的 Nebula 部署集群包含三个服务,即 Query Service,S ...
- 数据的异构实战(一) 基于canal进行日志的订阅和转换
什么是数据的异构处理.简单说就是为了满足我们业务的扩展性,将数据从某种特定的格式转换到新的数据格式中来. 为什么会有这种需求出现呢? 传统的企业中,主要都是将数据存储在了关系型数据库中,例如说MySQ ...
- 两种高效的事件处理模型:Reactor模式和Proactor模式
随着IO多路复用技术的出现,出现了很多事件处理模式.同步I/O模型通常由Reactor模式实现,而异步I/O模型则由Proactor模式实现. Reactor模式: Reator类图如上所示,Reac ...
- VUE--插值的操作
一.vue常见的指令 v-once:保留第一次渲染结果 v-html :把html代码解析,只显示内容 v-pre :原样输出 v-cloak :解决文本闪烁问题 v-text :显示文本 二.v-b ...
- 记录JS如何使用广度遍历找到节点的所有父节点
我们在实际的工作业务场景中经常遇到这样的场景,求取树数据中某个节点的父亲节点以及所有的父亲节点,这样的场景下不建议使用深度遍历,使用广度遍历可以更快找到. 1.案例解说 比如树的长相是这样的: 树的数 ...
- Ubuntu安装scrcpy手机投屏和控制(Ubuntu用QQ微信的另一种方法)
Scrcpy 安装 snap install scrcpy adb服务安装 sudo apt-get install android-tools-adb adb配置 查看手机的USB识别号 手机通过U ...
- Bran的内核开发教程(bkerndev)-01 介绍
介绍 内核开发不是件容易的事,这是对一个程序员编程能力的考验.开发内核其实就是开发一个能够与硬件交互和管理硬件的软件.内核也是一个操作系统的核心,是管理硬件资源的逻辑. 处理器或是CPU是内核 ...
- thinkphp5框架笔记(ing)
重新整理下学习tp5手册的笔记.自己再好好看一次tp5的开发手册,学到哪里记到哪里. 0x01 安装 Composer安装 ThinkPHP5支持使用Composer安装 curl -sS https ...
- 实验吧之【拐弯抹角】(url伪静态)
题目地址:http://ctf5.shiyanbar.com/indirection/ 打开后给了源码 <?php // code by SEC@USTC echo '<html>& ...