python内置函数 H

python内置函数 H

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

H

名称描述
hasattr检查对象是否具有指定的属性。
hash获取对象的哈希值。
help获取模块、关键字、属性、方法、类、函数等的帮助信息。
hex将整数转换为其对应的十六进制(hexadecimal)表示形式的字符串。
hasattr(object, name)

hasattr() 是 Python 中的一个内置函数,用于检查对象是否具有指定的属性。这个函数接受两个参数:对象和属性名(作为字符串)。如果对象具有指定的属性,则返回 True;否则返回 False

  • object:你想要检查其属性的对象。
  • name:你想要检查的属性的名称,作为字符串传递。

该实参是一个对象和一个字符串。如果字符串是对象的属性之一的名称,则返回 True,否则返回 False。(此功能是通过调用 getattr(object, name) 看是否有 AttributeError 异常来实现的。)

hasattr() 函数在以下场景中特别有用:

  1. 动态访问属性:在不知道对象是否具有某个属性时,可以使用 hasattr() 来安全地检查,然后决定是否尝试访问该属性。
  2. 对象验证:在验证对象是否满足某些条件时,可以使用 hasattr() 来检查对象是否具有必需的属性。
  3. 扩展性和灵活性:在编写需要与其他模块或对象交互的代码时,使用 hasattr() 可以使代码更加灵活,因为它可以处理不同对象可能具有的不同属性集。
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.is_student = True
    def getPerson(self):
        pass

# 创建一个 Person 类的实例
person = Person("Alice", 30)

# 使用 hasattr() 检查属性是否存在  
print(hasattr(person, 'name'))  # 输出: True  
print(hasattr(person, 'age'))  # 输出: True
print(hasattr(person, 'is_student'))  # 输出: True  
print(hasattr(person, 'address'))  # 输出: False

class Child(Person):
    def __init__(self, name, age):
        self.child_name = name
        self.age = age
    def getChild(self):
        pass

child = Child('Bob', 7)

print(hasattr(person, 'child_name'))    # 输出: False
print(hasattr(child, 'child_name')) # 输出: True
# 子类的__init__覆盖了父类的__init__,所以没有name属性
print(hasattr(child, 'name')) # 输出: False

print(hasattr(person, 'getChild'))  # 输出: False
print(hasattr(child, 'getPerson'))  # 输出: True

注意事项:

  • hasattr() 只检查对象是否具有指定的属性,而不检查该属性的值或类型。
  • 对于继承的情况,如果子类没有覆盖父类的属性,那么 hasattr() 也会认为子类具有该属性。
  • getattr() 不同,hasattr() 不会引发异常,它只是简单地返回一个布尔值来表示属性是否存在。如果你尝试使用 getattr() 访问不存在的属性且没有提供默认值,它会引发 AttributeError
hash(object)

hash() 是 Python 的内置函数,用于获取对象的哈希值。哈希值是一个整数,通常用于快速比较对象是否相等或在哈希表等数据结构中存储对象。

返回该对象的哈希值(如果它有的话)。哈希值是整数。它们在字典查找元素时用来快速比较字典的键。相同大小的数字变量有相同的哈希值(即使它们类型不同,如 1 和 1.0)。

备注:对于具有自定义 __hash__() 方法的对象,请注意 hash() 会根据宿主机的字长来截断返回值。

# 获取整数的哈希值  
print(hash(123))  # 输出一个整数,每次运行可能不同  

# 获取字符串的哈希值  
print(hash("hello"))  # 输出一个整数,每次运行可能不同  

# 尝试获取列表的哈希值会引发 TypeError  
# print(hash([1, 2, 3]))  # TypeError: unhashable type: 'list'

注意事项:

  1. 不可变对象:只有不可变对象(如整数、浮点数、字符串、元组等,且元组中的元素也必须是不可变的)才有哈希值。可变对象(如列表、字典、集合等)没有哈希值,因为它们的值可以在运行时改变,这会导致哈希值的不一致。
  2. 哈希冲突:不同的对象可能有相同的哈希值,这称为哈希冲突。Python 的哈希函数试图最小化这种冲突的可能性,但并不能完全避免。
  3. 哈希值不变性:对于同一个不可变对象,在程序的整个执行期间,其哈希值是不变的。

哈希值与相等性

在 Python 中,如果两个对象相等(即 == 运算符返回 True),那么它们的哈希值必须相同。但是,哈希值相同并不意味着两个对象一定相等。这是因为哈希函数的设计是为了尽可能减少冲突,但并不是为了检测相等性。

哈希在数据结构中的应用

哈希值在 Python 的许多内置数据结构中都有应用,特别是哈希表(在 Python 中实现为字典)。字典使用哈希值来快速查找键对应的值。当你尝试访问字典中的一个键时,Python 会计算该键的哈希值,并使用这个哈希值来快速定位到存储该键-值对的位置。

自定义对象的哈希值

