Sta*_*tec 27 python collections attributes object member
我来自Javascript背景(可以通过两者.和[]符号访问属性),所以请原谅我,但究竟是什么,这两者在Python中有什么区别?
从我的实验它seeems认为[]应始终使用,既得到的指数list或set并从一个特定键获得的价值dictionary.这是正确的,如果没有,你.什么时候在Python中使用?
Zer*_*eus 24
点运算符用于访问任何对象的属性.例如,复数
>>> c = 3+4j
Run Code Online (Sandbox Code Playgroud)
有(以及其他)两个属性real和imag:
>>> c.real
3.0
>>> c.imag
4.0
Run Code Online (Sandbox Code Playgroud)
除了那些,它有一个方法,conjugate()也是一个属性:
>>> c.conjugate
<built-in method conjugate of complex object at 0x7f4422d73050>
>>> c.conjugate()
(3-4j)
Run Code Online (Sandbox Code Playgroud)
方括号表示法用于访问集合的成员,无论是字典还是其他映射的密钥:
>>> d = {'a': 1, 'b': 2}
>>> d['a']
1
Run Code Online (Sandbox Code Playgroud)
...或者像列表或字符串这样的序列的索引:
>>> s = ['x', 'y', 'z']
>>> s[2]
'z'
>>> t = 'Kapow!'
>>> t[3]
'o'
Run Code Online (Sandbox Code Playgroud)
这些集合也分别具有以下属性:
>>> 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>
Run Code Online (Sandbox Code Playgroud)
......再次,在上述情况下,这些属性恰好是方法.
虽然所有对象都有一些属性,但并非所有对象都有成员.例如,如果我们尝试使用方括号表示法来访问复数的成员c:
>>> c[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'complex' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
...我们得到一个错误(这是有道理的,因为复杂的数字没有明显的方法来拥有成员).
这是可能的定义如何[],并.在用户定义的类访问工作,采用特殊的方法__getitem__()和__getattr__()分别.解释如何执行此操作超出了本问题的范围,但您可以在Python教程中阅读更多相关内容.
[] 是容器的索引,例如列表或字典。
.是对象和模块的成员。它可以是方法、成员数据或属性。
>>> xs = [1, 7, 3, 4, 5, 4, 3, 4, 1]
>>> xs.count(4)
3
>>> xs[1]
7
Run Code Online (Sandbox Code Playgroud)
.用于访问属性(包括方法). []用于访问所谓的"项目",这些项目通常是各种容器对象的内容.
JavaScript没有区分这两件事,但Python确实如此.您是正确的,[]用于访问列表或词典中的数据. .例如,用于访问类似list.append和的方法dict.update.它还用于访问其他类型对象的其他数据; 例如,编译的正则表达式对象具有pattern保存正则表达式模式的属性(您可以使用它来访问它rx.pattern).
一般来说,惯例是[]用于"开放式"数据存储,在这种情况下,您不会提前知道对象将保存多少或哪种类型的数据; .更常用于对象具有"本质上"并且使用预定义名称访问的特定数据.例如,只知道列表中的某些内容并不会告诉您其中的内容(您使用的内容[]),但它确实告诉您可以附加到它(以及访问您使用的附加方法.).
在这方面,Python和JavaScript之间的另一个主要区别是,在Python中,双方的行为.,并[]可以通过对象定制.如果是一个为它们定义自己行为的对象,那么obj.foo或者obj[foo]可以做一些特别的事情obj.有各种自定义类型可以将它们用于自己的目的.