Python语言特性

  • Python中单下划线和双下划线

>>> class MyClass():
...     def __init__(self):
...             self.__superprivate = "Hello"
...             self._semiprivate = ", world!"
...
>>> mc = MyClass()
>>> print mc.__superprivate
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: myClass instance has no attribute '__superprivate'
>>> print mc._semiprivate
, world!
>>> print mc.__dict__
{'_MyClass__superprivate': 'Hello', '_semiprivate': ', world!'}

__foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突。
_foo:一种约定,用来指定变量私有。
__foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名。

  • Python自省

自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr(),hasattr(),isinstance().

  • 面向过程和面向对象编程的区别

面向对象是将事物高度抽象化。
面向过程是一种自顶而下的编程。
面向对象必须先建立抽象模型,之后直接使用模型就行了。
举例:
面向对象: 狗,吃(屎)
面向过程: 吃,(狗,屎)
总结:
面向对象= 多态 + 继承 = 先抽象,后具体;
面向过程= 分解问题 + 逻辑为先 = 先细节,在整体。

  • 切片
>>> shoplist = ['apple', 'mango', 'carrot', 'banana']
>>> shoplist[::1]
['apple', 'mango', 'carrot', 'banana']
>>>shoplist[::2]
['apple', 'carrot']
>>> shoplist[::-1]
['banana', 'carrot', 'mango', 'apple']
>>> shoplist[开始位置:结束位置:步长]
  • xrange和range的区别

range:
range(start, stop, step), range会直接生成一个list。
xrange:
用法与range完全相同,不同的是所生成的不是一个数组,而是一个生成器。

>>> a = range(10)
>>> b = xrange(10)
>>> print type(a), type(b)
<type 'list'> <type 'xrange'>

xrange做循环的性能比range好,尤其返回很大的时候
尽量永xrange,除非要返回一个列表。

  • Python中浅拷贝和深拷贝的区别

首先,对赋值操作要有如下认识:

  1. 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址(旧瓶装旧酒)。
  2. 修改不可变对象(str, tuple)需要开辟新的空间。
  3. 修改可变对象(list等)不需要开辟新的空间。
    浅拷贝仅仅复制了容器中元素的地址

>>> a=['hello',[1,2,3]]
>>> b=a[:]
>>> [id(x) for x in a]
[55792504, 6444104]
>>> [id(x) for x in b]
[55792504, 6444104]
>>> a[0]='world'
>>> a[1].append(4)
>>> print(a)
['world', [1, 2, 3, 4]]
>>> print(b)
['hello', [1, 2, 3, 4]]

浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素( 新瓶装旧酒 )。

深拷贝,完全拷贝了一个副本,容器内部元素地址都不一样


>>> from copy import deepcopy
>>> a=['hello',[1,2,3]]
>>> b=deepcopy(a)
>>> [id(x) for x in a]
[55792504, 55645000]
>>> [id(x) for x in b]
[55792504, 58338824]
>>> a[0]='world'
>>> a[1].append(4)
>>> 
>>> print(a)
['world', [1, 2, 3, 4]]
>>> print(b)
['hello', [1, 2, 3]]

深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。也就是说( 新瓶装新酒 )。

Python中的深拷贝和浅拷贝参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值