随笔分类 -  Python基础

摘要:1.多线程 多任务可以由多进程完成,也可以由一个进程内的多线程完成。 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟 阅读全文
posted @ 2021-01-02 18:46 Chen洋 阅读(159) 评论(0) 推荐(0)
摘要:要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识。 Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子 阅读全文
posted @ 2021-01-02 18:35 Chen洋 阅读(179) 评论(0) 推荐(0)
摘要:进程和线程概述 很多同学都听说过,现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有 阅读全文
posted @ 2021-01-02 13:15 Chen洋 阅读(114) 评论(0) 推荐(0)
摘要:今天我将介绍常用工具的Python库,我相信你看完之后也会觉得离不开它们。他们是: Requests.Kenneth Reitz写的最富盛名的http库。每个Python程序员都应该有它。 Scrapy.如果你从事爬虫相关的工作,那么这个库也是必不可少的。用过它之后你就不会再想用别的同类库了。 wx 阅读全文
posted @ 2020-12-17 21:07 Chen洋 阅读(2613) 评论(0) 推荐(0)
摘要:1.文件读写 读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系 阅读全文
posted @ 2020-12-16 17:07 Chen洋 阅读(198) 评论(0) 推荐(0)
摘要:1.单元测试 如果你听说过“测试驱动开发”(TDD:Test-Driven Development),单元测试就不陌生。 单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。 比如对函数abs(),我们可以编写出以下几个测试用例: 输入正数,比如1、1.2、0.99,期待返回值与 阅读全文
posted @ 2020-12-16 16:48 Chen洋 阅读(176) 评论(0) 推荐(0)
摘要:1.调试 程序能一次写完并正常运行的概率很小,基本不超过1%。总会有各种各样的bug需要修正。有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug。 第一种方法简单直接粗暴有效,就是用pri 阅读全文
posted @ 2020-12-16 16:42 Chen洋 阅读(291) 评论(0) 推荐(0)
摘要:1.错误处理 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1。 用错误码来表示是否出错十分不便,因为函数本身应 阅读全文
posted @ 2020-12-16 16:39 Chen洋 阅读(202) 评论(0) 推荐(0)
摘要:1.使用枚举类 当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12 好处是简单,缺点是类型是int,并且仍然是变量。 更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是c 阅读全文
posted @ 2020-12-16 16:32 Chen洋 阅读(180) 评论(0) 推荐(0)
摘要:1.多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。 回忆一下Animal类层次的设计,假设我们要实现以下4种动物: Dog - 狗狗; Bat - 蝙蝠; Parrot - 鹦鹉; Ostrich - 鸵鸟。 如果按照哺乳动物和鸟类归类,我们可以设计出这样的类 阅读全文
posted @ 2020-12-16 15:56 Chen洋 阅读(230) 评论(0) 推荐(0)
摘要:1.使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义class: class Student(object): pass 然后,尝试给实例绑定一个属性: >>> s = Student() 阅读全文
posted @ 2020-12-16 15:23 Chen洋 阅读(164) 评论(0) 推荐(0)
摘要:1.获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> type(123) <class 'int'> >>> type('str') <class 's 阅读全文
posted @ 2020-12-16 15:17 Chen洋 阅读(198) 评论(0) 推荐(0)
摘要:1.继承与多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。 比如,我们已经编写了一个名为Animal的class,有一个ru 阅读全文
posted @ 2020-12-16 15:09 Chen洋 阅读(229) 评论(0) 推荐(0)
摘要:面向对象编程概述 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继 阅读全文
posted @ 2020-12-16 15:04 Chen洋 阅读(429) 评论(0) 推荐(0)
摘要:模块概述 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Mo 阅读全文
posted @ 2020-12-16 14:44 Chen洋 阅读(313) 评论(0) 推荐(0)
摘要:1.装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。 >>> def now(): ... print('2015-3-25') ... >>> f = now >>> f() 2015-3-25 函数对象有一个__name__属性,可以拿到函数的名字: > 阅读全文
posted @ 2020-12-16 14:32 Chen洋 阅读(116) 评论(0) 推荐(0)
摘要:1.返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是, 阅读全文
posted @ 2020-12-16 14:25 Chen洋 阅读(171) 评论(0) 推荐(0)
摘要:概述 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。 而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然 阅读全文
posted @ 2020-12-16 14:20 Chen洋 阅读(330) 评论(0) 推荐(0)
摘要:1.切片 取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 取前3个元素,应该怎么做? 笨办法: >>> [L[0], L[1], L[2]] ['Michael' 阅读全文
posted @ 2020-12-16 13:48 Chen洋 阅读(180) 评论(0) 推荐(0)
摘要:1.函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。 Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可 阅读全文
posted @ 2020-12-16 12:26 Chen洋 阅读(252) 评论(0) 推荐(0)