码迷,mamicode.com
首页 > 编程语言 > 详细

Python 基础第十天

时间:2018-03-29 21:20:05      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:超出   分享   对比   引用   迭代   div   bubuko   函数定义   工作   

今日主要内容

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 基础第十天

标签:超出   分享   对比   引用   迭代   div   bubuko   函数定义   工作   

原文地址:https://www.cnblogs.com/tom2ling/p/8672096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!