evernote 连接:https://app.yinxiang.com/shard/s7/sh/a79f4403-3594-4142-99c4-e57495d70646/ae22ad3c1ce2e9dd
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
Created on 2014年12月31日
@author: cuckoocs
'''
'''
笔记1:
使用is判断是否是同一个对象引用
使用==判断值是否相同
使用type判断类型是否是一样
Python 不可变对象:元组(tuple)、数值型(number)、字符串(string)
Python 可变对象:字典型(dict)和列表型(list)
Python 中存在有一些引用不变的对象[Python 中对于整数和字符串在内存中是不变引用]
{
>>> i = 2
>>> i2 = 2
>>> i is i2
True
>>> s = 'uiui'
>>> s2 = 'uiui'
>>> s is s2
True
#浮点数引用为变化的
>>> t = 2.3
>>> t2 = 2.30
>>> t is t2
False
>>> t2 = 2.3
>>> t is t2
False
>>> t == t2
True
>>> y = (1,2)
>>> y2 = (1,2)
>>> y is y2
False
>>> 1.0 is 1.0
True
>>> f1 = 1.0
>>> f1 is 1.0
False
}
笔记2:
判断对象类型可以使用type和isinstance
type不能识别继承类型
isinstance(object, type)能判断继承
笔记3:
使用sys.getrefcount可以获得对象的引用次数
笔记4:
使用copy模块可以实现浅拷贝和深拷贝
浅拷贝:对象内的引用依然是引用,
深拷贝:拷贝原始内存数据
笔记5:
Python中所有对象都是第一类对象。所有能够命名的对象都能当做数据处理,包括函数,模块,异常等
{
a[1] = abs #函数
a[1](-9)
}
笔记6:
对于序列的切片[1:8]是包含1,但是不包含8(左闭右开)
对于xrange和range也同样使用左闭右开原则
笔记7:
Python 中有set和frozenset两种集合,set为可变,frozenset不可变
对于set集合,使用for遍历的时候不能一边遍历一边删除
集合中不存在重复项
笔记8:
函数:单独定义(在类之外定义)
方法:定义在类中
笔记9:
Python 类中有三种方法,实例方法,类方法,静态方法
实例方法通过实例调用,定义时传递一个self参数代表实例自身
类方法通过类调用,使用@classmethod声明,定义时传递一个cls参数代表类对象
静态方法为打包在类中的函数,使用@staticmethod声明
笔记10:
#对于绑定方法
cls = mlist(1) #创建实例
mth = cls.instance_method #通过实例绑定方法时,同时绑定了实例,此处注意有括号和没有括号都可以,在有括号的情况下接下来的调用可以不带括号直接使用名字就调用,注意需要传递参数时候最好不带括号
mth(1) #方法调用
#非绑定方法
mth = mlist.instance_method #通过类绑定,没有绑定实例,调用时候需要传递一个实例
mth(cls)
笔记11:
通过引用self.来定义一个实例变量,在__init__()类同于构造方法
笔记12:
Python中控制访问权限的方法
定义属性和方法时,使用'__'前缀并且不使用'__'后缀,定义为一个私有变量或方法
但是仍然可以使用 实例._类名__属性名[方法名] // 类名._类名__属性名[方法名]访问实例私有属性和类私有属性
Python中使用'__xx__'的方式定义为内置方法和属性
笔记13:
Python中的内置类型
'''
import sys import copy star_30 = '*'*30 class mlist(list): ''' 定义一个空对象继承list ''' mfield = {'info':'mlist'} __sy__ = 'private' def __init__(self, h=None, w=None): self._h = h self._w = w self.__t = 0 def __pri_fun(self): print '__pri_fun__' def __call__(self, h=None): print 'call method' def instance_method(self, f=None): print 'instance method' @classmethod def class_method(cls): print 'class method' pass @staticmethod def static_method(): print 'static method' pass def compare(objA, objB): print star_30 if objA is objB: print 'is the same object' if objA == objB: print 'value is same' if type(objA) is type(objB): print 'type is same' def detect_type(obj): print star_30 ot = type(obj) print ot print 'is list {}. type'.format(ot is mlist) print 'is list {}. isinstance'.format(isinstance(obj, list)) if __name__ == '__main__': #对于绑定方法 cls = mlist(1) #创建实例 mth = cls.instance_method #通过实例绑定方法时,同时绑定了实例,此处注意有括号和没有括号都可以,在有括号的情况下接下来的调用可以不带括号直接使用名字就调用,注意需要传递参数时候最好不带括号 mth() #方法调用 #方法2 mth = cls.instance_method(1) mth #非绑定方法 mth = mlist.instance_method #通过类绑定,没有绑定实例,调用时候需要传递一个实例 mth(cls) cls.__call__() #对以‘__’开头定义的私有方法是可以调用的,但是 #cls.__pri_fun() cls._mlist__pri_fun() #访问私有方法 print mlist.__sy__ #print cls.__t print cls._mlist__t #通过这样的方法可以访问私有变量 print cls.__class__ print cls.__dict__['_h']