python学习总结(1)

来源:互联网 发布:dha哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/07 16:23

最近学习了python,看了这篇文章http://python.jobbole.com/85231/后,自己来总结下,免得忘了:


1.可更改对象:list,dict,数组;不可更改对象:strings,numbers,tuples。


2.元类(metaclass):几乎不使用,推荐(http://python.jobbole.com/21351/),django中ORM中用到,主要用途是创建API。


3.方法:即静态方法(staticmethod),类方法(classmethod)和实例方法:

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
deffoo(x):
    print"executing foo(%s)"%(x)
 
classA(object):
    deffoo(self,x):
        print"executing foo(%s,%s)"%(self,x)
 
    @classmethod
    defclass_foo(cls,x):
        print"executing class_foo(%s,%s)"%(cls,x)
 
    @staticmethod
    defstatic_foo(x):
        print"executing static_foo(%s)"%x
 
a=A()


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


5.下画线:

__foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突.

_foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.

__foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名.

6..format()函数(字符串格式化,比%s 好多了):

print('{}'.format('hello world'))

hello world

7.迭代器:当你创建了一个列表,你可以一个一个的读取它的每一项,这叫做iteration;

生成器:生成器也是迭代器的一种,但是你只能迭代它们一次.原因很简单,因为它们不是全部存在内存里,它们只在要调用的时候在内存里生成。

生成器和迭代器的区别就是用()代替[]

8.*args和**kwargs:

*args**kwargs只是为了方便并没有强制使用它们.

当你不确定你的函数里将要传递多少参数时你可以用*args.例如,它可以传递任意数量的参数:

相似的,**kwargs允许你使用没有事先定义的参数名:

你也可以混着用.命名参数首先获得参数值然后所有的其他参数都传递给*args**kwargs.命名参数在列表的最前端.例如:

*args**kwargs可以同时在函数的定义中,但是*args必须在**kwargs前面.

当调用函数时你也可以用***语法.例如:

就像你看到的一样,它可以传递列表(或者元组)的每一项并把它们解包.注意必须与它们在函数里的参数相吻合.当然,你也可以在函数定义或者函数调用时用*.

9.面向切面编程AOP和装饰器: 
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。
装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括
的讲,装饰器的作用就是为已经存在的对象添加额外的功能
10.新式类与经典类:


#新式类
class C(object):
    pass
#经典类
class B:
    pass

简单的说,新式类是在创建的时候继承内置object对象(或者是从内置类型,如list,dict等),而经典类是直
接声明的。使用dir()方法也可以看出新式类中定义很多新的属性和方法,而经典类好像就2个。
新式类除了拥有经典类的全部特性之外,还有一些新的特性。比如__init__发生了变化,
新增了静态方法__new__
新式类是广度优先,旧式类是深度优先
11.__new__和 __init__区别:

 
  1. __new__是一个静态方法,而__init__是一个实例方法.
  2. __new__方法会返回一个创建的实例,而__init__什么都不返回.
  3. 只有在__new__返回一个cls的实例时后面的__init__才能被调用.
  4. 当创建一个新实例时调用__new__,初始化一个实例时用__init__.
12.单例模式

1 使用__new__方法

2 共享属性

创建实例时把所有实例的__dict__指向同一个字典,这样它们具有相同的属性和方法.

3 装饰器版本

4 import方法

作为python的模块是天然的单例模式




2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
deffoo(x):
    print"executing foo(%s)"%(x)
 
classA(object):
    deffoo(self,x):
        print"executing foo(%s,%s)"%(self,x)
 
    @classmethod
    defclass_foo(cls,x):
        print"executing class_foo(%s,%s)"%(cls,x)
 
    @staticmethod
    defstatic_foo(x):
        print"executing static_foo(%s)"%x
 
a=A()
原创粉丝点击