如果你定义了自己的类,并且想要让它的实例具有哈希值(即可用于字典的键或集合的元素),你需要实现 __hash__() 方法。同时,为了保持一致性,你还应该实现 __eq__() 方法来定义相等性。通常,如果两个对象相等,它们的哈希值也应该相同。但是,请注意,如果对象是可变的,那么最好不要实现 __hash__() 方法,因为这可能会导致不可预测的行为。

实现自己的哈希表或类似的数据结构,并希望处理哈希冲突,你可以考虑以下策略:

  1. 链地址法:如上所述,当发生哈希冲突时,在冲突的位置创建一个链表,并将新的元素添加到链表中。
  2. 开放寻址法:当发生哈希冲突时,使用某种探测序列(如线性探测、二次探测或双重哈希)来查找下一个可用的槽。
  3. 再哈希:当发生哈希冲突时,使用另一个哈希函数来计算新的哈希值,并尝试将该值用作新的槽位置。

请注意,这些策略都有其优缺点,并且选择哪种策略取决于你的具体需求和约束条件。在大多数情况下,Python 的标准字典实现已经足够高效,你不需要自己实现哈希表或处理哈希冲突。

help()

help()

help(request)

help() 是一个内置函数,用于获取模块、关键字、属性、方法、类、函数等的帮助信息。当你在交互式解释器或 Python 脚本中调用 help() 时,它会启动一个内置的帮助系统,并提供关于所请求对象的详细文档。

启动内置的帮助系统(此函数主要在交互式中使用)。如果没有实参,解释器控制台里会启动交互式帮助系统。如果实参是一个字符串,则在模块、函数、类、方法、关键字或文档主题中搜索该字符串,并在控制台上打印帮助信息。如果实参是其他任意对象,则会生成该对象的帮助页。

请注意,如果在调用 help() 时,目标函数的形参列表中存在斜杠(/),则意味着斜杠之前的参数只能是位置参数。详情请参阅 有关仅限位置形参的 FAQ 条目

该函数通过 site 模块加入到内置命名空间。

在 3.4 版本发生变更: pydocinspect 的变更使得可调用对象的签名信息更加全面和一致。

help()  # 获取关于 help() 函数本身的帮助信息

help(print)  # 获取 print 函数的帮助文档
help(list)   # 获取 list 类的帮助文档

help(list()) # # 获取 list 类的帮助文档

help() 函数在脚本执行完成后会保持打开状态,阻止脚本结束。如果你想要在脚本中打印帮助信息而不保持帮助系统打开,你可以将帮助信息重定向到一个字符串或文件。

import sys
from io import StringIO

# 保存原来的标准输出  
old_stdout = sys.stdout

# 创建一个字符串IO对象来捕获输出  
new_stdout = StringIO()

# 将标准输出重定向到字符串IO对象  
sys.stdout = new_stdout

# 调用 help 函数  
help(print)

# 获取捕获的输出  
help_text = new_stdout.getvalue()

# 恢复原来的标准输出  
sys.stdout = old_stdout

# 打印或处理 help_text  
print(help_text)
  • help() 函数在交互式解释器中特别有用,因为它可以动态地显示帮助信息,并允许用户通过交互来探索 Python 的不同部分。
  • 在复杂的程序中,如果你想要提供自己的帮助文档或用户指南,可能需要实现更复杂的文档系统,例如使用 docstringspydoc
  • 当你调用 help() 时,它通常会打开一个交互式帮助系统,你可以在其中输入命令来浏览不同的主题或退出帮助系统。在脚本中,你可能不希望这种交互式的行为,因此可以考虑上述的重定向方法。

help() 函数是一个很好的工具,用于快速了解 Python 的内置函数、模块和其他对象的用法和文档。当你在编写代码或探索新的 Python 库时,它可以帮助你快速上手。

hex(x)

hex() 是一个内置函数,用于将整数转换为其对应的十六进制(hexadecimal)表示形式的字符串。十六进制是计算机中经常使用的一种数字表示方法,它使用16个不同的符号来表示数值,这16个符号包括0-9和A-F。

将整数转换为带前缀 “0x” 前缀的小写十六进制数字符串。 如果 x 不是一个 Python int 对象,则它必须定义返回一个整数的 __index__() 方法。 下面是一些例子:

>>> hex(255)
'0xff'
>>> hex(-42)
'-0x2a'

如果要将整数转换为大写或小写的十六进制字符串,并可选择有无“0x”前缀,则可以使用如下方法:

>>> '%#x' % 255, '%x' % 255, '%X' % 255
('0xff', 'ff', 'FF')
>>> format(255, '#x'), format(255, 'x'), format(255, 'X')
('0xff', 'ff', 'FF')
>>> f'{255:#x}', f'{255:x}', f'{255:X}'
('0xff', 'ff', 'FF')

另见 format() 获取更多信息。

另请参阅 int() 将十六进制字符串转换为以 16 为基数的整数。

备注:如果要获取浮点数的十六进制字符串形式,请使用 float.hex() 方法。

hex() 函数总是返回字符串,并且字符串的前缀是 '0x',表示这是一个十六进制数。

如果转换的数是负数,hex() 函数会返回带有负号的十六进制字符串。

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

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

棠越

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

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

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

打赏作者

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

抵扣说明:

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

余额充值