文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

四个让 Python 代码更容易阅读的函数

2024-12-02 20:58

关注

当程序代码行变多时,阅读代码变得困难。即使是一些简单的任务也会很困难。例如:

当然,我们可以逐行查找代码并记住名称或将它们写在草稿纸中。但是,这根本不是高效的,也不轻松。

阅读代码比编写代码更难。— 乔尔·斯波尔斯基

为了让我们的生活更轻松,Python 提供了四个有用的内置函数来帮助我们方便地显示特定变量名称和值 。

函数 1: globals()

顾名思义,该 globals()函数将显示全局变量信息 。

例如,如果我们打开 Python 控制台并输入 globals(), 将返回如下结果:

  1. Python 3.8.5 (v3.8.5:580fbb018f, Jul 20 2020, 12:11:27) 
  2. [Clang 6.0 (clang-600.0.57)] on darwin 
  3. Type "help""copyright""credits" or "license" for more information. 
  4. >>> globals() 
  5. {'__name__''__main__''__doc__': None, '__package__': None, '__loader__''_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__''builtins' (built-in)>} 
  6. >>> 

如果我们添加一个变量:

  1. >>> name = 'Python七号' 
  2. >>> globals() 
  3. {'__name__''__main__''__doc__': None, '__package__': None, '__loader__''_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__''builtins' (built-in)>, 'name''Python七号'
  4. >>> 

由于该 globals()函数只返回一个包含全局变量的字典。我们可以操纵这个 dict 来获取一些我们感兴趣的数据:

  1. >>> [n for n in globals() if not n.startswith('__')] 
  2. ['name'
  3. >>> 

如上例所示,我们使用列表推导式来获取所有非双下划线的变量名称。

函数 2:locals()

了解 globals()之后, locals()函数就是小菜一碟。顾名思义,它将返回一个包含所有本地变量和值的字典。

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

  1. >>> globals()  == locals() 
  2. True 
  3. >>> 

函数 3:vars()

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

  1. >>> vars() 
  2. {'__name__''__main__''__doc__': None, '__package__': None, '__loader__''_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__''builtins' (built-in)>, 'name''Python七号'
  3. >>> class A: 
  4. ...     name = 'Python七号' 
  5. ... 
  6. >>> 
  7. >>> vars(A) 
  8. mappingproxy({'__module__''__main__''name''Python七号''__dict__''__dict__' of 'A' objects>, '__weakref__''__weakref__' of 'A' objects>, '__doc__': None}) 
  9. >>> 
  10. >>> 

不是所有对象都有 __dict__方法,因此vars()只能在部分对象中使用。

  1. >>> num = 1 
  2. >>> vars(num) 
  3. Traceback (most recent call last): 
  4.   File "", line 1, in  
  5. TypeError: vars() argument must have __dict__ attribute 
  6. >>> 

如上例所示, int类型对象不包含 __dict__,因此如果我们vars()将引发TypeError 。

函数 4:dir()

该 dir()函数帮助显示模块或对象内的名称列表。

  1. >>> dir(A) 
  2. ['__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__''name'
  3. >>> dir(num) 
  4. ['__abs__''__add__''__and__''__bool__''__ceil__''__class__''__delattr__''__dir__''__divmod__''__doc__''__eq__''__float__''__floor__''__floordiv__''__format__''__ge__''__getattribute__''__getnewargs__''__gt__''__hash__''__index__''__init__''__init_subclass__''__int__''__invert__''__le__''__lshift__''__lt__''__mod__''__mul__''__ne__''__neg__''__new__''__or__''__pos__''__pow__''__radd__''__rand__''__rdivmod__''__reduce__''__reduce_ex__''__repr__''__rfloordiv__''__rlshift__''__rmod__''__rmul__''__ror__''__round__''__rpow__''__rrshift__''__rshift__''__rsub__''__rtruediv__''__rxor__''__setattr__''__sizeof__''__str__''__sub__''__subclasshook__''__truediv__''__trunc__''__xor__''as_integer_ratio''bit_length''conjugate''denominator''from_bytes''imag''numerator''real''to_bytes'
  5. >>> dir() 
  6. ['A''__annotations__''__builtins__''__doc__''__loader__''__name__''__package__''__spec__''name''num'
  7. >>> 

实际上,该dir方法在 __dir__()内部调用 。

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

其他自省函数

自省就是自我反省,在编程方面是指程序在运行时自我判断对象类型的能力,也可以说是反射,检查某些事物以确定它是什么、它知道什么以及它能做什么,Django 框架之所以如此灵活,很多 ORM 类都用到了 Python 的自省函数。

与自省相关的主要方法:

最后 

这四个内置函数是我们显示名称和值的有用工具。它们的常见使用场景是在 Python 控制台中使用,以在我们阅读程序时探索脚本或对象。Pytho 的内省函数也可以在运行时动态检查对象的类型和方法,可以帮助我们检查代码,也方便我们编写出灵活可扩展的程序。

本文转载自微信公众号「Python七号」,可以通过以下二维码关注。转载本文请联系Python七号公众号。

 

来源:Python七号内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