函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用
一 函数的名称空间
- 内置空间:存放python解释器内置函数的空间
- 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失.
- 局部空间:函数定义时,会记录下函数名与函数体的对应关系(什么都没有,只要内存地址,只有执行时才会在内存中临时开辟一个临时空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失)
加载顺序:内置空间 > 全局空间 > 局部空间
取值顺序:局部空间 > 全局空间 > 内置空间
作用域
全局作用域:内置空间 + 全局空间
局部作用域:局部空间
二 函数的嵌套
只要遇到变量名()就是函数的调用,没有()就不是函数的调用
函数调用执行后,函数体中开辟的空间就自动销毁了
2.1 嵌套
def func():
a = 1
def foo():
b = 2
print(b) # 2
print(a) # 1
def f1():
print(b) # 2
return f1()
return foo()
print(func())
结果:
2
1
2
None
局部空间里的变量就近使用上一级空间和全局空间里的变量,两个并列局部空间里的变量不能相互使用
2.2 函数互相引用
def a():
a = 1
c()
print(c)
def c():
c = 3
print(a)
def run():
a()
run()
结果:
<function a at 0x0000000002101E18>
<function c at 0x00000000025B98C8>
输出的是定义函数a\c的内存地址,并列的内置空间里的变量不能相互使用
2.3 global 和 nonlocal
1. global 只修改全局变量对应的值
a = 10
def func():
global a # 声明修改全局变量的值
a += 1
print(a)
func()
print(a)
结果:
11
11
在函数内部修改全局的变量,如果全局中不存在就创建一个变量
lst = ["麻花藤", "刘嘉玲", "詹姆斯"]
def func():
lst.append("马云") # 对于可变数据类型可以直接进行访问
print(lst)
func()
print(lst)
结果:
['麻花藤', '刘嘉玲', '詹姆斯', '马云']
['麻花藤', '刘嘉玲', '詹姆斯', '马云']
2. nonlocal 就近修改局部空间的变量值,不会修改全局空间的变量值
a = 10
def func():
def f1():
a = 20
def foo():
nonlocal a
a += 1
print(a) # 21
foo()
print(a) # 21
f1()
func()
print(a) # 10
输出:
21
21
10
三 函数名的运用
函数名的内存地址
print(func)
函数名可以赋值给其他变量
函数名可以当做函数的参数去传递
注意点:传递函数名的时候如果+()就是在传递这个函数的返回值
函数名可以当做函数的返回值被返回
函数名可以当做元素存放在一个容器里
函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用的更多相关文章
- 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结
03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...
- day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义
复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...
- CSIC_716_20191111【函数对象、名称空间、作用域、global 和nonlocal】
函数名是可以被引用,传递的是函数的内存地址.函数名赋值给变量后,只需要在变量后加上括号即可调用函数. 名称空间 内置名称空间:在python解释器中提前定义完的名字 全局名称空间:if.while.f ...
- Day 10 动态参数&名称空间,局部全部.函数嵌套&global nonlocal关键字.
一.动态参数#形参 有3种动态参数#*args 动态参数,不定长参数def func (*args): print(args,type(args))func(1,2,"alex", ...
- python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。
1.动态参数的作用: 能够接收不固定长度参数 位置参数过多时可以使用动态参数 * args是程序员之间约定俗称(可以更换但是不建议更换) * args获取的是一个元组 ** kwargs获取的是一个字 ...
- python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套
复习 1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用: # 字符串的比较# -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...
- python基础之函数参数,名称空间,以及函数嵌套
函数进阶内容梗概: 1. 函数参数--动态传参 2. 名称空间, 局部名称空间, 全局名称空间, 作⽤用域, 加载顺序. 3. 函数的嵌套 4. gloabal , nonlocal 关键字 1. 函 ...
- python 函数的名称空间及作用域
一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...
- python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal
⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...
随机推荐
- linux脚本判断当前的linux版本是6还是7
#!/bin/sh version="release 7." release=$(cat /etc/redhat-release) echo $release result=$(e ...
- Android studio将一个项目作为module导入另一个项目
有两个Android项目,一个为pozhudl,一个为app,现在欲将pozhudl项目作为module导入到app中,并调用pozhudl项目中的类 先在pozhudl项目的build.gradle ...
- Data Management Technology(1) -- Introduction
1.Database concepts (1)Data & Information Information Is any kind of event that affects the stat ...
- 如果不配https访问权限,可以用 .htaccess 搞定
.htaccess 此文件存放在,网站程序根目录下# 只允许通过域名形式访问 RewriteEngine On RewriteBase / rewritecond %{http_host} !^www ...
- CPU相关概念
整部主机的重点在于中央处理器 (Central Processing Unit, CPU),CPU 为一个具有特定功 能的芯片, 里头含有微指令集,如果你想要让主机进行什么特异的功能,就得要参考这颗 ...
- Centos7更新阿里云的yum源
1.进入yum文件夹 cd /etc/yum.repos.d/ 2.下载阿里云源 wget "http://mirrors.aliyun.com/repo/Centos-7.repo&quo ...
- 201871010102-常龙龙《面向对象程序设计(java)》第十四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- ccf再卖菜
https://blog.csdn.net/imotolove/article/details/82777819 记忆化搜索,还不太理解..
- 80%应聘者都不及格的JS面试题
共 5024 字,读完需 6 分钟,速读需 2 分钟,本文首发于知乎专栏前端周刊.写在前面,笔者在做面试官这 2 年多的时间内,面试了数百个前端工程师,惊讶的发现,超过 80% 的候选人对下面这道题的 ...
- 打印从1到最大的n
题目:输入数字n,按顺序打印出从1到最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数999 需考虑大数问题 #-*-coding:utf-8-*- class print_N: d ...