学学Python提提神
记录一些自己学习Python的过程,以及代码练习。拳不离手曲不离口,程序员不写代码还叫程序员么。天道酬勤,多学学,多写写总是会有收获的,也许能从代码中感悟人生,也许能将人生写入代码。
杨友山
多年软件开发管理经验,曾在腾讯、中兴通讯等企业从事软件开发和管理工作,熟悉技术和开发管理;曾在微软从事售前技术支持,接触过产品销售。目前在从事低代码平台类产品研发相关工作。 擅长.NET领域,前端angular,vue,typescript,Oracle,云计算相关。
展开
-
少说话多写代码之Python学习066——python程序打包01 编译安装
程序开发完成后,我们需要部署给用户使用,一般我们都会将其打包。比如大家在使用windows系统时,安装QQ、微信、除IE外的各种浏览器、看视频软件、word等,都会先下载一个安装包,一般是都是一个EXE或者有多个文件夹的文件,里面包含了一个exe。我们点击exe后,按照提示一步一步,往下安装。Python中其实也可以按这种打包的。有一个工具是Distutils。我们来看看它的使用。在我的工...原创 2018-12-25 00:03:09 · 1394 阅读 · 2 评论 -
少说话多写代码之Python学习065——标准模块(re模块)
Python的re模块主要是正则表达式的操作函数。我们看看主要的几个函数。首先我们要引入re模块。import recompile将包含正则表达式字符串创建为对象。search在目标字符串中按照给定的正则表达式匹配结果match在字符串的开始处匹配指定正则表达式split根据正则表达式分割字符串findall列举出字符串中符合指定正则表达式的所有匹配项sub将字符串中所有符合...原创 2018-12-21 00:09:02 · 1104 阅读 · 0 评论 -
少说话多写代码之Python学习064——标准模块(正则表达式)
Python中re模块包含的是对正则表达式的支持。正则表达式是一个很有趣,对处理字符串作用比较大,我们可以花一点时间了解一下。正则表达式是可以匹配文本片段的一组规则。最简单的正则表达式就是一个字符串,能匹配自身。比如字符串a='迢递嵩高下,归来且闭关',可以匹配字符串b='迢递嵩高下,归来且闭关'。下面我们简单看看正则表达式的一些基本规则。1、通配符正则表达式中一些特殊字符可以匹配多个字符...原创 2018-12-19 23:57:11 · 781 阅读 · 4 评论 -
少说话多写代码之Python学习063——标准模块(shelve模块)
如果我们只需要存少量的数据,一个简单的存储方案是使用shelve模版。我们只需要给他提供一个指定路径的文件名。shelve调用过程是,先调用open函数,参数为文件名。返回值是一个shell对象。这个对象可以用来存储数据,可以作为一个字典来操作,但是键一定是字符串类型的。操作完成后调用close函数。看下shelve的简单使用,import shelve#参数为文件名,会在当前运行目录...原创 2018-12-18 23:39:40 · 990 阅读 · 0 评论 -
少说话多写代码之Python学习062——标准模块(random模块)
random主要是产生随机数。不过实际上,不论哪种语言中所谓的随机数,其实都不是真正意义的随机数。random中的SystemRandom可以让数据接近真正的随机数。我们通过下面的例子来看看随机数的使用。我们在一段时间内产生随机时间。from random import *from time import *#随机时间date1 = (2018,1,1,0,0,0,-1,-1,-1...原创 2018-12-16 23:26:10 · 1158 阅读 · 0 评论 -
少说话多写代码之Python学习061——标准模块(time模块)
日期模块主要是处理日期的,可以实现获取当前时间、操作时间和日期、将字符串格式化为日期以及将日期格式化为字符串。主要函数有,asctime 将时间元组转换为字符localtime 将秒数转换为日期元组,mktime 将时间元组转换为本地时间sleep 休眠strptime 将字符串解析为时间元组time 当前时间import timenow = time.asctime()p...原创 2018-12-15 23:34:55 · 892 阅读 · 0 评论 -
少说话多写代码之Python学习060——标准模块(双端队列)
双端队列可以从队列的两端加入和删除元素。比如,在需要按照元素增加的顺序来移除元素时非常有用。看下面的使用,先产生一个双端队列。from collections import dequeq = deque(range(5));print(q)输出deque([0, 1, 2, 3, 4])q.append(99)q.appendleft(999)print(q)输出...原创 2018-12-12 23:35:06 · 995 阅读 · 0 评论 -
少说话多写代码之Python学习059——标准模块(堆)
heap堆是一种优先队列,用优先队列可以以任意顺序增加对象。并且在任何时间找到最小元素。Python中有一个包含一些堆操作函数的模块heapq。包括如下函数,heappush(heap,x) 将x入堆heappop(heap) 将堆中最小的元素弹出heapify(heap) 将heap属性强制应用到任意列表heapreplace(heap,x) 将堆中最小的元素弹出,同时将x入堆nlar...原创 2018-12-11 23:29:57 · 1056 阅读 · 0 评论 -
少说话多写代码之Python学习058——标准模块(集合)
来看看集合(set)的使用。集合类set在sets模块中,Python2.3之后,集合类已经成为语言的一部分,无需再导入sets模块。先看看简单的使用,print(set(range(10)))输出{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}集合中重复值是被忽略的,比如这样,single=set([1,6,7,8,6,6,6,8])print(single)...原创 2018-12-09 18:14:09 · 269 阅读 · 1 评论 -
少说话多写代码之Python学习057——标准模块(看看一些系统模块)
Python语言中有很多系统的模块,我们简单看几个,方便以后自己引用系统模块。一下这些系统模块仅做了解即可。1、syssys模块能够访问Python解释器有关的一些函数和变量,argv 命令行参数exit([arg]) 退出当前程序modules 映射模块名字到载入模块字典path 查找模块所在目录的目录名列表platform 平台标识符stdin 标准输入流stdout...原创 2018-12-09 12:32:44 · 573 阅读 · 0 评论 -
少说话多写代码之Python学习056——标准模块(自定义模块)
我们前面知道了如何导入外部模块,比如常用的math模块,import mathprint(math.sin(90))输出0.8939966636005579我们也可以自己定义一个模块,比如我的程序都在这个目录下,图1然后在当前目录下,再创建一个MyFirstLibrary1.py文件,里面代码如下,MyFirstLibrary1.py:print('这是自定义的...原创 2018-12-07 23:45:13 · 1366 阅读 · 0 评论 -
少说话多写代码之Python学习055——类的成员(生成器的应用举例)
我们来看一个有趣的问题:八皇后问题。这里的皇后是国际象棋中的皇后,虽然我只会玩中国象棋而不会玩国际象棋。这个问题和会不会国际象棋没有关系。八皇后问题描述:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。解决这个问题前,我们引入一个回溯的概念。比如我们走迷宫,前路未可知,向前走总会碰到岔路且...原创 2018-12-07 00:13:56 · 813 阅读 · 0 评论 -
少说话多写代码之Python学习054——类的成员(生成器的方法和模拟生成器))
我们看看生成器的调用以及内部响应,外部访问生成器的send方法,类似于我们方位迭代器的next方法。内部响应的过程是,yield作为表达式使用。生成器重新运行时,yield方法返回一个值,如果send方法被使用,则返回none。比如这样的过程,def repeater(value): while True: new = (yield value) ...原创 2018-12-02 22:40:09 · 752 阅读 · 1 评论 -
少说话多写代码之Python学习053——类的成员(生成器的使用:递归)
前面我们get到了一个技能,生成器。那么如果我们想依次输出一个数组,但是数组中又嵌套数组,又嵌套数组...嵌套未知层,那么如何实现?如果使用for可能就有点不方便了,这时我们需要递归。我们可以这样做,def myFlatten(seq): try: for list in seq: for item in myFlatten(list):...原创 2018-12-01 23:29:48 · 803 阅读 · 1 评论 -
少说话多写代码之Python学习052——类的成员(实现生成器)
前面我们知道类中定义__iter__可以实现迭代器,我们再看看另一个概念,叫生成器。生成器和迭代器是Python中近几年引入的显著地两个特性。生成器是用普通的函数语法定义的迭代器。又这样一个数组:sequen=[[1,2],[3,4],[5]]。我们要按顺序打印出来,def flatten(seq): for list in seq: for item in li...原创 2018-12-01 22:23:55 · 286 阅读 · 1 评论 -
少说话多写代码之Python学习051——类的成员(实现迭代器)
在Python类中,实现迭代器,要定义这个方法,__iter__。这个方法返回一个迭代器,其实质是带有一个next方法的对象。为形象起见,我们定义一个斐波那契数列类。如下,class MyFibs: def __init__(self): self.before=0 self.after=1 def __next__(self): ...原创 2018-11-27 23:41:48 · 965 阅读 · 1 评论 -
少说话多写代码之Python学习050——类的成员(静态方法,类成员方法,getattr,setattr)
我们在访问类的字段时,还有一些过滤的条件,类似于前端语言比如vue Js、anjularJs中过滤器的概念。在3.0以前可以使用比如,__setattr__,__getattr__的方法进行属性的过滤。在3.0以后我们如果对某些字段需要过滤访问,也可以使用这些函数。class Rectangle2: def __init__(self): self.width=0 ...原创 2018-11-25 23:36:40 · 1144 阅读 · 0 评论 -
少说话多写代码之Python学习049——类的成员(property函数)
如果要访问类中的私有变量,根据面向对象原则,是不能直接访问的,这里有一个访问器的概念。将私有变量进行封装,公布出访问的方法。比如下面这样, 一个矩形类型,设置大小,然后获取大小。class Rectangle: def __init__(self): self.width=0 self.height=0 def setSize(self,s...原创 2018-11-24 23:27:24 · 693 阅读 · 0 评论 -
少说话多写代码之Python学习048——类的成员(supper函数)
继承父类的构造函数,前面我们在子类的构造函数中调用:父类__init__(self),调用父类的构造函数。这种做法称之为绑定未绑定的父类构造函数。在Python3.0中可以使用supper函数实现继承父类构造函数。_metaclass_=typeclass Bird: def __init__(self): self.hungry=True def ea...原创 2018-11-22 23:24:12 · 1135 阅读 · 1 评论 -
少说话多写代码之Python学习047——类的成员(调用父类构造函数)
前面我们知道了在Python中如何继承。我们看下面的继承关系,Bird类有一个eat方法。BigBird继承了Bird,并且新增了sing方法。class Bird: def __init__(self): self.hungry=True def eat(self): if self.hungry: print('开...原创 2018-11-20 23:30:01 · 712 阅读 · 0 评论 -
少说话多写代码之Python学习046——类的成员(构造函数)
构造函数是一个类里比较特殊的函数,一般即时不写构造函数,类也会默认有一个默认构造函数,比如像下面这样的,__init__ 其实是一个默认构造函数。 class Book: bookName='书名' def __init__(self): self.bookName='时间简史'b=Book()print(b.bookName)输出时间简史...原创 2018-11-19 23:12:11 · 2061 阅读 · 0 评论 -
少说话多写代码之Python学习045——类07(异常)
异常是程序遇到错误了,这种错误有的是已知的,可预判的。有些是未知的,莫名其妙的。比如,s=1/0print(s)输出Traceback (most recent call last): File "D:/work/Python/Class7.py", line 4, in <module> s=1/0ZeroDivisionError: divisio...原创 2018-11-18 21:31:35 · 207 阅读 · 0 评论 -
少说话多写代码之Python学习044——类06(多继承)
关于继承最麻烦的就是多继承,而Python是支持多继承的。也就是说一个子类可能有两个以上的父类。比如,如下代码,子类继承了两个类,父类的方法在子类中都可以调用。class Programer: language='二进制' def work(self): print('程序员用%s 写代码' %(self.language)) def workDat...原创 2018-11-17 20:43:44 · 192 阅读 · 0 评论 -
少说话多写代码之Python学习043——类05(检查继承关系)
Python中还可以检查类的继承的关系。比如,如下两个类,PrimaryBaLinghouStudent继承了BaLinghouStudent。class BaLinghouStudent: name='学生' school='学校' def init(self,n,s): self.name=n self.school=s ...原创 2018-11-17 10:15:15 · 410 阅读 · 0 评论 -
少说话多写代码之Python学习042——类04(超类 )
来看看Python中类的继承。被继承的类称作超类。先看一个类,定义了一个Student类,有两个属性和三个方法。class Student: name='学生' school='学校' def init(self,n,s): self.name=n self.school=s def goSchool(self): ...原创 2018-11-14 22:42:22 · 1197 阅读 · 1 评论 -
少说话多写代码之Python学习041——类03(类命名空间 )
先看两个函数,实现一个数的平方。def squarter(x): return x*xsquarter2 = lambda x: x*xprint(squarter(9))print(squarter2(8))输出8164调用时,squarter和squarter2可以在全局函数模块定义,也可以在局部函数中定义。这样定义的其实都可称作代码块。而我们定义的...原创 2018-11-11 23:17:19 · 896 阅读 · 0 评论 -
少说话多写代码之Python学习040——类02(类的函数和方法 )
在类里定义函数时的self参数,其实是方法和函数的区别。在类里定义方法时,一般都在方法里加一个默认的参数,可以是,a,c,d的。但是约定俗成就统一叫self。self表示的是这个类的当前实例,一个类有多个实例,那么它属于自己所属于的实例,不会存在实例宁缺的self会指向实例陈皮皮。这里比价特别的是,可以把一个普通函数绑定到方法上使用,普通函数是没有self的,看下面代码,class my...原创 2018-11-10 23:37:56 · 1097 阅读 · 4 评论 -
少说话多写代码之Python学习039——类01(如何定义类 )
在我们使用的面向对象语言中,类是一个基础单元;一个超级程序工程,其基本组成也是类。Python中如何定义一个类,我们来看看,class Person: def setName(self,name): self.name=name def getName(self): return self.name def speak(self):...原创 2018-11-08 22:54:30 · 294 阅读 · 0 评论 -
少说话多写代码之Python学习038——创建函数04(函数的使用 )二分法查找
二分法查找有一个重要前提,就是序列是有序的。在有序的序列中找到一个中点,然后对比目标元素在中点的哪一侧,然后依次这样查找,最终找到。逻辑非常简单。我们主要看在Python中是如何实现的,直接看代码如下,def binarySearch(sequnce,number,lower=0,uper=None): if uper is None:uper=len(sequnce)-1 ...原创 2018-11-07 23:23:39 · 829 阅读 · 0 评论 -
少说话多写代码之Python学习037——创建函数03(函数的使用 )递归
前面学会了如何创建函数,至于函数参数列表的使用,函数内部作用域,函数重载等等,Python中的函数与其他语言的函数并无不同,所以这里不再说明。我们一般学习的第一门编程语言大多是C语言,学习C语言我们每每学的都是递归,二分查找,冒泡排序以及各种排序等等。那么我们选一两样看看Python中如何实现。看看递归和二分法查找,看看函数的使用。递归,递归最大特点是函数自己调用自己,直到最终返回一个值,...原创 2018-11-05 23:36:31 · 799 阅读 · 0 评论 -
少说话多写代码之Python学习036——创建函数02(函数的注释)
下面我们看看Python中如何给函数增加注释,以及如何获取一个函数的基本信息。因为Python是解释运行的语言,增加注释和查看函数信息都需要一些方法实现。如下,定义了一个将字符串生成MD5的函数,并且加了注释,然后可以通过__doc__属性和help函数来获取函数的信息。import hashlibdef genMd5(value): '生成MD5值' return ...原创 2018-11-04 22:49:31 · 230 阅读 · 0 评论 -
少说话多写代码之Python学习035——创建函数01(如何定义函数)
不论哪种面向对象语言,基础是类,而类的主要元素是函数。那么我们看看在Python中如何定义函数,先看一个内建函数callable,判断函数是否可调用。import matha=1b=math.sqrtresult1=callable(a)print(result1)result2=callable(b)print(result2)输出FalseTrue学过编程的...原创 2018-11-03 23:07:10 · 885 阅读 · 0 评论 -
少说话多写代码之Python学习034——其他语句01(pass,del)
pass语句pass就是什么都不做,和C#中的一个分号语句很像。一般用作占位符,比如,这种情况,就是什么都不处理。name=input('请输入姓名')if len(name)<3: print('做什么')elif len(name)==3: #没什么可做的 passelse: print("干点啥")del语句 看下面对两个变量...原创 2018-11-01 22:58:06 · 911 阅读 · 0 评论 -
少说话多写代码之Python学习033——循环语句03(列表导式)
列表导式是利用列表创建新的列表,比如,下面创建一个列表a=[x*x for x in range(10)]print(a)输出[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]创建列表过程中也可以增加条件,比如,只要能被2整除的数。b=[x*x for x in range(10) if x%2 == 0]print(b)输出[0, 4...原创 2018-10-29 23:45:30 · 644 阅读 · 0 评论 -
少说话多写代码之Python学习032——循环语句02(如何迭代-排序和反转)
引入两个函数,排序和反转,它们作用于序列上,并不修改原序列的值,只是返回排序后或反转后的值。下面看看具体的使用,对序列排序,可以根据指定条件升序和降序排序。具体函数使用可自行查询。s=[23,17,31,7,11]sa = sorted(s,reverse=False)print(sa)输出[7, 11, 17, 23, 31]s2=[('b',2),('a',1),...原创 2018-10-28 23:14:52 · 548 阅读 · 0 评论 -
少说话多写代码之Python学习031——循环语句01(如何迭代-索引迭代)
序列对象,我们总可以取到其索引,我们可以使用索引遍历序列的值。比如,我们举一个替换数组中的字符串的例子。首先,我们使用自行取得索引的方式,strings=['abc','abx','aby','abu']for string in strings: if 'ab' in string: index = strings.index(string) ...原创 2018-10-25 23:42:41 · 507 阅读 · 1 评论 -
少说话多写代码之Python学习030——条件语句07(如何迭代-并行迭代)
迭代就是遍历一个集合,取所有的值出来。加入有两个数组,如何一起把数据取出来。看下面代码,names =['Jim','Hanmeimei','Lilei','Tom']ages=[13,14,12,15]for i in range(len(names)): print(names[i],'是',ages[i],'岁')输出Jim 是 13 岁Hanmeimei 是...原创 2018-10-24 22:58:20 · 570 阅读 · 1 评论 -
少说话多写代码之Python学习029——条件语句06(循环)
循环语句不多解释了,不管哪种预言中都是基本的语句,Python中有两种循环,while和for,我们一一看一下用法。while循环使用格式如下,x=1while x<=10: print(x) x+=1输出12345678910 name=''while not name: name= input('请输入名字:')...原创 2018-10-23 23:19:00 · 516 阅读 · 2 评论 -
少说话多写代码之Python学习027——条件语句04(同一运算符、字符串序列比较、布尔运算符)
同一性运算前面看多链式赋值,这里主要说明一下链式赋值后,关于值相同对象不用的有趣问题。看一下比较结果,x=y=["东","西","南","北","中"]z=["东","西","南","北","中"]print(x==y)print(x==z)print(x is y)print(x is原创 2018-10-21 23:12:32 · 845 阅读 · 3 评论 -
少说话多写代码之Python学习026——条件语句03(比较运算符)
条件语句中基本的运算符就是比较运算符。常用的运算符如下:==,<,>,<=,>=,!=,is ,is not, in,not in。具体用法如下,x=1y=1if x==y : print('x等于y')x=1y=2if x<y: print('x小于y')x=3y=2if x>y: pri...原创 2018-10-20 20:55:52 · 330 阅读 · 0 评论