python知识笔记

基础知识

1 . 除了常规比较操作,以下值或返回True或False:
- 数字(0,0.0返回false)
- 数据类型None返回false
- 集合类型(list,tuple,dict,set)元素数量为0返回false
2 . python内置上述四种集合可用于迭代(for… in …),其中字典类型以key值返回,且和set一样内容是乱序(可改用collections模块)。
3 . 只要类中有iternext函数,可以作为迭代器对象在for语句中使用。

    # define a Fib class
    class Fib(object):
        def __init__(self, max):
            self.max = max
            self.n, self.a, self.b = 0, 0, 1

        def __iter__(self):
            return self

        def __next__(self):
            if self.n < self.max:
                r = self.b
                self.a, self.b = self.b, self.a + self.b
                self.n = self.n + 1
                return r
            raise StopIteration()

    # using Fib object
    for i in Fib(5):
        print(i)

yield关键字也可实现迭代效果。yield 语句每次执行时,立即返回结果给上层调用者,而当前的状态仍然保留,以便迭代器下一次循环调用。

    def fib(max):
        a,b=0,1
        while max:
            r=b
            a,b=b,a+b
            max-=1
            yield r
    #using generator
    for i in fib(5):
        print(i)

4 . 三目运算符:python没有类似 condition ? value1 : value2 三目操作符,不过python可以通过 if-else 的行内表达式完成类似的功能。

    var=var1 if condition else var2

5 . 使用if __name__ == '__main__':的代码称为自调用,可用于单元测试等。
6 . 函数参数摆放位置:特定参数>默认参数>可变参数>关键字参数。可变参数以()和变量名组合,为可迭代的对象。关键字参数(*)在函数内部封装成字典。

    def report(name, *grades):
        total_grade = 0
        for grade in grades:
            total_grade += grade
        print(name, 'total grade is ', total_grade)

    def portrait(name, **kw):
        print('name is', name)
        for k,v in kw.items():
            print(k, v)

7 . list列表已经实现了append、insert、remove、切片、index(查找)、count、sort等功能。
8 . 文件读取(w,r,a,+)

  • r只读 ,r+覆盖读写 ,文件不存在不创建会报错
  • w新建只写(不能读出) , w+新建读写,二者都会清空文件内容,文件不存在会创建
    • a附加写方式打开,不可读,a+附加读写方式打开

9 . 高级函数
- zip

    a=[1,2,3]
    b=[4,5,6]
    ab=zip(a,b)
    print(list(ab))
    for i,j in zip(a,b):
        print(i/2,j*2)
    '''
    [(1, 4), (2, 5), (3, 6)]
    0.5 8
    1.0 10
    1.5 12
    '''    
  • lambda
    fun= lambda x,y:x+y
    x=int(input('x='))    #这里要定义int整数,否则会默认为字符串
    y=int(input('y='))
    print(fun(x,y)
  • map
    def fun(x,y):
        return x+y
    print(list(map(fun,[1],[2])))
    print(list(map(fun,[1,2],[2,4])))
    print(fun([1,2],[3,4]))
    '''
    [3]
    [3, 6]
    [1, 2, 3, 4]
    '''
  • pickle

10 . 深copy和浅拷贝
一个对象的id值在CPython解释器里就代表它在内存中的地址,如id(var)
浅拷贝只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。如copy.copy(var),深拷贝对外围和内部元素都进行了拷贝对象本身,如copy.deepcopy(var)
11 . 正则表达式
正则

多线程threading

  • 系统模块threading。
  • 使用join函数控制执行完的先后顺序。(线程同步)
  • 多线程会遇到Global Interpreter Lock (GIL)问题。
    尽管Python完全支持多线程编程, 但是解释器的C语言实现部分在完全并行执行时并不是线程安全的。 实际上,解释器被一个全局解释器锁保护着,它确保任何时候都只有一个Python线程执行。 GIL最大的问题就是Python的多线程程序并不能利用多核CPU的优势 (比如一个使用了多个线程的计算密集型程序只会在一个单CPU上面运行)。
  • 线程锁
    执行共享内存前,lock.acquire();执行后,lock.release()

多进程multiprocessing

  • 多进程弥补了多线程GIL的问题并充分利用了多核和threading的使用方法。
  • 常用到进程池Pool,map、apply_async。
  • 共享内存使用Value、Array(一维的)
  • 使用内存锁解决内存争用

原教程链接:https://morvanzhou.github.io/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值