Skip to main content

Python .key 和 ['key'] 区别?

· 3 min read
vNt9SO

在 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

实际区别

  1. 访问对象属性

    • .key:用于访问对象的属性。
    • ['key']:如果对象实现了 __getitem__ 方法,可以使用这种方式访问(通常是字典)。
  2. 属性名限制

    • .key:属性名必须是合法的 Python 标识符。
    • ['key']:键名可以是任何字符串。
  3. 动态访问

    • .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

总的来说,点取属性更适用于访问对象的属性,而方括号访问则更适用于访问字典的键值对,尤其在需要动态键名的情况下。