python内置函数 D

本文详细介绍了Python内置的四个函数:delattr用于删除对象属性,dict用于创建和操作字典,dir列出对象属性,divmod执行除法和取模操作。通过实例展示了如何使用这些函数进行属性管理、字典创建及基本操作。
摘要由CSDN通过智能技术生成

python内置函数 D

Python 解释器内置了很多函数和类型,任何时候都能使用。

D

名称描述
delattr删除对象的属性。
dict创建字典对象。
dir列出对象的属性。
divmod同时执行除法运算和取模运算,返回一个包含商和余数的元组。
delattr(object, name)

delattr()是一个内置函数,用于删除对象的属性。它接受两个参数:一个对象和一个字符串,该字符串表示要删除的属性的名称。

  • object:你想要删除属性的对象。
  • name:一个字符串,表示你想要从object中删除的属性的名称。

使用delattr()函数时,如果指定的属性存在,它将被删除;如果不存在,则会引发AttributeError

这是 setattr() 的相关函数。 其参数是一个对象和一个字符串。 其中字符串必须是对象的某个属性的名称。 该函数会删除指定的属性,如果对象允许这样做的话。 例如,delattr(x, 'foobar') 等价于 del x.foobarname 不要求必须是 Python 标识符 (参见 setattr())。

class MyClass:  
    def __init__(self):  
        self.my_attribute = "Hello, World!"  
  
# 创建类的实例  
my_instance = MyClass()  
  
# 打印属性,确认它存在  
print(my_instance.my_attribute)  # 输出: Hello, World!  
  
# 使用delattr删除属性  
delattr(my_instance, "my_attribute")  
  
# 尝试访问已删除的属性,将引发AttributeError  
try:  
    print(my_instance.my_attribute)  
except AttributeError as e:  
    print(f"属性不存在: {e}")  # 输出: 属性不存在: 'MyClass' object has no attribute 'my_attribute'

delattr()通常用于动态地删除对象的属性,这在某些特殊情况下可能很有用,例如当对象的属性是在运行时动态添加时。然而,在大多数情况下,更好的做法是在类的定义中明确管理属性的添加和删除,以保持代码的清晰和可维护性。

dict(**kwarg)

class dict(**kwarg)

class dict(mapping, **kwarg)

class dict(iterable, **kwarg)

创建一个新的字典。dict 对象是一个字典类。参见 dict映射类型 — dict 了解这个类。

其他容器类型,请参见内置的 listsettuple 类,以及 collections 模块。

dict()是一个内置函数,用于创建字典对象。字典是一种无序的、可变的数据结构,它存储了键值对的集合。可以通过键来快速访问、修改或删除与之相关联的值。

创建一个空字典
my_dict = dict()  # 或my_dict = {}
print(my_dict)  # 输出: {}
创建一个有初始键值对的字典

传递一个包含键值对的列表(每个键值对是一个包含两个元素的列表或元组)给dict()函数来创建一个包含初始数据的字典。

my_dict = dict([('apple', 1), ('banana', 2), ('cherry', 3)])  
print(my_dict)  # 输出: {'apple': 1, 'banana': 2, 'cherry': 3}

或者,可以传递一个包含键值对的可迭代对象,其中每个元素都是一个包含两个元素的元组。

my_dict = dict((('apple', 1), ('banana', 2), ('cherry', 3)))  
print(my_dict)  # 输出: {'apple': 1, 'banana': 2, 'cherry': 3}
从已有的键值对创建字典

也可以使用花括号 {} 和冒号 : 来直接创建字典,这种方式更加常见和简洁。

my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}  
print(my_dict)  # 输出: {'apple': 1, 'banana': 2, 'cherry': 3}
使用关键字参数创建字典

dict()函数也接受关键字参数,其中关键字是键,对应的值是值。

my_dict = dict(apple=1, banana=2, cherry=3)  
print(my_dict)  # 输出: {'apple': 1, 'banana': 2, 'cherry': 3}
字典的常用操作
  • 访问字典中的值:通过键来访问对应的值。

    value = my_dict['apple']  # value 现在是 1
    
  • 修改字典中的值:通过给键分配新的值来修改字典。

    my_dict['apple'] = 10  # 现在 'apple' 的值是 10
    
  • 添加新的键值对:如果键不存在于字典中,给它分配一个值就会添加一个新的键值对。

    my_dict['orange'] = 4  # 添加一个新的键值对 'orange': 4
    
  • 删除键值对:使用del语句或pop()方法来删除键值对。

    del my_dict['banana']  # 删除键为 'banana' 的键值对  
    # 或者  
    value = my_dict.pop('cherry')  # 删除键为 'cherry' 的键值对,并返回其值
    
  • 检查键是否存在:使用in关键字来检查字典中是否包含某个键。

    if 'apple' in my_dict:  
        print("'apple' is in the dictionary.")
    

