Python进阶系列(九)

93 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

枚举 Enumerate

枚举(enumerate)是Python内置函数。它的用处很难在简单的一行中说明,但是大多数的新人,甚至一些高级程序员都没有意识到它。

它允许我们遍历数据并自动计数,下面是一个例子:

for counter, value in enumerate(some_list):

    print(counter, value)

不只如此,enumerate也接受一些可选参数,这使它更有用。

my_list = ['apple', 'banana', 'grapes', 'pear']

for c, value in enumerate(my_list, 1):

    print(c, value)

输出:

(1, 'apple')

(2, 'banana')

(3, 'grapes')

(4, 'pear')

上面这个可选参数允许我们定制从哪个数字开始枚举。

你还可以用来创建包含索引的元组列表, 例如:

my_list = ['apple', 'banana', 'grapes', 'pear']

counter_list = list(enumerate(my_list, 1))

print(counter_list)

 输出: [(1, 'apple'), (2, 'banana'), (3, 'grapes'), (4, 'pear')]

对象自省

自省(introspection),在计算机编程领域里,是指在运行时来判断一个对象的类型的能力。

它是Python的强项之一。Python中所有一切都是一个对象,而且我们可以仔细勘察那些对象。Python还包含了许多内置函数和模块来帮助我们。

dir

在这个小节里我们会学习到dir以及它在自省方面如何给我们提供便利。

它是用于自省的最重要的函数之一。它返回一个列表,列出了一个对象所拥有的属性和方法。这里是一个例子:

my_list = [1, 2, 3]

dir(my_list)

 Output: ['add', 'class', 'contains', 'delattr', 'delitem', 'delslice', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getitem', 'getslice', 'gt', 'hash', 'iadd', 'imul', 'init', 'iter', 'le', 'len', 'lt', 'mul', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'reversed', 'setattr', 'setitem', 'setslice', 'sizeof', 'str', 'subclasshook', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

上面的自省给了我们一个列表对象的所有方法的名字。当你没法回忆起一个方法的名字,这会非常有帮助。如果我们运行dir()而不传入参数,那么它会返回当前作用域的所有名字。

type 和id

type函数返回一个对象的类型。举个例子:

print(type(''))

 Output: <type 'str'>

print(type([]))

 Output: <type 'list'>

print(type({}))

Output: <type 'dict'>

print(type(dict))

 Output: <type 'type'>

print(type(3))

 Output: <type 'int'>

id()函数返回任意不同种类对象的唯一ID,举个例子:

name = "Yasoob"

print(id(name))

Output: 139972439030304

inspect 模块

inspect模块也提供了许多有用的函数,来获取活跃对象的信息。比方说,你可以查看一个对象的成员,只需运行:

import inspect

print(inspect.getmembers(str))

 Output: [('add', <slot wrapper 'add' of ... ...

还有好多个其他方法也能有助于自省。如果你愿意,你可以去探索它们。