一、getattr()
getattr()函数是Python内置函数之一,用于获取一个对象的属性值。在Python中,一切皆为对象,包括模块、类、实例等,而属性则是对象所具有的特定变量或方法。
getattr()函数的语法如下:
getattr(object, name[, default])
其中,object参数是要获取属性值的对象,name参数是要获取的属性名,default参数是可选的,表示如果对象没有该属性,则返回默认值。
getattr()函数的作用是在运行时获取对象的属性值,而不需要在代码中提前定义这些属性。这种动态获取属性值的特性为Python编程提供了很大的灵活性。
下面举例说明getattr()函数的用法和功能:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Tom", 20)
# 获取对象属性值
print(getattr(person, "name")) # 输出 "Tom"
print(getattr(person, "age")) # 输出 20
# 获取不存在的属性,返回默认值
print(getattr(person, "gender", "unknown")) # 输出 "unknown"
在上面的例子中,我们创建了一个Person类的实例person,并使用getattr()函数获取了person对象的name和age属性值。同时,我们使用getattr()函数获取了一个不存在的属性gender,并设置了默认值为unknown,从而避免了程序抛出AttributeError异常。
总之,getattr()函数能够在运行时获取对象的属性值,为Python编程提供了很大的灵活性,特别是在处理动态对象或动态属性时更加实用。
二、globals
概念
globals()函数是Python3内置的一个函数,它返回当前作用域内的全局变量的字典。全局变量是指在函数之外定义的变量,或者在函数内部使用global关键字声明的变量。
用法
globals()函数不需要传入任何参数,直接调用即可。
功能和作用
globals()函数的主要作用是获取当前作用域内的全局变量的字典,这个字典包含了当前作用域中所有全局变量的名称和值。可以使用这个字典来查看、修改和删除全局变量。
举例说明
下面是一个简单的示例,演示了globals()函数的用法和功能:
x = 10 # 全局变量
def foo():
y = 20 # 局部变量
print(globals())
foo() # 输出全局变量字典
# 输出:
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'x': 10, 'foo': <function foo at 0x7f0e6b19f5e0>}
上面的示例中,定义了一个全局变量x和一个函数foo()。在foo()函数内部,定义了一个局部变量y,然后调用了globals()函数来输出当前作用域内的全局变量字典。
运行程序后,我们可以看到输出结果中包含了x和foo两个全局变量的名称和值。注意,函数foo()本身也是一个全局变量,因此也出现在了字典中。
三、hasattr
概念
hasattr()函数是Python内置函数之一,用于判断一个对象是否有指定的属性或方法。
用法
hasattr()的语法如下:
hasattr(object, name)
其中,object表示要检查的对象,name表示要检查的属性或方法名。
函数返回一个布尔值,如果object对象有指定的属性或方法,则返回True,否则返回False。
作用和功能
hasattr()函数主要用于检查一个对象是否具有某个特定属性或方法,以便在运行时进行动态的操作。
例如,在实际开发中,我们可能需要根据某个对象是否有指定的属性或方法来进行分支处理,或者在调用某个方法之前先检查对象是否有该方法等。
举例说明
class Person:
def __init__(self, name):
self.name = name
def say_hello(self):
print('Hello, my name is', self.name)
上面定义了一个Person类,有一个name属性和一个say_hello()方法。
现在,我们可以使用hasattr()函数来检查一个Person对象是否有name属性和say_hello()方法:
p = Person('John')
print(hasattr(p, 'name')) # True
print(hasattr(p, 'age')) # False
print(hasattr(p, 'say_hello')) # True
运行结果如下:
True
False
True
可以看到,p对象有name属性和say_hello()方法,但没有age属性。
四、hash
hash()函数是将一个可哈希的对象作为参数,返回该对象的哈希值。哈希值是一个整数,用于表示该对象在哈希表中的位置,可以用于快速比较和查找。
hash()函数的用法为:hash(object)
其中,object是可哈希的对象,比如字符串、元组、整数等等。不可哈希的对象包括列表、字典、集合等等。
hash()函数的作用是通过哈希算法将一个对象映射成一个唯一的整数,该整数可以用于判断两个对象是否相等,以及在哈希表中查找该对象的位置。
下面是一些示例:
# 字符串
print(hash('hello world')) # -1438022773
# 元组
print(hash((1, 2, 3))) # 529344067295497451
# 整数
print(hash(123)) # 123
# 不可哈希的对象
print(hash([1, 2, 3])) # TypeError: unhashable type: 'list'
需要注意的是,哈希值并不是对象的唯一标识符,因为不同的对象可能具有相同的哈希值。此外,哈希算法的性质决定了哈希值无法进行逆运算,即无法从哈希值还原出原始的对象。