4个使阅读 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 = 2020vars(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 控制台中用于在我们读取程序时探索脚本或对象。

(0)

相关推荐

  • 使用python编写一个EXE软件(一)

    李斯 李斯学python 5月22日 简介 初学python的同学(例如我自己),会以解决日常问题为目的而编写python脚本,练习python的同时也减少了很多重复劳动. 但是,脚本写完之后,如果需 ...

  • #PY小贴士# 字典可以通过序号索引来访问?

    我们在学 python 中的 list 和 dict 时知道: list 是有序的,所以可以通过 list_a[0] 这样的方式通过索引(index)来访问列表中某个位置上的元素: dict 是无序的 ...

  • Python语言学习之字母D开头函数使用集锦:del、dict使用方法之详细攻略

    Python语言学习之字母D开头函数使用集锦:del.dict使用方法之详细攻略 del.dict使用方法 del a=1,  del a     #删除变量a,解除a对1的引用 dict()     ...

  • python空字典怎么写

    字典是另外一种可变容器模子,且可存储恣意类型工具. 字典的每一个键值(key=>value)对用冒号(:)宰割,每一个对之间用逗号(,)宰割,整个字典包罗正在花括号({})中 . 格局以下所示: ...

  • Python 字典 dict() 函数

    不以物喜不以己悲 生活不会突变,你要做的只是耐心和积累.人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦.你的时间有限,做喜欢的事情会令人愉悦,所以跟随自己的本心. 目录 描述 语法 返回值 实 ...

  • 让你python代码更快的3个小技巧

    大家好!今天呢,我们来聊一聊如何加速你的 python 代码. Python 语言的优点可以列举出许多,语法简单易懂.模块丰富.应用广泛等等.但是世界上没有有完美的东西,python 一个明显缺点就是 ...

  • 齐悦社群专栏||阅读与写作使成功的路更好走

    谈阅读与写作――成功的路最好走 文||周卫英  写作是我们贡献社会的一种高效方式,对于爱好写作的人,现在是最好的时代. 读书有没有效果,效果大或者小,通过写作就可以检验和体现.人的各方面素质都可以通 ...

  • 像这样操作 Python 列表,能让你的代码更优雅

    写 Python 代码,列表的出镜率是相当高的,伴随列表一起出现的往往就是一大堆 for 循环,这样的代码多了看起来非常不简洁.作为一名 Python 程序员,怎么能忍受呢? 那有没有什么好办法呢?除 ...

  • 使用python代码实现 PDF 阅读器

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本文章来自腾讯云 作者:Python进阶者 想要学习Python?有问题得不到第一 ...

  • 编程语言Python代码阅读(第8篇):列表元素逻辑判断

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的三份代码的功能分别是判断列表中的元素是否都符合给定的条件:判断列表中是否存在符合给定的条件的元素:以及判断列表中 ...

  • Python代码块缩进的讲解

    https://www.ixigua.com/6729075318239265287

  • 最基础的Python知识学会这些已足够你开始写Python代码了

    https://m.toutiao.com/is/eD2TWLh/ (Python不用大括号标识代码结构使用空白符和缩进来标识代码块)上述最后两行代码就是while循环体,就是因为它们紧随while语 ...

  • 如何写出清晰又优雅的Python代码?我们给你这26条建议

    大数据DT 提供大数据.AI等领域干货学习资源的「宝藏号」,跟50万技术人共同成长,一起玩转大数据.Python.数据分析.数据科学.人工智能!还会有各种好玩又奇葩的数据解读,边学习边吃瓜! 538篇 ...

  • 涨见识了,在终端执行 Python 代码的 6 种方式!

    原作:BRETT CANNON 译者:豌豆花下猫@Python猫 英文:https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the- ...