python第十天:关键词参数与位置参数

Posted

tags:

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

参考技术A 关键字参数也可以与位置参数混用,但关键字参数必须跟在位置参数后面,否则会报错。

使用*arg 可变参数列表可以直接将元组或者列表转换为参数,然后传入函数,如:

>>>arg= [0,10,2]

>>>list(range(*arg))

[0, 2,4, 6, 8]

使用**kwargs关键字参数列表可以直接将字典转换为关键字参数,然后传入函数中,如:

>>>defuser(username,age,**kwargs):

... print('username:',username,

...    'age:',age,

...    'other:',kwargs)

>>>user('john',27,city= 'guangzhou',job = 'Data Analyst')

username:john age: 27 other: 'city': 'guangzhou', 'job': 'Data Analyst'

>>>kw='age':27,'city':'guangzhou','job':'DataAnalyst'

>>>user('john',**kw)

username:john age: 27 other: 'city': 'guangzhou', 'job': 'Data Analyst'

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学习第十天

python学习第十天

python函数 位置参数,关键字参数,可变参数优先级

Python的位置参数、默认参数、关键字参数、可变参数区别

Python3基础 str format 位置参数与关键字参数