一、参数补充

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 名称空间与作用域的更多相关文章

  1. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  2. Python--day12(三元表达式、函数对象、名称空间与作用域、函数嵌套定义)

    今日主要内容 1.  函数默认值细节(*) 2.  数据类型补充:三元表达式.列表推导式.字典推导式 (***) 3.  函数对象:函数名的各种应用场景 (*****) 4.  名称空间与作用域:解释 ...

  3. day12(表达式,推导式,名称空间与作用域,函数的嵌套定义)

    一,复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascll进行比较 # print('a' > 'A') #True # print('ac' > 'ab' ...

  4. python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义

    复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...

  5. day12 函数对象,名称空间与作用域

    """ 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...

  6. 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数

    一.函数的对象 函数是第一类对象,指的是函数名指向的值(函数)可以被当作数据去使用 def func():# func=函数的内地址 print('from func') print(func) ag ...

  7. python之函数对象、函数嵌套、名称空间与作用域、装饰器

    一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if de ...

  8. 周末学习笔记——day01(函数,函数对象,嵌套调用,名称空间,作用域,闭包,装饰器)

    一,复习 字符编码 文件头:py2—ASCII,py3—UTF-8 三种字符串:u' ' b ' ' r ' ' u' ' .endcode(' utf-8 ') b' '.deconde(' utf ...

  9. day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义

    复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...

随机推荐

  1. 用于实现tab页签切换页面的angular路由复用策略

    使用场景 打开菜单页面的时候,出现对应页面的页签.切换页签,原来的页面信息状态保留,关闭页签则保留的信息删除.使用路由复用策略,保存路由快照.实现效果如图所示 实现过程 概述: 1.在app.modu ...

  2. synchronized 和 java.util.concurrent.locks.Lock 的异同 ?

    主要相同点:Lock 能完成 synchronized 所实现的所有功能 主要不同点:Lock 有比synchronized 更精确的线程语义和更好的性能. synchronized 会自动释放锁,而 ...

  3. Cypress系列(18)- 可操作类型的命令 之 点击命令

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 啥是可操作类型?就是可以和 DOM ...

  4. C# 9.0 新特性之参数非空检查简化

    阅读本文大概需要 1.5 分钟. 参数非空检查是缩写类库很常见的操作,在一个方法中要求参数不能为空,否则抛出相应的异常.比如: public static string HashPassword(st ...

  5. (八)easyexcel的使用

    使用手册:https://www.yuque.com/easyexcel/doc/easyexcel 主要注意的点就是修改监听器为通用的监听器 原监听器: package read; import j ...

  6. os.remove() 删除文件

    概述 os.remove() 方法用于删除指定路径的文件.如果指定的路径是一个目录,将抛出OSError. 在Unix, Windows中有效 语法 remove()方法语法格式如下: os.remo ...

  7. 解决错误【selenium.common.exceptions.SessionNotCreatedException】

    以前能用,突然不能用了,是浏览器版本可能升级了,与原来的weddriver驱动版本不符合 解决办法:1.更新浏览器驱动, 2.降低浏览器版本

  8. 怎样在LaTeX中使用中文

    因为疫情在家中上课,作业提交都必须使用PDF.反正时间充裕,不如趁机回顾一下LaTeX的使用. 之前一直用的是Vimtex,但是感觉还是不太方便,于是改用了Texpad.Texpad的强大之处在于它支 ...

  9. Android学习笔记通过Toast显示消息提示框

    显示消息提示框的步骤 这个很简单我就直接上代码了: Button show = (Button)findViewById(R.id.show); show.setOnClickListener(new ...

  10. 【JMeter_11】JMeter逻辑控制器__Switch控制器<Switch Controller>

    Switch控制器<Switch Controller> 业务逻辑: 取得switch value的值,通过对节点下所有取样器.逻辑控制器的下标.名称匹配去执行,switch value的 ...