Python相关

一、__new__和__init__的区别

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

二、类方法、类实例方法、静态方法区别

类方法:类对象的方法,使用“@classmethod”进行装饰,形参为cls,表示类对象,类对象和实例对象都可调用。

类实例方法:类实例化对象的方法,只有实例对象可以调用,形参self,指代对象本身。

静态方法:是一个任意函数,使用“@staticmethod”装饰,可以用对象直接调用,静态方法与该类没有太大关系。

三、迭代器和生成器

迭代器:符合迭代器协议,具有next和stopInteration的属性。比如 list,tuple等都是迭代器,可以直接用于for循环的。

生成器:使用生成器可以很方便的支持迭代器协议。生成器通过生成器函数产生,用yield一次返回一个结果。yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态。

生成器就是一类特殊的迭代器,生成器能做到迭代器能做的所有事。除了创建和保存程序状态的自动方法,当生成器终结时,还会自动抛出 StopIteration 异常。

四、设计模式——单例模式

class A(object):
    _instance = None
    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = object.__new__(cls)
        return cls._instance

单例模式使用场景:

1、资源共享的情况下,避免由于资源操作时导致的性能或 损耗。

2、控制资源的情况下,方便资源之间的互相通信。

五、装饰器

装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

import time

def timeit(func):
    def test():
        start = time.clock()
        func()
        end = time.clock()
        print('time used:',end-start)

    return test

@timeit
def foo():
    print('hello')

foo()

六、闭包

在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包。

七、面向对象与面向过程

面向过程是一种基于功能分析的、以算法为中心的程序设计方法;

面向对象是一种基于结构分析的、以数据为中心的程序设计思想。使用类,三大特性:封装、继承、多态。

八、Python调优

1、使用多线程,充分利用机器的多核

2、对于性能影响较大的部分使用C/C++编写

3、对于IO阻塞造成的性能影响,使用IO多路复用来解决

4、尽量使用Python内建函数

5、尽量使用局部变量

九、代码优化

1、优化算法时间。使用分治、贪心、动态规划思想。

2、循环优化。避免在一个循环中使用点操作。减少循环内部执行的工作量。

3、并行编程。对于CPU密集型,使用multiprocessing的Process,对于IO密集型,使用threading。

4、set的使用

5、使用性能分析工具cProfile

十、socket编程步骤

客户端:

1、创建TCP的socket套接字

2、连接服务器

3、发送数据给服务器

4、接受服务器发来的消息

5、关闭套接字

服务器端:

1、创建TCP服务端的socket

2、绑定ip地址和端口号,bind()

3、设置允许的最大连接数,listen()

4、接收客户端撒花姑娘的连接,accept()

5、接收、发送数据,recv()/send()

6、关闭套接字

posted @ 2019-09-07 17:32  尘世中一个迷途小书童  阅读(164)  评论(0编辑  收藏  举报