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因此而强大,体现在魔法方法在适当的时候会被适当的调用

 

posted @ 2015-08-07 13:21  沐风先生  阅读(125)  评论(0编辑  收藏  举报