python内置函数 G
Python 解释器内置了很多函数和类型,任何时候都能使用。
G
名称 | 描述 |
---|---|
getattr | 从对象中获取属性值。 |
globals | 返回当前全局符号表的字典。 |
getattr(object, name)
getattr(object, name)
getattr(object, name, default)
getattr()
是 Python 中的一个内置函数,它用于从对象中获取属性值。这个函数接受三个参数:对象、属性名(作为字符串)以及一个可选的默认值。
object
:你想要获取其属性的对象。name
:你想要获取的属性的名称,作为字符串传递。default
(可选):如果指定的属性不存在,则返回的值。如果未提供此参数且属性不存在,则getattr()
会引发AttributeError
。
object 中指定名称的属性的值。 name 必须是字符串。 如果该字符串是对象的某一属性的名称,则结果将为该属性的值。 例如,getattr(x, 'foobar')
等同于 x.foobar
。 如果指定名称的属性不存在,则如果提供了 default 则返回该值,否则将引发 AttributeError
。 name 不必是一个 Python 标识符 (参见 setattr()
)。
备注:由于 私有名称混合 发生在编译时,因此必须手动混合私有属性(以两个下划线打头的属性)名称以使用 getattr()
来提取它。
class MyClass:
def __init__(self):
self.my_attribute = "Hello, world!"
# 创建一个 MyClass 的实例
obj = MyClass()
# 使用 getattr() 获取 my_attribute 的值
value = getattr(obj, 'my_attribute')
print(value) # 输出: Hello, world!
# 尝试获取一个不存在的属性
# value = getattr(obj, 'non_existent_attribute') # 这会引发 AttributeError
# 尝试获取一个不存在的属性,并提供默认值
value = getattr(obj, 'non_existent_attribute', 'Default Value')
print(value) # 输出: Default Value
getattr()
在许多场景下都非常有用,尤其是当你需要动态地访问对象的属性时。例如,你可能从配置文件、数据库或用户输入中读取属性名,并使用 getattr()
来获取相应的属性值。此外,getattr()
在实现一些高级功能,如动态属性访问、插件系统或对象序列化时也非常有用。
globals()
返回实现当前模块命名空间的字典。对于函数内的代码,这是在定义函数时设置的,无论函数在哪里被调用都保持不变。
使用场景:
- 查看全局变量:你可以使用
globals()
来查看当前模块中定义的所有全局变量和它们的值。 - 修改全局变量:通过修改
globals()
返回的字典,你可以改变全局变量的值。但通常不推荐这样做,因为它可能导致代码难以理解和维护。 - 动态创建全局变量:虽然不常见,但你可以使用
globals()
来动态地创建全局变量。
# 定义一个全局变量
global_var = "Hello, world!"
# 使用 globals() 查看全局变量
print(globals()) # 输出:{... 'global_var': 'Hello, world!', ...}
# 修改全局变量的值
globals()['global_var'] = "Hello, Python!"
print(global_var) # 输出:Hello, Python!
# 动态创建全局变量
globals()['new_global_var'] = 42
print(new_global_var) # 输出:42
使用 globals()
修改全局变量或动态创建全局变量应该谨慎进行,因为这可能会使代码难以理解和维护。
globals()
返回的字典不应该被直接修改(比如添加或删除键),因为这可能会导致 Python 解释器出错或产生不可预测的行为。
在函数内部,globals()
返回的是模块级别的全局变量,而不是函数内部的局部变量。在函数内部查看局部变量,可以使用 locals()
函数。