美文网首页python
python中的常见问题--持续更新

python中的常见问题--持续更新

作者: RevinDuan | 来源:发表于2018-09-07 14:06 被阅读0次

    这里可以找到常见的问题,需要的可以直接ctrl+f寻找关键字就能找到:


    常见问题汇总


    1. == 和 is

      • Python中的对象包含三要素:id、type、value,其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值
      • is 判断的是a对象是否就是b对象,是通过id来判断的
      • == 断的是a对象的值是否和b对象的值相等,是通过value来判断的
    2. copy 和 deepcopy

      • 寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。
      • 浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。这就和我们寻常意义上的复制有所不同了
    3. 迭代器,生成器,itertools,yield,列表,字典集合推导

      • 迭代器: 任何实现了 iternext (python2中实现next()) 方法的对象都是迭代器

        • iter 返回迭代器自身
        • next 返回容器中的下一个值
        • 如果容器中没有更多元素,则抛出StopIteration异常
        • 迭代器不会一次性把所有元素加载到内存,而是需要的时候才生成返回结果
      • 生成器: 生成器是一种特殊的迭代器,不要定义iternext. 只需要一个yiled关键字。 生成器一定是迭代器(反之不成立)

        • 生成器是一种特殊的迭代器,它的返回值不是通过return而是用yield
    4. method , classmethod 和 staticmethod

      • method : 通过实例调用时,可以引用类内部的任何属性和方法
      • classmethod : 无需实例化, 可以调用类属性和类方法,无法取到普通的成员属性和方法
      • staticmethod: 无论用类调用还是用实例调用,都无法取到类内部的属性和方法, 完全独立的一个方法,简单的理解成静态方法与类或者实例没有任何关系,一旦调用后,它的内存地址即确定。
    5. 单例模式

      • 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场
    class A(object):
        '''单例模式'''
        obj = None
        def __new__(cls, *args, **kwargs):
            if cls.obj is None:
                cls.obj = object.__new__(cls)
                return cls.obj
            else:
                return cls.obj
    
    1. Python 性能之困
      i. 计算密集型
      * CPU 长时间满负荷运行,如图像处理、圆周率计算等
      * 计算密集型: 用 C 语言补充
      * Profile, timeit
      ii. I/O 密集型: 网络 IO,文件 IO, 设备 IO 等
      * 多线程 / 多进程 / 协程
      * 阻塞 -> 非阻塞
      * 同步 -> 异步
      iii. GIL 全局解释器锁-- 他能确保任何时候都只有一个Python线程执行

    2. 进程,线程,协程

      • 进程: 进程资源消耗大,系统整体开销大,数据通信不方便
      • 线程: 资源消耗小,可以共享数据,上下文开销大,按时间片强制切换,不够灵活
      • 协程: 内存开销更小,上下文开销更小,可以根据事件进行切换,更加有效的利用CPU.
    3. 什么是同步,异步,阻塞,非阻塞

    =====

    1. 字符串

    help(str.replace) 返回方法的帮助信息,注意这里不应该是执行该方法

    1. 字符串方法:

    str.find() 返回所找到的第一个字符串的索引的位置
    str.replace('old','new') 替换方法
    str.split('') 通过选定的分隔符进行切割
    str.upper() 把字符串变为大写字母
    str.isalpha() 判断是否为字母
    str.isdigit() 判断是否为数字
    str.rstrip() 去掉字符串右边的空格

    1. 模式匹配:

    import re
    match = re.match("pattern","string") # pattern里可以使用()来对所需要的信息进行取用
    match.groups() # 使用这个可以对取用的结果进行读取

    1. 列表

    list.append()
    list.pop() # 删除特定位置的元素
    list.insert() # 在指定位置插入元素
    list.sort() # 按照特定进行排序 --改变列表
    list.reverse() # 进行翻转 --改变列表

    1. 列表解析式
      [raw[1] for row in list if row[1] < 1] # 这里添加了判断条件 Pythonic

    2. 嵌套

    列表的嵌套可以形成数组,多维数组

    1. 字典

    字典无序,但是想用有序可使用 .keys()等方法将列表顺序出来.

    1. if

    不存在键测试,防止程序报错

    1. 元组

    不可变,防止数据在传递过程中被修改.
    元组是无序的,相当于一个无值的字典的键.

    1. 三元表达式:

    h = a-b if a>b else a+b

    1. 逻辑或

    h = x or y 只有x为假的时候才会计算y

    1. lambda 表达式:

    lambda 参数: 运算
    常常搭配map 函数来进行操作

    相关文章

      网友评论

        本文标题:python中的常见问题--持续更新

        本文链接:https://www.haomeiwen.com/subject/jalcgftx.html