python之函数的进阶(2-1)

Posted yimiflh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之函数的进阶(2-1)相关的知识,希望对你有一定的参考价值。

动态参数:

一,*args:args是元祖,它包含了所有的位置参数。

1,第一种形参中只含*args。

技术分享图片
def func(*args):
    print(*args,type(args))
func(1,2,3,4,5)
形参中只含*args

技术分享图片

2,第二种形参中既有位置参数又有*args。

技术分享图片
def func(x,y,z,*args):
    print(x)
    print(y)
    print(z)
    print(args)
    return x,y,z,args
set=func(1,2,3,4,5,6)
print(set)
既有位置参数又有*args

技术分享图片

3,第三种形参中既有位置参数,*args又有默认参数。

技术分享图片
def func(x,y,*args,sex=):
    print(x)
    print(y)
    print(sex)
    print(args)
    return x,y,sex,args
set=func(1,2,3,4,5,6)
print(set)
同时含有位置参数,默认参数,*args

技术分享图片

**kwargs它包含了所有的关键字参数:

1,第一种形参中只含*kwargs。

技术分享图片
def func(**kwargs):
    print(kwargs,type(kwargs))
func(a=1,b=2,c=3,)
只含有**args

技术分享图片

2,第二种形参中既有位置参数又有*kwargs。

技术分享图片
def func(x,y,**kwargs):
    print(x)
    print(y)
    print(kwargs)
set=func(1,2,a=1,b=2,c=3,)
print(set)
位置参数和**kwargs

技术分享图片

3,第三种形参中既有位置参数,*args,默认参数又有**kwargs。

技术分享图片
def func(x,y,*args,sex=,**kwargs):
    print(x)
    print(y)
    print(sex)
    print(args)
    return x,y,sex,args,kwargs
set=func(1,2,3,4,5,a=3,b=7)
print(set)
位置参数,*args,默认参数,**kwargs

从上面的函数可以得出:

在形式参数的排序是:位置参数-->*args-->默认参数-->**kwargs

 魔法运算:(将列表中的元素释放出来,不在以列表和字典的形式。也称:打散)

技术分享图片
def func1(*args):
    return args
func1(*[1,2,3,4,5])
print(func1(*[1,2,3,4,5]))
魔法运算,列表
技术分享图片
def func2(**kwargs):
    print(kwargs)
dic={k4:1,k5:2,k6:2}
dic1={k1:1,k2:2,k3:2}
ss=func2(**dic,**dic1)
print(ss)
魔法运算,字典

函数的进阶:

命名空间:分为全局命名空间,局部命名空间,内置命名空间。

代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做全局命名空间

在函数的运行中开辟的临时的空间叫做局部命名空间

存放python解释器为我们提供的名字的空间叫做内置命名空间

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

取值顺序

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

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

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

作用域:

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

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

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

global关键字,nonlocal关键字:

global的作用:

1:申明一个全局变量

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

 

技术分享图片
def func():
    global a
    a = 3
func()
print(a)


count = 1
def search():
    global count
    count = 2
search()
print(count)
global:

 注意: ps:对可变数据类型(list,dict,set)可以直接引用不用通过global

 

技术分享图片
li = [1,2,3]
dic = {a:b}

def change():
    li.append(a)
    dic[q] = g
    print(dic)
    print(li)
change()
print(li)
print(dic)
对于可变数据类型,可以不用golobal

 

nonlocal的作用:

1,不能修改全局变量。

2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生

技术分享图片
def add_b():
    b = 42
    def do_global():
        b = 10
        print(b)
        def dd_nonlocal():
            nonlocal b
            b = b + 20
            print(b)
        dd_nonlocal()
        print(b)
    do_global()
    print(b)
add_b()
nonlocal

 函数的嵌套与作用域:

 

 

 

 

以上是关于python之函数的进阶(2-1)的主要内容,如果未能解决你的问题,请参考以下文章

python进阶二(模块)2-1 python之导入模块

Python进阶之函数式编程

python之函数进阶

Python 进阶 之 map()函数

1Python进阶强化训练之装饰器使用技巧进阶

Python自动化运维之函数进阶