Python内置函数--dir()&id()

简介: Python内置函数--dir()&id()

dir

此函数获取一个对象并返回可应用于该对象的所有方法的列表,称为属性

print(dir(3))
print(dir(list))
class A:
    """"清安"""
a = A()
print(dir(a))
['__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']
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
['__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__']

里面有很多很多的属性,魔术方法里面有讲到部分,此处略作讲解。

class A:
    """"清安"""
    name = 'QINGAN'
    def run(self):
        return f"{self.run.__name__}!"
a = A()
print("run name",a.run())
print("__doc__", a.__doc__)
print("__class__", a.__class__)
print("class __name__", a.__class__.__name__)
print("__dict__", A.__dict__)
"""
run name run is run !
__doc__ "清安
__class__ <class '__main__.A'>
__name__ A
__dict__ QINGAN
"""

dir()可以看到的属性居多。如果还是没有一个比较好的概念,那么: 举例:自动化的测试报告中的用例说明就能直接使用__doc__。当你不知道类中有哪些字典属性可以使用的时候就可以使用__dict__。在函数以外的地方可以直接使用。此外:

x=dir(dict)
print(x)
['__class__', '__class_getitem__', '__contains__', '__delattr__', 
 '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', 
 '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', 
 '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', 
 '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', 
 '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', 
 '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items',
 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

你可以获取到某个对象的所有方法与属性,上述没有做说明。当你不知道字典中存在哪些属性可以使用的时候就可以使用这个方法查看指定的对象的属性与方法,并使用他。

自定义dir()

class Dir:
    def __init__(self,first_name,last_name):
        self.first_name = first_name
        self.last_name = last_name
    def __dir__(self) -> [str]:
        return [self.first_name,self.last_name]
d = Dir('清','安')
print(dir(d))

有用到魔法函数,如果不清楚没关系,了解,后续请看魔法函数篇章。

id

返回对象的标识。保证在同时存在的对象中是唯一的。也就是常听到的内存地址。

cmd进入交互式环境,换一种体验,可以用vscode跟pycharm以及其他的。
>>> x = 1
>>> y = 1
>>> id(x) == id(y)
True
>>> id(x)
2163759474992
>>> id(y)
2163759474992
>>> list1 = [1,2,3]
>>> list2 = [1,2,3]
>>> id(list1) == id(list2)
False
>>> id(list1[0]) == id(list2[0])
True
>>> id(list1[0])
2163759474992
>>> id(list2[0])
2163759474992
>>> list3 = [2,3,4]
>>> id(list3[1]) == id(list2[1])
False
>>> id(list3[0]) == id(list2[1])
True
>>> id(list3[0]) == id(list1[1])
True
>>> id(list3)
2163768100992
>>> dic = {"name":"qa"}
>>> dic1 = {"name":"123"}
>>> id(dic)==id(dic1)
False
>>> id(dic['name'])==id(dic1['name'])
False
>>> dic2 = {"name":"qa"}
>>> id(dic)==id(dic2)
False
>>> id(dic['name'])==id(dic2['name'])
True

上述小例子中可以看出,对象确实是唯一的,但是其中的值(元素)却不是。

目录
相关文章
|
1月前
|
Python
【python从入门到精通】-- 第五战:函数大总结
【python从入门到精通】-- 第五战:函数大总结
66 0
|
29天前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
30天前
|
存储 数据安全/隐私保护 索引
|
20天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
22天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
24天前
|
Python
python的时间操作time-函数介绍
【10月更文挑战第19天】 python模块time的函数使用介绍和使用。
27 4
|
26天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
19 1
|
1月前
|
索引 Python
Python中的其他内置函数有哪些
【10月更文挑战第12天】Python中的其他内置函数有哪些
15 1
|
1月前
|
数据处理 Python
深入探索:Python中的并发编程新纪元——协程与异步函数解析
深入探索:Python中的并发编程新纪元——协程与异步函数解析
26 3
|
1月前
|
机器学习/深度学习 算法 C语言
【Python】Math--数学函数(详细附解析~)
【Python】Math--数学函数(详细附解析~)