Python .key 和 ['key'] 区别?
· 3 min read
在 Python 中,点取属性(.key
)和方括号访问(['key']
)用于访问对象或字典中的值。这两种方法之间有一些关键区别:
点取属性(.key
)
- 适用于对象:通常用于访问对象(类实例)的属性。
- 语法更简洁:语法上更简洁,更直观。
- 限制:只能用于合法的 Python 标识符(变量名)作为属性名,不能用于包含空格、特殊字符或数字开头的属性名。
示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("John", 30)
print(person.name) # 输出: John
方括号访问(['key']
)
- 适用于字典:常用于访问字典中的键值对。
- 更灵活:可以使用任意字符串作为键,包括包含空格、特殊字符或数字开头的键。
- 动态访问:可以动态地使用变量作为键来访问值。
示例:
data = {
"name": "John",
"age": 30,
"city": "New York"
}
print(data['name']) # 输出: John
key = "city"
print(data[key]) # 输出: New York
实际区别
-
访问对象属性:
.key
:用于访问对象的属性。['key']
:如果对象实现了__getitem__
方法,可以使用这种方式访问(通常是字典)。
-
属性名限制:
.key
:属性名必须是合法的 Python 标识符。['key']
:键名可以是任何字符串。
-
动态访问:
.key
:不能动态访问。['key']
:可以动态访问,适用于变量作为键的情况。
综合示例
以下是一个综合示例,展示了这两种方法的使用:
class MyClass:
def __init__(self):
self.foo = "bar"
self.data = {"key with space": "value", "another_key": 42}
def __getitem__(self, key):
return self.data[key]
obj = MyClass()
# 点取属性
print(obj.foo) # 输出: bar
# 方括号访问
print(obj['key with space']) # 输出: value
print(obj['another_key']) # 输出: 42
# 使用变量作为键动态访问
key = "another_key"
print(obj[key]) # 输出: 42
总的来说,点取属性更适用于访问对象的属性,而方括号访问则更适用于访问字典的键值对,尤其在需要动态键名的情况下。