python3 获取 当前作用域 全部参数的内置方法 locals()

本文介绍了一种在Python中简化函数间参数传递的方法,利用locals()函数收集并传递多个参数,提高代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写程序时,经常会碰见传递过多参数的情况。先看一个例子

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy(wxnacy@gmail.com)

def func1(id, name, age, **kw):
    amount = 1
    duration = 10
    func2(id = id, name = name, age = age, amount = amount, **kw)


def func2(**kw):
    print(kw)

在 func1() 给 func2() 传递参数,一个一个的写真的很痛苦,写一次还好,关键是到处都有这种情况。

可不可以将想要的参数打包直接传递过去呢?

内置方法 locals() 就可以达到这个效果,它可以实时收集当前作用域的参数,并返回一个字典。

先在全局范围内看看有哪些参数

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy(wxnacy@gmail.com)

if __name__ == "__main__":
    print(locals())
$ python locals_demo.py
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x102c75860>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'locals_demo.py', '__cached__': None}

可能你到没注意到一个空文件里都有这么多的内置参数。

locals() 收集参数是实时进行的,比如我们定义一个参数

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy(wxnacy@gmail.com)


if __name__ == "__main__":
    print(locals())
    name = 'wxnacy'
    print(locals())
$ python locals_demo.py

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1083d5860>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'locals_demo.py', '__cached__': None}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1083d5860>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'locals_demo.py', '__cached__': None, 'name': 'wxnacy'}

第二次打印的结果中,就多出了刚刚定义的参数 name

在方法中使用也是如此

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy(wxnacy@gmail.com)

def func(**kw):
    name = 'wxnacy'
    print(locals())

if __name__ == "__main__":
    func(url = 'https://wxnacy.com')
$ python locals_demo.py
{'kw': {'url': 'https://wxnacy.com'}, 'name': 'wxnacy'}

因为 locals() 方法的值是动态变的,所以我们可以先用变量储存起来,并且记得去掉不需要的参数

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy(wxnacy@gmail.com)

def func(id, age, **kw):
    name = 'wxnacy'
    args = locals()
    args.pop('name')
    print(args)

或者

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy(wxnacy@gmail.com)

def func(id, age, **kw):
    args = locals()
    name = 'wxnacy'
    print(args)

现在再来回顾下开始的问题,这下解决方式简单了很多

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy(wxnacy@gmail.com)

def func1(id, name, age, **kw):
    amount = 1
    args = locals()
    duration = 10
    func2(**args)

def func2(**kw):
    print(kw)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值