我来自Javascript背景(可以通过.
和[]
表示法访问属性),所以请原谅我,但究竟是什么,这两者在Python中有什么区别?
从我的实验中可以看出[]
应始终使用,以获取list
或set
的索引,并从{{{}获取某个键的值1}}。这是正确的,如果没有,你什么时候在Python中使用dictionary
?
答案 0 :(得分:22)
点运算符用于访问任何对象的属性。例如,复数
>>> c = 3+4j
包含(以及其他)两个属性real
和imag
:
>>> c.real
3.0
>>> c.imag
4.0
除此之外,它还有一个方法conjugate()
,它也是一个属性:
>>> c.conjugate
<built-in method conjugate of complex object at 0x7f4422d73050>
>>> c.conjugate()
(3-4j)
方括号表示法用于访问集合的成员,无论是字典还是其他映射都是按键:
>>> d = {'a': 1, 'b': 2}
>>> d['a']
1
...或者在列表或字符串之类的序列中使用索引:
>>> s = ['x', 'y', 'z']
>>> s[2]
'z'
>>> t = 'Kapow!'
>>> t[3]
'o'
这些集合也分别具有属性:
>>> d.pop
<built-in method pop of dict object at 0x7f44204068c8>
>>> s.reverse
<built-in method reverse of list object at 0x7f4420454d08>
>>> t.lower
<built-in method lower of str object at 0x7f4422ce2688>
......再次,在上述情况下,这些属性恰好是方法。
虽然所有对象都有一些属性,但并非所有对象都有成员。例如,如果我们尝试使用方括号表示法来访问复数c
的成员:
>>> c[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'complex' object is not subscriptable
...我们得到一个错误(这是有道理的,因为复杂的数字没有明显的方法可以让成员)。
可以分别使用特殊方法__getitem__()
和__getattr__()
来定义[]
和.
访问在用户定义的类中的工作方式。解释如何执行此操作超出了此问题的范围,但您可以在Python Tutorial中详细了解它。
答案 1 :(得分:5)
.
用于访问属性(包括方法)。 []
用于访问所谓的“items”,它通常是各种容器对象的内容。
JavaScript不区分这两件事,但Python确实如此。你是正确的[]
用于访问列表或词典中的数据。例如,.
用于访问list.append
和dict.update
等方法。它还用于访问其他类型对象的其他数据;例如,编译的正则表达式对象具有保持正则表达式模式的pattern
属性(您可以使用rx.pattern
访问它)。
一般来说,惯例是[]
用于“开放式”数据存储,在这种情况下,您不会提前知道对象将保存多少或哪种类型的数据; .
更常用于对象具有“本质上”且使用预定义名称访问的特定数据。例如,只知道列表中的某些内容并不会告诉您其中的内容(使用[]
),但它确实告诉您可以附加到它(以及访问您使用的追加方法) .
)。
在这方面,Python和JavaScript之间的另一个主要区别是,在Python中,.
和[]
的行为可以由对象自定义。因此obj.foo
或obj[foo]
可能会做一些特别的事情,如果obj
是一个为其定义自己行为的对象。有各种自定义类型可以将它们用于自己的目的。
答案 2 :(得分:3)
[]
是容器的索引,例如列表或字典。
.
是对象和模块的成员。它可以是方法,成员数据或属性。
>>> xs = [1, 7, 3, 4, 5, 4, 3, 4, 1]
>>> xs.count(4)
3
>>> xs[1]
7
答案 3 :(得分:0)
实际上,Python使用方括号来包含一个键。对于列表,这是一个整数(无符号)索引或切片,而对于dicts,这是一个(可拥有的)对象,如字符串,元组等,甚至是整数(单个和无符号)。 对于使用类似甚至相同语法的许多其他语言来说,这是直截了当的。
.
用于访问对象的成员,非常类似于C ++,C,Java,JavaScript等。编写允许使用点语法的字典类非常简单。访问其元素。但是,为此,密钥必须是有效的Python标识符(letter { letter | digit |
_ }
。
但是,这并不常见。
一个集合不支持索引,因为它不是内部排序的,并且&#34; key&#34;之间没有关系。和&#34;价值&#34;。 对于列表,您不会获得索引&#34;,但是您可以获得索引的值#34;。对于一个词典,这是相似的,但&#34;索引&#34;更灵活。但是,dict不允许切片,并且(像集合)无序。
旁注:Python使用内部字典对象来组织其成员。试试控制台:
class MyClass:
def myfunc(self):
pass
print(MyClass.__dict__)
您将获得此类的所有属性(名称:值)。请注意myfunc
。