day15 名称空间与作用域
一、参数补充
1 命名关键字参数(了解)
命名关键字参数:在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数
特点1:命名关键字实参必须按照key=value的形式为其传值
def func(x,y,*,a,b):
print(x,y,a,b)
func(1,2,b=123,a=321)
#a和b必须用关键字实参传值不然报错
多形式混用:
#形参混用的顺序:位置新参,默认形参,*args,命名关键字形参,**kwargs
def func(x,y=111,*args,z,**kwargs):
print(x)
print(y)
print(args)
print(z)
print(kwargs)
func(1,2,3,4,z=13,a=123,b=123)
>>>1
>>>2
>>>(3, 4)
>>>13
>>>{'a': 123, 'b': 123}
二、名称空间
名称空间是指存放名字和对象的映射关系/绑定关系的地方,例如x=3,在内存中的栈区里开辟了一个空间来存放x和x与10的绑定关系,这个空间就是名称空间。
1.内置名称空间
存放的名字:存放的python解释器内置的名字
存活周期:python解释器启动则产生,python解释器关闭则销毁
'''
>>> print
<built-in function print>
>>> input
<built-in function input>
'''
2.全局名称空间
存放的名字:只要不是函数内定义,也不是内置的,就是全局名称
存活周期:python文件执行则产生,关闭则销毁
import os #os为全局名称
x=10 #x是全局名称
if True:
y=10#y是全局名称
def func():#func是全局名称
pass
class Foo:#Foo是全局名称
pass
3.局部名称空间
存放的名字:在函数调用时,运行函数体代码的过程中产生的函数内的名字
存活周期:在调用函数时存活,函数调用完毕后则销毁
def func(x,y):
z=10
func(1,2)
4.名称空间的加载与销毁顺序
加载顺序
内置名称空间>全局名称空间>局部名称空间
销毁顺序
局部名称空间>全局名称空间>内置名称空间
名字的查找顺序
由当前位置向上一层查找
由内到外依次是局部名称空间>全局名称空间>内置名称空间
通过示范来解释名称空间的嵌套使用
注意:名称空间的嵌套关系是以函数定义阶段为准,和调用位置无关
实例1:
x=1
def func(): #第五步:执行func函数体代码
print(x) #输出x,在该名称空间找不到x,搜索全局名称空间查找到x=1
def foo(): #第二步:执行foo函数体代码
x=222 #第三步:执行第一行,定义局部变量x=10
func() #第四步:调用func函数,foo函数到此结束,销毁内部的局部变量,即x=10
foo() #第一步:调用foo函数
>>>1 #第六步:执行代码得到1
实例2:
x=10
#此处报错是因为在函数定义阶段违反了变量先定义后引用的规则
def foo():
print(x)
x=20
foo()
>>>报错
三、作用域
即名称空间的作用范围
全局作用域:内置名称空间,全局名称空间
1.全局存活
2.全局有效,被所有函数共享
x=111
def foo():
print(x,id(x))
def bar():
print(x,id(x))
foo()
bar()
>>>111 140717457109072
>>>111 140717457109072
>>>111 140717457109072
局部作用域:局部名称空间
1.临时存活
2.局部有效,函数内有效
def foo(x):
def f1():
def f2():
print(x)
f2()
f1()
foo(1)
示范1:(global)如果想在局部里修改全局对应的变量值(不可变类型),就需要用到global
x=111
def func():
global x # 声明x这个名字是全局的名字,不要再造新的名字了
x=222
func()
print(x)
示范2:(nonlocal)修改函数外层函数包含的不可变类型
x=0
def f1():
x=11
def f2():
nonlocal x#让接下来的x=22作用在外层函数
x=22
f2()
print('f1内的x:',x)
f1()
print(x)
>>>f1内的x: 22
>>>0
day15 名称空间与作用域的更多相关文章
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域
一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...
- Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)
今日主要内容 1. 函数默认值细节(*) 2. 数据类型补充:三元表达式.列表推导式.字典推导式 (***) 3. 函数对象:函数名的各种应用场景 (*****) 4. 名称空间与作用域:解释 ...
- day12(表达式,推导式,名称空间与作用域,函数的嵌套定义)
一,复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascll进行比较 # print('a' > 'A') #True # print('ac' > 'ab' ...
- python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义
复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...
- day12 函数对象,名称空间与作用域
""" 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...
- 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数
一.函数的对象 函数是第一类对象,指的是函数名指向的值(函数)可以被当作数据去使用 def func():# func=函数的内地址 print('from func') print(func) ag ...
- python之函数对象、函数嵌套、名称空间与作用域、装饰器
一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if de ...
- 周末学习笔记——day01(函数,函数对象,嵌套调用,名称空间,作用域,闭包,装饰器)
一,复习 字符编码 文件头:py2—ASCII,py3—UTF-8 三种字符串:u' ' b ' ' r ' ' u' ' .endcode(' utf-8 ') b' '.deconde(' utf ...
- day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义
复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...
随机推荐
- 将XML转换为JSON并强制数组
string xml = @"<person id='1'> <name>Alan</name> <url>http://www.google ...
- node实现批量修改图片尺寸
前言 大家在工作中肯定有没有遇到过图片尺寸和我们要求的尺寸不一致的情况吧?通常我们会在网上找一下找在线的或者下载一个小工具,再或者通过ps的批处理解决.但是,作为程序猿,当然还是通过代码来解决这种小问 ...
- @gym - 100591D@ Fox Rocks
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 个点以及 P 条单向道路 Ai -> Bi,每条 ...
- C语言中main函数的参数argc和argv
参考资料: http://wiki.opencv.org.cn/index.php/Main%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0argc%EF%BC%8Cargv% ...
- RocketMQ系列(七)事务消息(数据库|最终一致性)
终于到了今天了,终于要讲RocketMQ最牛X的功能了,那就是事务消息.为什么事务消息被吹的比较热呢?近几年微服务大行其道,整个系统被切成了多个服务,每个服务掌管着一个数据库.那么多个数据库之间的数据 ...
- Windows程序设计(2) - API-02 文件系统
一.磁盘分区的基本概念 1.磁盘分区(Patitions): 分区就是物理存储设备分割成多个不同的逻辑上的存储设备.分区从实质上说就是对硬盘的一种格式化.当我们创建分区时,就已经设置好了硬盘的各项物理 ...
- 多语言工作者の十日冲刺<2/10>
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第二天(05.01) 作业正文 ...
- 15.DRF-分页
Django rest framework(6)----分页 第一种分页 PageNumberPagination 基本使用 (1)urls.py urlpatterns = [ re_path('( ...
- 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据
1.内容提供者是让当前的app的数据可以让其他应用访问,其他应该可以通过内容提供者访问当前app的数据库 contentProvider的主要目的是提供一个开发的接口,让其他的应该能够访问当前应用的数 ...
- 3.尚硅谷_MyBatis_HelloWorld.avi
CREATE TABLE `tbl_employee` ( `id` int(11) NOT NULL AUTO_INCREMENT, `last_name` varchar(255) DEFAULT ...