Python 基础第十天

Posted tom2ling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 基础第十天相关的知识,希望对你有一定的参考价值。

今日主要内容

1.动态参数

2.命名空间或名称空间

3.函数的嵌套

4.关键字global和nonlocal

 

动态函数

动态参数*args   ,**kwargs

(1)*args

接收的是实参对应的所有位置参数(实参中超出形参位置的),并将其放在元组中.

例1.*args正确放置的位置(不带默认参数)

例2:带默认参数,不影响默认参数的取值

总结:

 形参对应顺序:位置参数,*args,默认参数

 (2)**kwargs  动态传参 

将所有关键字参数(超过形参设置的关键字参数)添加到一个字典里.

例3:**kwargs正确使用

最终的排列顺序:

例4:

总结:

最终顺序:位置参数,*args,默认参数,**kwargs

一般工作的书写方式:

def funcl(*args,**kwargs):

  pass

funcl

 

知识点: *的应用

例5:*args,*的作用

将各个可迭代的数据类型转换成元组形式,以前是元组的,直接套用原式

例6:**kwargs 的** 作用

总结 *,**

 在函数的调用执行时,

*可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args。

**字典,代表打散,将所有键值对放到一个kwargs字典里。

 

在函数定义时, *args,**kwargs代表的是聚合。

 def func(*args,**kwargs):  # 聚合
 print(args)
 print(kwargs)

 func(*,**)#打散

 =================================================================

2.命名空间,名称空间

命名空间一共分为三种:

  全局命名空间

  局部命名空间

  内置命名空间

*内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法。

三种命名空间之间的加载与取值顺序:

加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)

取值顺序:

  在局部调用:局部命名空间->全局命名空间->内置命名空间

  在全局调用:全局命名空间->内置命名空间

综上所述,在找寻变量时,从小范围,一层一层到大范围去找寻。

如下图简单描述:

加载为向下的箭头,取值为向上的箭头.

 

 

作用域

作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

局部作用域:局部名称空间,只能在局部范围生效

globals和locals方法

例7:比较全局和局部作用域区别

取的值全部放在字典里面.

全局名称空间:py3中内置的所有变量

局部名称空间:根据所在位置,对变量进行展示,如果所在的函数中有变量,则打印函数的变量,如果则空,只查找当前级内.

 

 对比

 

函数的嵌套

解决思路:

1.先确认函数什么执行,没有看到调用函数,则函数不执行.即函数名()

2.代码从上到下依次执行.

3.调用函数:函数里面从上至下依次执行

例8:通过举例理解上面的内容,就好理解了

 

 4 关键字:global 和 nonlocal  (声明变量)

global:

  1,在局部空间内,声明一个全局变量。

  2,在局部作用域想要对全局作用域的全局变量进行修改时,需要用到 global(限于字符串,数字)。

 例9:

如果不用global声明,则外部是找不到内部的变量的.

如果声明,则外部可以使用此变量

 2,在局部空间内改变一个全局变量

例10:

 

 nonlocal #将内部变量,引用到外部,不包括全局

1,不能修改全局变量。

 

2.在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,

并且引用的哪层,从那层及以下此变量全部发生改变。(只要在函数内,就可以引用到外层,只要出了函数,到全局下就错误)

 

总结:

global和nonlocal用法相同,nonlocal不能反用到全局下,global可以从局部到全局这样使用.

以上是关于Python 基础第十天的主要内容,如果未能解决你的问题,请参考以下文章

Python基础第十天——yield的表达式形式的应用面向过程编程内置函数

学习python第十天

python第十天

《Python编程从入门到实践》——学习python的第十天

python学习第二十天

学习python课程第二十天