Python2 2 day
lambda表达式:lambda 参数:表达式
为什么要用lambda:1.省去函数的定义过程;2抽象且被调用次数少;3增强可读性
内建函数:filter(过滤)、map(筛选)
filter(None,[]):过滤[]中的非真值
filter(函数名,[]):按函数方法过滤[]
map用法与filter类似
递归:调用自己;有结束条件
Python2的递归深度为1000左右,Python3的递归深度为1000000左右
字典(可变数据类型):{key,value}或dict(key=value);类似于关联数组;字典是一种集合,不是序列
字典的两个优势:索引速度快;可以为任何数据类型的数据结构
字典方法:keys()、values()、 items()、copy()
get、setsefault
字典里没有顺序的概念
>>> dict1={'a':2,3:['x','y'],'name':'hy'} >>> dict1 .items() dict_items([(3, ['x', 'y']), ('name', 'hy'), ('a', 2)]) >>> dict1.keys() dict_keys([3, 'name', 'a']) >>> dict1.values() dict_values([['x', 'y'], 'hy', 2]) >>> for key,value in dict1 .items(): print(key,value) 3 ['x', 'y'] name hy a 2 >>> dict2=dict1.copy() >>> dict2 {3: ['x', 'y'], 'name': 'hy', 'a': 2} >>> dict2['a']=7 >>> dict2 {3: ['x', 'y'], 'name': 'hy', 'a': 7} >>> dict1 {3: ['x', 'y'], 'name': 'hy', 'a': 2}//说明copy方法两对象互不影响 >>> dict2=dict1 >>> dict2['a']=8 >>> dict1
{3: ['x', 'y'], 'name': 'hy', 'a': 8}//说明=赋值方法两对象相互影
>>> a=[x for x in range(1,10)] >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9]
id(varname)查看变量的地址type(varname)查看变量数据类型
集合:元素无序、集合的对象可以是任何种类型
创建{} 或set([])
>>> a=set ("fiafi") >>> a {'f', 'a', 'i'} >>> b=set ([1,2,3,4]) >>> b {1, 2, 3, 4} >>>
集合运算符
>>> c=set ('abc123') >>> c {'b', 'c', 'a', '2', '3', '1'} >>> len(c) 6 >>> 'a' not in c False 8>>> for val in c: print(val) b c a 2 3 1
self相当于c++的this
类:内置的数据结构都是类,使用构造函数(list str set tuple dict)或快捷方式,能生成这些类的实例
self理解:self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗,不要搞另类,大家会不明白的。
self指的是类实例对象本身(注意:不是类本身)
class Person: def _init_(self,name): self.name=name def sayhello(self): print 'My name is:',self.name p=Person('Bill') p1 = Person('Apple') print p
如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?
__init__
初始化参数
python的私有变量是伪的,可通过_类名__变量名访问
类定义、类对象、类实例对象:变量方面
已经实例化却没有赋初值的对象,受类对象影响;已经实例化赋了初值的对象,不受类对象影响
实例化对象不会影响类对象
>>> class C: count=1 >>> a=C() >>> b=C() >>> a.count 1 >>> b.count 1 >>> b.count+=10 >>> b.count 11 >>> a.count 1 >>> C.count 1 >>> C.count+=100 >>> a.count 101 >>> b.count 11
相关的内建函数
>>> class a: pass >>> class b(a): pass >>> issubclass(b,a)//是否是子类 True >>> issubclass(b,object ) True >>> bi=b() >>> b1=b() >>> isinstance(b1,b)是否是实例化对象 True >>> isinstance(b1,a) True >>> isinstance(b1,(a,b,c)) True
魔法方法是Python的一切,Python因此而强大,体现在魔法方法在适当的时候会被适当的调用