4个使阅读 Python 代码更容易的函数

这篇博客介绍了Python中用于查看代码信息的四个内置函数:globals()、locals()、vars()和dir()。globals()提供全局变量的字典视图,locals()返回局部变量的字典,vars()获取对象的属性字典,而dir()则显示对象的属性列表。这些函数在阅读和理解大型代码库时非常有用。
摘要由CSDN通过智能技术生成



欢迎关注 “小白玩转Python”,发现更多 “有趣”

引言

当一个程序变大时,读取代码就变成了一项困难的工作。即使是一些简单的任务也会很困难。例如:

  • 如何检查一个大型函数或类的所有变量名和值?

  • 如何获得特定对象的有效属性列表?

  • 如何快速查看当前脚本的所有变量名和值?

当然,我们可以一行一行地查代码,记住这些名字,或者把它们写在纸上。然而,这一点也不 Python !

读代码比写代码更难。

函数1: globals()

顾名思义,globals()函数将显示全局范围的信息。

例如,如果我们打开 Python 控制台并输入 globals () ,就会返回一个包含全局作用域中所有变量名称和值的字典。

>>> globals()
{'__name__': '__main__', '__doc__': None, ...}

(本文中的一些输出例子被缩写为... ,以使它们更加整洁和易读。)

如果我们加上一个变量:

>>> Master = "Yang"
>>> globals
{'__name__': '__main__', '__doc__': None, ... ,'Master': 'Yang'}

因为 globals() 函数只返回一个字典。我们可以通过操作字典来获得一些我们感兴趣的特定数据:

>>> [n for n in globals() if not n.startswith('__')]
['sys', 'Master']

如上所示,我们可以通过一个列表解析来获得所有的变量名。

函数2: locals()

在理解了 globals() 之后,locals() 函数只是小菜一碟。顾名思义,它将返回一个包括所有局部名称和值的字典。

def top_developer():
    name = "Yang"
    country = "UK"
    print(locals())


top_developer()
# {'name': 'Yang', 'country': 'UK'}

顺便说一下,如果我们在全局范围中调用 locals() ,结果与 globals()完全相同。

>>> globals() is locals()
True

函数3: vars()

vars() 函数将返回 _dict_,这是一个用于存储对象属性的字典。其结果与直接调用 _dict_ 相同。

class TopDeveloper:
    def __init__(self):
        self.name = "Yang"
        self.country = "UK"


me = TopDeveloper()
print(vars(me))
# {'name': 'Yang', 'country': 'UK'}
print(vars(me) is me.__dict__)
# True

并不是所有对象都必须具有 _dict_,因此我们只能在部分对象中使用 vars()方法。

year = 2020
vars(year)
# Traceback (most recent call last):
#   File "<input>", line 1, in <module>
# TypeError: vars() argument must have __dict__ attribute

如上例所示,int 类型对象不包含 _dict_,因此如果对其使用 vars() ,将引发 TypeError。

函数4: dir()

dir() 函数帮助我们展示相应范围内的名称列表。

class TopDeveloper:
    def __init__(self):
        self.name = "Yang"
        self.country = "UK"
me = TopDeveloper()
print(dir(me))
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'country', 'name']

实际上,dir 方法是在内部调用 _dir_() 。

class TopDeveloper:
    def __init__(self):
        self.name = "Yang"
        self.country = "UK"
    def __dir__(self):
        return [1, 2, 3]
me = TopDeveloper()
print(dir(me))
# [1, 2, 3]

如上所示,如果我们更改 _dir_ 的工作方式,dir() 的结果也将会改变。

总结

这四个内置函数是我们显示名称和值的得力助手。它们的常见使用场景是在 Python 控制台中用于在我们读取程序时探索脚本或对象。

·  END  ·

HAPPY LIFE

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值