字典是Python编程中非常有用的数据结构,因为它们允许你通过键来快速存储和检索值。

dir()

dir()是一个内置函数,用于列出对象的属性。当你对一个对象调用dir()时,它会返回一个包含该对象所有属性的列表,这些属性包括方法、模块、变量等。

  • object(可选):要列出其属性的对象。如果不提供对象,dir()将返回当前作用域中的名称列表。

dir()

dir(object)

如果没有实参,则返回当前本地作用域中的名称列表。如果有实参,它会尝试返回该对象的有效属性列表。

如果对象有一个名为 __dir__() 的方法,则该方法将被调用并且必须返回由属列组成的列表。 这允许实现自定义 __getattr__()__getattribute__() 函数的对象能够定制 dir() 报告其属性的方式。

如果对象未提供 __dir__(),该函数会尽量从对象所定义的 __dict__ 属性和其类型对象中收集信息。 结果列表不一定是完整的,并且当对象具有自定义的 __getattr__() 时还可能是不准确的。

默认的 dir() 机制对不同类型的对象行为不同,它会试图返回最相关而不是最全的信息:

  • 如果对象是模块对象,则列表包含模块的属性名称。
  • 如果对象是类型或类对象,则列表包含它们的属性名称,并且递归查找所有基类的属性。
  • 否则,列表包含对象的属性名称,它的类属性名称,并且递归查找它的类的所有基类的属性。

返回的列表按字母表排序。例如:

# ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
print(dir())

# 列出模块的属性
import struct
# ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'struct']
print(dir())
# ['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_clearcache', 'calcsize', 'error', 'iter_unpack', 'pack', 'pack_into', 'unpack', 'unpack_from']
print(dir(struct))

# 列出对象的属性
class Shape:
    def __dir__(self):
        return ['area', 'perimeter', 'location']

s = Shape()
# ['Shape', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 's', 'struct']
print(dir())
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
print(dir(Shape))
# ['area', 'location', 'perimeter']
print(dir(s))

备注:因为 dir() 主要是为了便于在交互式时使用,所以它会试图返回人们感兴趣的名字集合,而不是试图保证结果的严格性或一致性,它具体的行为也可能在不同版本之间改变。例如,当实参是一个类时,metaclass 的属性不包含在结果列表中。

dir()函数返回的属性列表是动态的,这意味着它会根据对象的状态和类型变化。因此,在不同的时间点或不同的对象上调用dir()可能会得到不同的结果。

注意:dir()返回的属性列表可能包含一些以单下划线或双下划线开头的特殊属性或方法,这些是Python的内部实现细节,通常不建议直接访问或修改,除非你有明确的理由这样做,并且了解可能带来的后果。

divmod(a, b)

以两个(非复数)数字为参数,在作整数除法时,返回商和余数。若操作数为混合类型,则适用二进制算术运算符的规则。对于整数而言,结果与 (a // b, a % b) 相同。对于浮点数则结果为 (q, a % b),其中 q 通常为 math.floor(a / b),但可能比它小 1。在任何情况下, q * b + a % b 都非常接近 a,如果 a % b 非零,则结果符号与 b 相同,并且 0 <= abs(a % b) < abs(b)

# 简单的整数除法
quotient, remainder = divmod(10, 3)
print(quotient)  # 输出: 3
print(remainder)  # 输出: 1

# 浮点数也可以使用,但结果将是整数商和余数
quotient, remainder = divmod(10.0, 3)
print(quotient)  # 输出: 3.0
print(remainder)  # 输出: 1.0

# 负数的情况
quotient, remainder = divmod(-10, 3)
print(quotient)  # 输出: -4
print(remainder)  # 输出: 2

# 处理余数为负的情况
quotient, remainder = divmod(-10, 4)
print(quotient)  # 输出: -3
print(remainder)  # 输出: 2

# 负数的情况
quotient, remainder = divmod(-10, -3)
print(quotient)  # 输出: 3
print(remainder)  # 输出: -1

# 负数的情况
quotient, remainder = divmod(10, -3)
print(quotient)  # 输出: -4
print(remainder)  # 输出: -2

注意,当被除数为负数且除数为正数时,结果的余数为负数,且其绝对值小于除数。反之,当除数为负数时,结果的余数为正数,且其绝对值也小于除数的绝对值。

参考:内置函数 — Python 3.12.2 文档

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

棠越

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值