Python基础
文章平均质量分 73
是金子总会发光
这个作者很懒,什么都没留下…
展开
-
Python笔记——访问数据库
# 导入MySQL驱动:>>> import mysql.connector# 注意把password设为你的root口令:>>> conn = mysql.connector.connect(user='root', password='password', database='test')>>> cursor = conn.cur...原创 2018-09-27 16:08:52 · 189 阅读 · 1 评论 -
Python笔记——文档测试
如果你经常阅读Python的官方文档,可以看到很多文档都有示例代码。比如re模块就带了很多示例代码:>>> import re>>> m = re.search('(?<=abc)def', 'abcdef')>>> m.group(0)'def'可以把这些示例代码在Python的交互式环境下输入并执行,结果与文档中的示...原创 2018-09-11 18:21:26 · 153 阅读 · 0 评论 -
Python笔记——调试
程序能一次写完并正常运行的概率很小,基本不超过1%。总会有各种各样的bug需要修正。有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug。1、print()def foo(s): n = int(s) print('>>> n = %d' % n...原创 2018-09-11 17:07:44 · 108 阅读 · 0 评论 -
Python笔记——错误处理
高级语言通常都内置了一套try...except...finally...的错误处理机制,Python也不例外。一、try的机制try: print('try...') r = 10 / 0 print('result:', r)except ZeroDivisionError as e: print('except:', e)finally: ...原创 2018-09-11 15:57:58 · 361 阅读 · 0 评论 -
Python笔记——使用__slots__
1、正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性:class Student(object): # 创建一个class实例 passs = Student()s.name = 'Michael' # 动态给实例绑定一个属性print(s.name)def set_age(self, a...原创 2018-08-30 15:15:40 · 248 阅读 · 0 评论 -
Python笔记——使用枚举类
当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份:JAN = 1FEB = 2MAR = 3...NOV = 11DEC = 12好处是简单,缺点是类型是int,并且仍然是变量。更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能:from enum import E...原创 2018-09-04 18:28:28 · 258 阅读 · 0 评论 -
Python笔记——偏函数
Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。1、要注意,这里的偏函数和数学意义上的偏函数不一样。在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点:int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换:>>> i...原创 2018-08-25 20:28:12 · 94 阅读 · 0 评论 -
Python笔记——装饰器
1、由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。>>> def now():... print('2015-3-25')...>>> f = now>>> f()2015-3-252、函数对象有一个__name__属性,可以拿到函数的名字:>>> now...原创 2018-08-25 17:02:53 · 107 阅读 · 0 评论 -
Python笔记——匿名函数lambda
当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。1、计算,以map()函数为例,计算f(x)=时,除了定义一个f(x)的函数外,还可以直接传入匿名函数:print(list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])))# 结果[1, 4, 9, 16, 25, 36, 49, 64, 81]2、...原创 2018-08-25 15:29:25 · 565 阅读 · 0 评论 -
Python笔记——实例属性和类属性
由于Python是动态语言,根据类创建的实例可以任意绑定属性。给实例绑定属性的方法是通过实例变量,或者通过self变量:class Student(object): def __init__(self, name): self.name = names = Student('Bob')s.score = 90但是,如果Student类本身需要绑定一个属...原创 2018-08-29 21:16:40 · 179 阅读 · 0 评论 -
Python笔记——获取对象信息
当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢?1、使用type()print(type(123))print(type('ssddfr'))print(type(None))# 结果<class 'int'># 结果<class 'str'># 结果<class 'NoneType'>如果一个变量指向函数或者类,也...原创 2018-08-29 20:34:48 · 95 阅读 · 0 评论 -
Python笔记——文件读写
IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可...原创 2018-09-11 18:22:59 · 1145 阅读 · 0 评论 -
Python笔记——使用元类
type()动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。比方说我们要定义一个Hello的class,就写一个hello.py模块:class Hello(object): def hello(self, name='world'): print('Hello, %s.' % name)当Python解释器载入...原创 2018-09-05 16:57:18 · 153 阅读 · 0 评论 -
Python笔记——web开发之HTTP协议简介
在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以: HTML是一种用来定义网页的文本,会HTML,就可以编写网页; HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。 在举例子之前,我们需要安装Google的Chrome浏览器。为什么要使用Chrome浏览器而不...原创 2018-09-25 17:55:52 · 128 阅读 · 0 评论 -
Python笔记——正则表达式
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。...原创 2018-09-13 21:05:05 · 127 阅读 · 0 评论 -
Python笔记——分布式进程
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个进程中,依靠网络通信。由于managers模块...原创 2018-09-13 20:39:16 · 114 阅读 · 0 评论 -
Python笔记——进程和线程的优缺点
我们介绍了多进程和多线程,这是实现多任务最常用的两种方式。现在,我们来讨论一下这两种方式的优缺点。首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker。如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。如果用多线程实现...原创 2018-09-13 16:14:55 · 811 阅读 · 0 评论 -
Python笔记——ThreadLocal
在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁。但是局部变量也有问题,就是在函数调用的时候,传递起来很麻烦:def process_student(name): std = Student(name) # std是局部变量,但是每个函数都要用它,因此必须传进去:...原创 2018-09-13 15:53:54 · 104 阅读 · 0 评论 -
Python笔记——多线程
多任务可以由多进程完成,也可以由一个进程内的多线程完成。我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。Python的标准库提供了两个模块:_thread和threading,_thread是低级...原创 2018-09-13 15:47:52 · 112 阅读 · 0 评论 -
Python笔记——多进程
小结在Unix/Linux下,可以使用fork()调用实现多进程。要实现跨平台的多进程,可以使用multiprocessing模块。进程间通信是通过Queue、Pipes等实现的。 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识。Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用...原创 2018-09-13 11:58:36 · 128 阅读 · 0 评论 -
Python笔记——序列化
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict:d = dict(name='Bob', age=20, score=88)可以随时修改变量,比如把name改成'Bill',但是一旦程序结束,变量所占用的内存就被操作系统全部回收。如果没有把修改后的'Bill'存储到磁盘上,下次重新运行程序,变量又被初始化为'Bob'。我们把变量从内存中变成可存储或传输的过程称之...原创 2018-09-12 18:09:57 · 128 阅读 · 0 评论 -
Python笔记——操作文件和目录
如果我们要操作文件、目录,可以在命令行下面输入操作系统提供的各种命令来完成。比如dir、cp等命令。如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操作系统提供的接口函数,Python内置的os模块也可以直接调用操作系统提供的接口函数。打开Python交互式命令行,我们来看看如何使用os模块的基本功能:>>> impo...原创 2018-09-12 12:00:08 · 229 阅读 · 0 评论 -
Python笔记——StringIO和BytesIO
1、StringIO很多时候,数据读写不一定是文件,也可以在内存中读写。StringIO顾名思义就是在内存中读写str。要把str写入StringIO,我们需要先创建一个StringIO,然后,像文件一样写入即可:>>> from io import StringIO>>> f = StringIO()>>> f.writ...原创 2018-09-12 10:56:08 · 165 阅读 · 0 评论 -
Python笔记——继承和多态
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。1、继承比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印:class Animal(object): def run(se...原创 2018-08-29 17:06:14 · 131 阅读 · 0 评论 -
Python笔记——返回函数
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的:def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结...原创 2018-08-24 17:45:20 · 122 阅读 · 0 评论 -
Python笔记——递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。1、举例计算阶乘,用函数fact(n)表示,则:,只有n=1时需要特殊处理。于是,fact(n)用递归的方式写出来就是:def fact(n): if n==1: return 1 return fact(n-1)*nprint(fact(5))120...原创 2018-08-12 18:09:29 · 192 阅读 · 0 评论 -
Python笔记——定义函数
1、定义新函数在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。自定义一个求绝对值的my_abs函数:def my_abs(x): if x >= 0: return x else: return -xprint(my_abs(...原创 2018-08-02 18:41:40 · 273 阅读 · 0 评论 -
Python笔记——调用函数
1、查看函数用法(1)要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。可以直接从Python的官方网站查看文档:http://docs.python.org/3/library/functions.html#abs(2)也可以在交互式命令行通过help(abs)查看abs函数的帮助信息。2、参数不对的报错调用函数的时候,如果传入的参数数量不对,会报...原创 2018-08-02 15:42:05 · 291 阅读 · 0 评论 -
Python笔记——dict和set
一、dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。1、举例假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:names = ['Michael', 'Bob', 'Tracy']scores = [95, 75, 85]给定一个名字,要查找对应的成绩,就先要在names中找到对应的...原创 2018-08-02 11:30:45 · 167 阅读 · 0 评论 -
Python笔记——迭代
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)1、dict的迭代list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:d = {'a': 1, 'b': 2, 'c': 3}for key in d: pri...原创 2018-08-14 17:29:19 · 116 阅读 · 0 评论 -
Python笔记——for和while循环
一、for循环依次把list或tuple中的每个元素迭代出来,例如:1、names=['Michael', 'Bob', 'Tracy']for name in names: print(name)执行这段代码,会依次打印names的每一个元素:MichaelBobTracy所以for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句。...原创 2018-08-01 20:08:35 · 329 阅读 · 0 评论 -
Python笔记——条件判断
1、计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:age=20if age>=18: print('your age is',age) print('adult')根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么...原创 2018-08-01 11:43:45 · 258 阅读 · 0 评论 -
Python笔记——函数的参数
一、位置参数1、定义的函数def power(x): return x * xprint(power(4))16对于power(x)函数,参数x就是一个位置参数。当我们调用power函数时,必须传入有且仅有的一个参数x。2、定义的函数def power(x, n): s = 1 while n > 0: n = n - ...原创 2018-08-04 10:34:21 · 249 阅读 · 0 评论 -
Python笔记——list和tuple
一、表数据类型叫列表,是一种有序的集合,可以随时添加和删除其中的元素。如:>>> classmates = ['Michael', 'Bob', 'Tracy']1、用len()函数可以获得列表元素的个数2、用索引来访问list中每一个位置的元素,记得索引是从0开始的,最后一个元素的索引是len(classmates) - 1,倒数第二个就是classmates[-2...原创 2018-07-29 18:05:24 · 169 阅读 · 0 评论 -
Python笔记——小备注
1、Python的注释用#,SQL最好用/ * * /2、等号=是赋值,不要等同于数学的等号3、常量就是不能变的变量,如数学符号派π,PI = 3.14159264、Python中有两种除法: /的结果是浮点数,如9/3 = 3.0 //是地板除,如10/3 = 3 即永远是整数,是精确的5、取余数用%,如10%3 = 16、Python区分大小写...原创 2018-07-20 15:45:05 · 167 阅读 · 0 评论 -
Python笔记——字符串编码
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用的Unicode的编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。1、ord()获取字符的整数表示,chr()把编码转换为对应的字符>>> ord('A')65>>> ord('中')20013...原创 2018-07-24 23:30:36 · 186 阅读 · 0 评论 -
Python笔记——切片
1、取一个list或tuple的部分元素是非常常见的操作,但是取前n个元素就需要用到循环:L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']r=[]n=3for i in range(n): r.append(L[i])print(r)['Michael', 'Sarah', 'Tracy']2、对这种经常取指定索引范围的...原创 2018-08-13 15:23:04 · 124 阅读 · 0 评论 -
Python笔记——map/reduce
1、mapmap()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。比如我们有一个函数f(x)=,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:def f(x): return x*xr = map(f, [1, 2, ...原创 2018-08-22 11:27:43 · 132 阅读 · 0 评论 -
Python笔记——定制类
看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。__slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()函数。除此之外,Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类。1、__str__先定义一个Student类,打印一个实例:class St...原创 2018-08-31 18:20:01 · 103 阅读 · 0 评论 -
Python笔记——多重继承
继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。1、假设我们要实现以下4种动物:Dog - 狗狗;Bat - 蝙蝠;Parrot - 鹦鹉;Ostrich - 鸵鸟,采用多重继承。首先,主要的类层次仍按照哺乳类和鸟类设计:class Animal(object): pass# 大类(哺乳动物和鸟类):class Mammal(Animal):...原创 2018-08-31 15:43:19 · 267 阅读 · 0 评论