美文网首页
day13 函数嵌套 定义 作用域 名称空间 * 与 ** 应用

day13 函数嵌套 定义 作用域 名称空间 * 与 ** 应用

作者: 荭鲤鱼与緑鲤鱼与驴 | 来源:发表于2020-07-20 21:29 被阅读0次

Ⅰ  函数的可变长参数

    在形参中*与**的应用

    *  站在实参的角度:可变长指的是参数的个数不固定,如果参数的个数不固定,那么形参对应着要有能够接受溢出实参的功能;在形参名前面加*:那么*会把多余的位置实参存成元组,然后赋值给其后的形参名:

* 号的形参应用,y接收了4个参数

同时:func(1)  可以只传给x一个值,也就是说*y可以不被传值,但是x必须被传值

    **  在形参名前加** :  会把多余的关键字实参存成字典,然后赋值给气候的形参名:

这里需要注意 ** 只能接受关键字实参;或者不传值,那么输出的就是空字典

    在实参中用*与**

    在实参前加*:会把其后的值打散成位置实参(所有可以被for循环的都可以在前面加*):

需要注意:形参和实参内的元素需要对应,不能多也不能少

    在实参后面加**:会把其后的值打散成关键字实参(只能是字典(就目前水平)):

可以看出字典内的顺序和形参的顺序并不对应,单是值都是相同的,这就是昨天讲到的关键字实参传值

    形参与实参中混用*与**

    python中*后面默认跟args变量名,**后面跟kwargs:

总结来说: * 搭配形参就是压缩操作,  * 搭配实参就是解压操作

        命名关键字形参:在def func(x,y=222,*args,n=777,m,**kwargs):  需要注意的是默认形参只有一个y=222; 在*与**之间的n=777和m都属于关键字形参(不再属于默认形参和位置形参),只能使用关键字的方式进行传值:

其中n可以不被传值,因为形参定义有值,m必须使用关键传值,否则会报错

Ⅱ  函数对象

    函数对象指的是函数可以被当成变量去使用:

函数foo就等于foo的内存地址,可以直接打印foo函数就得到了他的内存地址

    函数可以被当成变量赋值给变量名:

可以将函数foo赋值给变量名f ,我们打印 f 会得到foo的内存地址

    函数可以被当作参数传给另一个函数:

我们将函数foo当作值传给函数res,然后我们打印res收到的值,得到是发foo的内存地址

    还可以当成一个函数的返回值:

我们将foo作为值传入res,然后res返回一个值到res(foo) ,我们将这个值赋值给变量名 a;a加() 运行了foo,证明了foo是和a同一个值

    函数可以当成容器类型的元素:

Ⅲ  函数的嵌套

    函数的嵌套调用:

调用foo;打印了foo的结果,然后调用func,再打印func

    函数的嵌套定义:

定义在函数内的函数特点:正常情况下只能在函数体内调用

Ⅳ  名称空间:就是存放名字的地方

    内置名称空间

    存放的是内置的名字如:print\input\len;生命周期:解释器启动则产生,解释器关闭则销毁

    全局名称空间

    存放的是顶级的名字(顶级的代码);生命周期python程序运行时则产生,python程序结束则销毁:

x=10在全局空间;x=111属于局部空间,所以打印x时输出的是局部空间的111

    局部名称空间

    函数内的名字;生命周期:调用函数时则产生,函数调用结束则销毁:

报错:在x赋值之前引用x(同在局部空间),如果将局部空间的赋值去掉,那么会正长打印全局变量10

名称的查找优先级

    从当前位置往外查找,如果当前在局部:局部==>全局==>内置

    从当前位置往外查找,如果当前在全局:全局==>内置

名称空间可以理解为一层套一层的关系,问题是其那套关系是在函数定义阶段成成的还是在调用阶段生成的????

    结论:名称空间的嵌套关系是函数定义阶段(及扫描语法时),就固定死的,与函数的调用位置无关

Ⅴ  作用域

    全局范围\全局作用域:内置名称空间+全局名称空间;特点:全局存活,全局有效

    局部范围\局部作用域:局部名称空间;特点:临时存活,局部有效

Ⅵ  了解知识  (global 和 nonlocal)

    global 作用:在局部变量可以修改全局的变量,需要事前声明

    nonlocal 作用:声明变量名是来自于外层函数(不包含全局空间)

end

相关文章

  • day13 函数嵌套 定义 作用域 名称空间 * 与 ** 应用

    Ⅰ 函数的可变长参数 在形参中*与**的应用 * 站在实参的角度:可变长指的是参数的个数不固定,如果参数的...

  • day14-函数(3)装饰器

    一、闭包函数 闭包函数=函数嵌套定义+函数对象+名称空间与作用域 闭包函数 1、闭:指的是该函数是定义在一个函数内...

  • day14 装饰器

    Ⅰ 闭包函数 闭包函数=函数嵌套定义+函数对象+名称空间作用域 闭:指的是该函数是定义再一个函数内部的函数...

  • python函数知识大全

    阅读目录 一 函数知识体系 二 函数基础 三 函数对象、函数嵌套、名称空间与作用域、装饰器 四 迭代器、生成器、面...

  • Python正式课第六天

    一、函数作用域 1. 局部作用域 L:local,局部作用域,即函数中定义的变量; 2. 嵌套作用域 E:encl...

  • 函数02

    名称空间与作用域:内置、全局、局部 定义在开始的都是全局名称,全局作用域。先是找自己——》找全局——》找内置——报...

  • JavaScript_闭包

    函数的执行依赖于作用域,这个作用域在函数定义时决定的,而不是函数调用时决定的; 闭包的概念:函数内部定义了嵌套函数...

  • Javascript 中的作用域与作用域链

    一、作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。作用...

  • py_15 名称空间 作用域 嵌套函数

    一 名称空间 名称空间即存放名字与对象映射/绑定关系的地方。对于x=3,Python会申请内存空间存放对象3,然后...

  • 匿名函数

    匿名函数:就是定义时未直接指定名称的函数 优点 节省内存空间 因为非匿名函数在定义时,就已经创建函数对象和作用域对...

网友评论

      本文标题:day13 函数嵌套 定义 作用域 名称空间 * 与 ** 应用

      本文链接:https://www.haomeiwen.com/subject/bfwykktx.html