python
BD熊斯基
不积跬步无以至千里,JavaScript+Python助我前行
展开
-
python教程(十四)之网络编程(2.urllib)
#当你需要从某个地址上的页面获取想要的信息时,urllib是你最好的选择,不过实际上urllib2更好一些,但对于简单的下载,urllib完全没问题#urllib2更适合需要实现http身份验证或cookie,以及编写扩展来处理自己的协议,感兴趣可以自己了解一下1.打开远程文件from urllib.request import urlopen,urlretrievewebpage=urlopen("http://www.python.org")#与打开本地文件open几乎一样的方法,只是url原创 2020-10-11 16:32:11 · 124 阅读 · 0 评论 -
python教程(十四)之网络编程(1.socket)
#学习网络编程前应先了解它是用来做什么的#python可以编写以各种方式使用网络的程序,一些模块提供了方法实现这一目的#SocketSever和相关的类,以及能同时处理多个连接的方法,这将是本章的内容重点1.套接字#套接字是网络编程的一个基本组件,基本上作为一个信息通道,服务端和客户端各有一个程序#套接字在服务端被创建后,让它等待连接请求,它将在某个由ip和端口号组成的地址处监听,直到客户端套接字建立连接2.本机服务端:import sockets=socket.socket()#获取当原创 2020-08-05 18:20:36 · 164 阅读 · 0 评论 -
python教程(十三)之数据库(4.直接执行python)
#除了之前的可读性强的python,你还可以用直接执行python的方式对数据库操作,当然这样可读性就差,不过灵活性更强#我使用我之前文章中的脚本添加了一条id=002,name=火腿肠 的数据import sqlite3,sysconn=sqlite3.connect("goods.db")curs=conn.cursor()query="select * from goods where "+sys.argv[1]print(query)curs.execute(query)prin原创 2020-08-05 18:17:13 · 137 阅读 · 0 评论 -
python教程(十三)之数据库(3.python执行数据库操作)
#数据库本就可以执行对自己的操作,那么python就应当充当增强可读性的角色#引入sqlite模块import sqlite3#连接数据库conn=sqlite3.connect("goods.db")#设置游标curs=conn.cursor()#首先查询数据库是否存在goods这个表curs.execute("select count(*) from sqlite_master where type='table' and name='goods'")if curs.fetchall(原创 2020-07-28 22:44:47 · 122 阅读 · 0 评论 -
python教程(十三)之数据库(2.SQL语句)
1.创建表#create table 表名 (键和属性用逗号隔开,并需要设置数据类型,例如text,float,varchar等等)2.插入表#insert into 表名 (各属性用逗号隔开) values (对应的值,按照属性顺序排列,用逗号隔开)#一个例子:import sqlite3conn=sqlite3.connect("sql.db")curs=conn.cursor()#执行数据库语句时,使用execute#primary key是你默认的关键字,它不能重复curs.ex原创 2020-07-27 17:52:33 · 147 阅读 · 0 评论 -
python教程(十三)之数据库(1.SQLite)
#SQLite数据库是python标准库中的一个资源,完全不用再去安装什么了,非常适合学习使用python操作数据库#一般来说,SQLite体积较小,不支持高并发访问,更适合手机和桌面应用#而MySql体积大,支持高并发,通常都作为庞大复杂程序的数据库#除此之外,Oracle,SQL Sever等等都是高端商业数据库,一些大厂肯定会用它们#只不过其实对我们学习python的人来说,学习数据库不能算得上复杂,并非深入,你只需要知道基础的数据库操作语句即可1.导入模块sqlite3import sq原创 2020-07-24 18:58:52 · 105 阅读 · 0 评论 -
python教程(十二)之图形界面(2.获取点击位置坐标)
#command是给按钮指定动作,这是一种特殊事件处理,但Tkinter远不止这一种事件处理机制#例如你想获取你在界面中点击处的坐标from tkinter import *top=Tk()def click_pos(event) : print(event.x,event.y)top.bind("<Button-1>",click_pos)mainloop() #105 96,这是我随便点击界面后的返回值#这里来解释一下,bind是通用事件处理方法,是鼠标左键单原创 2020-07-23 17:54:41 · 998 阅读 · 0 评论 -
python去除文本文件所有空行与多余空格
#使用方法:#1.在当前文件目录下打开命令执行窗口#2.输入python util.py <test_input.txt> test_out.txt#3.打开test_out.txt看结果#文件名:util.pyimport sysdef lines(file) : for line in file :yield line yield '\n'def blocks(file) : block=[] for line in lines(file) :原创 2020-07-23 16:05:58 · 4230 阅读 · 0 评论 -
python教程(十二)之图形界面(1.应用窗口)
#python程序能够创建图形用户界面,也就是GUI,有和我一样做过前端的同学也许会觉得像html+css那样就能做出很精美的页面#实际上python的页面比较粗糙,不过python注重数据处理,JavaScript更注重脚本控制,所以python的GUI会显得比较笨拙1.TKinter#TKinter是python标准的GUI工具包,你需要导入这个模块,而html你只需要写标签就行了,只有遇到复杂的界面要求时才需要导入类似bootstrap之类的库import tkinter as tktop=原创 2020-07-16 18:14:20 · 938 阅读 · 0 评论 -
python教程(S)之文件与模块(1.shelve)
#特殊章节是为了在不加重其他章节的学习负担而设立的,这些知识大多理解和掌握起来有些难度,如果我把这些放进原有章节中,可能会削减你的学习热情#所以我单拿出这些内容,虽然这些都很重要需要你掌握,但你暂时没掌握也不影响你后面的学习1.shelve#shelve应当属于《10.模块》与《11.文件》之间的内容#其作用在于你可以自动序列化文本文件内容,我举个例子import shelvea=shelve.open("shelve.txt")for i in range(26) : try:原创 2020-07-15 18:30:24 · 174 阅读 · 0 评论 -
python教程(十一)之文件(4.进阶文件方法)
#先来写入一个多行文本f=open("demo.txt","w")for i in range(10) : a="#"+str(i) f.write(a+" welcome to python\n")f.close()1.readline#读取一行的文本,设置参数后返回的则是每行的前几个字符a=open("demo.txt")print(a.readline(),a.readline(),sep="")#0 welcome to python#1 welcome to p原创 2020-07-13 18:53:50 · 93 阅读 · 0 评论 -
python教程(十一)之文件(3.文件基本方法)
#本节介绍一些对文件对象支持的方法1.read#读取数据,参数是数字,意义为每次读取的字符数量f=open("demo.txt")print(f.read(2))#Heprint(f.read(3))#llo#每次read并非从文件开始处重新开始,而是上次read的结尾位置for item in range(6): print(f.read(1))# ,# W# o# r# l# d#你可以用循环的方式一个个或多个获取文本字符#如果使用read()不含参数,则读取文原创 2020-07-09 17:57:02 · 121 阅读 · 0 评论 -
python教程(十一)之文件(2.文件模式)
文件模式概念#调用open函数时,如果只设定文件名,会获得一个可读取的文件对象,如要进行写入,需要参数mode设定为w,参数mode可以取多个值#open默认采用r模式,即只读,实际上就是下面这样,只不过默认的文件模式不必写出来file_txt=open("demo.txt","r")#其他的文件模式还有’w’,‘x’,‘a’,‘b’,‘t’,’+'等'w’是写入模式#在写入模式下,原有内容将被删除并替换为你新输入的内容#注意,如果不存在这个文件,将会自动创建一个,并写入你write的内容原创 2020-07-07 18:01:20 · 227 阅读 · 0 评论 -
python教程(十一)之文件(1.打开文件)
#可使用函数open,它是自动导入的模块io的内容之一#open函数唯一必须的参数是文件名,我这里同目录下有一个demo.txt文件file_txt=open("demo.txt")print(file_txt)#<_io.TextIOWrapper name='demo.txt' mode='r' encoding='cp936'>#但获取的数据不是可读性强的内容,需要再次使用方法readprint(file_txt.read())#璇锋眰杈撳嚭#输出了一段中文乱码,这是因原创 2020-07-07 17:57:44 · 1047 阅读 · 0 评论 -
python教程(十)之模块(5.探索模块)
#掌握探索模块的重要性在于你很多时候不需要把每个模块的功能和方法掌握的那么清晰import math#导入一个模块,你知道这是数学模块math,但你知道这里面都有什么函数吗,以及对math的解释是什么1.dir#查明模块包含什么,列出对象的所有属性,对于模块,它列出所有的函数、类、变量等a=[n for n in dir(math)]print(a)# ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos原创 2020-06-27 22:23:40 · 189 阅读 · 0 评论 -
python教程(十)之模块(4.包和多层模块导入)
#你不可能永远都用import first2这种方式导入模块,因为模块会很多你需要为它分类#其次你可能在不同分类中定义同一名称的模块#所以这里引入“包”这个打包模块#能看出我有一个mypackage的文件夹,下面有__init__.py,它是包的象征,它可以是空的,但如果没有它,包就只是个文件夹#它还有个talk.py,其次还有个others文件夹,它下面除了没有文件夹,其他组成和mypackage一样#第一层的talk.py#print(“Just Talk”)#第二层的talk.py#原创 2020-06-26 14:17:57 · 654 阅读 · 0 评论 -
python教程(十)之模块(3.模块位置和python模块变量修改)
1.将模块放入正确的位置#sys.path是用来获取和设置你模块路径的方式import sys,pprintpprint.pprint(sys.path)# ['e:\\python项目\\基础训练',# 'E:\\Anaconda\\python36.zip',# 'E:\\Anaconda\\DLLs',# 'E:\\Anaconda\\lib',# 'E:\\Anaconda',# 'E:\\Anaconda\\lib\\site-packages',# 'E:\\An原创 2020-06-25 12:20:05 · 343 阅读 · 0 评论 -
python教程(十)之模块(2.模块作用域)
1.为何需要模块#模块值得创建的原因在于它们像类一样,有自己的作用域,因此模块定义的类和函数以及对其进行赋值的变量都被视为模块的属性#有一个hello1.py文件#内容为:def hello() : print("Hello World!")#我使用import hello1的方式导入import hello1hello1.hello()#Hello World!#我们可以使用这种方法直接使用模块中的方法hellodef hello() : print("Hello原创 2020-06-24 18:04:45 · 315 阅读 · 0 评论 -
python教程(十)之模块(1.模块导入)
#之前我已经讲过关于from import和import两种模块导入方式#现在我来讲一些更细节的东西1.第一次导入与多次导入#在同目录下,有一个first.py文件#里面的内容是:#print(“First Python”)import first#这里我直接导入了这个py文件的名称#First Python 输出了这样的结果#这点你应该能明白,但如果我再次导入,它还会输出这样的结果吗import first#First Python import first#结果是什么都没原创 2020-06-23 19:32:00 · 157 阅读 · 0 评论 -
python教程(九)之特性(8.杨辉三角解法)
期待输出:[1][1, 1][1, 2, 1][1, 3, 3, 1][1, 4, 6, 4, 1][1, 5, 10, 10, 5, 1][1, 6, 15, 20, 15, 6, 1][1, 7, 21, 35, 35, 21, 7, 1][1, 8, 28, 56, 70, 56, 28, 8, 1][1, 9, 36, 84, 126, 126, 84, 36, 9, 1]这是个杨辉三角,不知道的可以查一下,使用递归生成器,生成这样的结果利用生成器每行端点与结尾的数为1.原创 2020-06-21 18:50:09 · 249 阅读 · 1 评论 -
python教程(九)之特性(7.迭代器)
#何为迭代器,首先迭代器只适用于可迭代对象#一类是集合数据类型,如list、tuple、dict、set、str等;#一类是generator,包括生成器和带yield的generator function#凡是可以被for循环的全是可迭代对象#__iter__返回一个迭代器,它是包含__next__方法的对象,调用这个方法时可不提供任何参数#迭代器与列表本身的区别在于,如果你想逐个获取某个计算的值,大可不必生成一个列表class Fibs : def __init__(self) :原创 2020-06-21 09:17:25 · 123 阅读 · 0 评论 -
python教程(九)之特性(6.递归生成器)
#试想一下,如果我想把[[1,2],[3,4],5]变为[1,2,3,4,5],需要做什么#大致的办法你应该可以很快想到,利用循环遍历,如果是列表就拆开#那如果[[1,[2],3],[4,5]]甚至更多层,用循环还能处理的了吗#递归会是你最好的选择,利用我们之前学的生成器,我们可以更好地做到def flatten(arg) : try : for sublist in arg : for element in flatten(sublist) :原创 2020-06-19 22:46:28 · 198 阅读 · 0 评论 -
python教程(九)之特性(5.生成器)
#列表生成器可以生成我们需要的列表,但是有时候我们不需要一整个列表,只需要一部分#因为列表不仅占用内存,而且当我们需要处理它的时候经常需要进行迭代#活用生成器则会避开这个问题a=(x*x for x in range(10))print(a)#<generator object <genexpr> at 0x00000000027F5E08>#根据结果,我们一般称生成器为generator,这可能是工作上的术语,所以记一下比较好#可以看到生成器不像列表那样直接能看到里原创 2020-06-19 22:44:55 · 132 阅读 · 0 评论 -
python教程(九)之特性(4.列表生成器)
#本来这里应该讲生成器与迭代器,但为了更好地理解之后的内容,在这里先说一下列表生成器#还记得第五章第八节简单推导的内容吗print( [x*x for x in range(10) if not x%3==0])#[1, 4, 16, 25, 49, 64]#列表生成器可以快速生成一个经过算法处理过的列表#并且这个循环可以是多层的print( [a+b for a in "ABC" for b in "123"])#['A1', 'A2', 'A3', 'B1', 'B2原创 2020-06-18 18:42:41 · 110 阅读 · 0 评论 -
python教程(九)之特性(3.函数super)
#super 调用这个函数时,将当前类和当前实例作为参数#对其返回的对象调用方法时,调用的是超类(例如之前的Bird)而不是当前类#所以在SongBird的构造函数中,可以使用super(SongBird,self)#在python3中,super可不提供任何参数class Bird : def __init__(self) : self.hungry=True def eat(self) : if self.hungry==True :原创 2020-06-18 17:43:21 · 108 阅读 · 0 评论 -
python教程(九)之特性(2.重写构造函数)
#为何要重写,试着回忆一下之前的继承#如果在子类继承后,一些方法和属性并不想继承超类的,那就需要重写子类中的内容#重写是继承机制的重要部分,对构造函数尤其重要class Bird : def __init__(self) : self.hungry=True def eat(self) : if self.hungry==True : print("开始吃东西") self.hungry=False原创 2020-06-14 14:29:20 · 522 阅读 · 0 评论 -
python教程(九)之特性(1.构造函数)
#特性,指的是python自身就拥有的方法,而不是需要编程者自己写函数来实现#构造函数,不同于普通方法,它将在对象创建后自动调用它们class Foobar : def init(self) : passf=Foobar()f.init()#例如init这个类中的方法,如果你需要在对象中添加属性并赋值,就需要调用这个方法#而实际上并不需要,只要使用构造函数from warnings import warnclass Person : def __init__原创 2020-06-14 14:27:22 · 172 阅读 · 0 评论 -
python教程(八)之异常(8.Warn)
#相对于终止程序的异常,有一些不那么异常的情况,只是需要注意或警告import warnings#利用warnings模块warnings.warn("I must to warning you")# e:/python项目/基础训练/8.异常-8.Warn.py:3: UserWarning: I must to warning you# warn("I must to warning you")#UserWarning是引发的异常,可指定将引发的异常,只要是Warning的子类#如果想原创 2020-06-11 21:46:56 · 655 阅读 · 0 评论 -
python教程(八)之异常(7.函数中的异常)
#还记得多态对吗,那个不愿意知道对象是什么类型,只想执行方法的东西a={"name":"bob","age":19}def person(person) : print("name is "+person["name"]) print("age is "+str(person["age"])) try : print("sex is "+str(person["sex"])) except KeyError : print("This on原创 2020-06-11 21:44:43 · 118 阅读 · 0 评论 -
python教程(八)之异常(6.finally)
#finally作为try/except的子句,可用于发生异常时清理变量或其他清理工作x=Nonetry : x=1/0finally : print("Cleaning up") del x # Cleaning up# Traceback (most recent call last):# File "e:/python项目/基础训练/8.异常-6.finally.py", line 4, in <module># x=1/0# Ze原创 2020-06-11 21:43:42 · 138 阅读 · 0 评论 -
python教程(八)之异常(5.else语句)
#对于try/except也可以使用else实现循环一样的异常判断while True : try : a=int(input("请输入第一个数字")) b=int(input("请输入第二个数字")) print(a/b) except Exception as e: print(e) else : break # 请输入第一个数字11# 请输入第二个数字a# invalid litera原创 2020-06-11 21:42:33 · 131 阅读 · 0 评论 -
python教程(八)之异常(4.异常类)
1.和创建普通类一样,使用class,但其必须直接或间接继承Exceptionclass SomeClass(Exception) : name:"" def get_error(self,error) : print(error)a=SomeClass()try : 1/0except Exception as e: a.get_error(e)# E:\python项目\基础训练>E:/Anaconda/python.exe e:/pyth原创 2020-06-09 22:44:51 · 273 阅读 · 0 评论 -
python教程(八)之异常(3.常见异常与异常合集)
常见异常#Exception 几乎所有的异常类都是从它派生而来的#AttributeError 引用属性或给它赋值失败时引发#OSError 操作系统不能执行指定的任务(如打开文件)时引发,有多个子类#IndexError 使用序列中不存在的索引时引发,为LookupError的子类#KeyError 使用映射中不存在的键时引发,为LookupError的子类#NameError 找不到名称(变量)时引发#SyntaxError 代码不正确时引发#TypeError 将内置操作或函数用于类型原创 2020-06-09 22:41:39 · 200 阅读 · 0 评论 -
python教程(八)之异常(2.引发异常raise)
#实际上,你可以通过语句引发异常,并能自定义异常类#以此满足你对异常的特殊需求,尽管内置异常已经十分丰富1.raise语句raise Exception# Traceback (most recent call last):# File "e:/python项目/基础训练/8.异常-2.引发异常.py", line 4, in <module># raise Exception# Exceptionraise Exception("meet a error")#原创 2020-06-08 22:25:47 · 258 阅读 · 0 评论 -
python教程(八)之异常(1.异常是什么)
1/0# Traceback (most recent call last):# File "e:/python项目/基础训练/8.异常-1.异常是什么.py", line 1, in <module># 1/0# ZeroDivisionError: division by zero#python的异常确切来说是使用异常对象来表示异常状态,并在错误时引发异常#在异常对象未被处理(捕获)时,程序将终止并显示一条错误信息(Traceback)...原创 2020-06-08 22:23:47 · 116 阅读 · 0 评论 -
python教程(七)之抽象(11.抽象基类)
#既然是抽象,那么肯定不会是要求严格的方式进行#上一章说过手工检查各个方法,但python几乎只依赖鸭子类型#鸭子类型的理解:如果走起来像鸭子,叫起来像鸭子,那它就是鸭子#通过假设所有对象都能完成其工作,并偶尔使用hasattr来实现#python通过引入模块abc提供了官方的解决方法#一般来说,抽象类是不能至少不应该实例化的类,其职责在于定义子类应实现的一组抽象方法from abc import ABC,abstractmethodclass Talker(ABC) : @abst原创 2020-06-04 21:57:23 · 149 阅读 · 0 评论 -
python教程(七)之抽象(10.接口和内省)
#接口的概念与多态相关,因为在处理多态对象时,你只关心接口对外暴露的方法和属性,不会显式的指定对象必须包含哪些方法才能用作参数class Calculator : def calculate(self,expression) : self.val=eval(expression)class Talker : def talk(self) : return "The value is {}".format(self.val)class Calculator原创 2020-06-04 21:54:56 · 212 阅读 · 0 评论 -
python教程(七)之抽象(9.深入继承)
要确定一个类是否是另一个类的子类,可以使用issubclass内置方法class Member : members=[] def filter_members(self,add_members) : return [x for x in add_members if x not in self.members]class Filter(Member) : members=["bob"]print(issubclass(Filter,Member)) #Tru原创 2020-06-02 21:49:42 · 97 阅读 · 0 评论 -
python教程(七)之抽象(8.超类过滤)
#何为超类我之前已经说过,当一个类拥有子类时,他就是这个子类的超类#这里主要讲一下实际应用中的一个技巧class Member : members=[] def filter_members(self,add_members) : return [x for x in add_members if x not in self.members]class Filter(Member) : members=["bob"]mem_lst=["lily","bob",原创 2020-06-02 21:46:11 · 118 阅读 · 0 评论 -
python教程(七)之抽象(7.类和对象的作用域)
#我们已经知道了类除了特殊(非法)方法可以从外部访问#其他时候都保持隐蔽的状态,那么它的作用域是怎样的呢class MemberCounter : member=0 def add(self) : MemberCounter.member+=1 def get_member(self) : print(MemberCounter.member) def add_self(self) : self.member+=1原创 2020-06-01 18:49:48 · 145 阅读 · 0 评论