![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
文章平均质量分 64
wait_for_eva
longer
展开
-
python-abspath小坑
目录abspathfrom os import listdirfrom os.path import abspath, isfiledef show(path): for item in listdir(path): if '.idea' == item: continue if isfile(item): continue print(abspath(item)) for原创 2020-06-27 10:56:33 · 2993 阅读 · 0 评论 -
检测框图绘制
图框绘制先看成品,再说细节。图片显示from PIL import Imagefrom matplotlib import patcher, pyplot as pltimage_path = 'xxx.jpg'image = Image.open(image_path).convert('RGB')plt.imshow(image)plt.show()文字显示plt....原创 2020-05-07 17:43:25 · 695 阅读 · 0 评论 -
plt实时动态绘图
plt动态绘图APIplt.ion():开启交互模式plt.ioff():关闭交互模式plt.clf():清理残留图像plt.pause():暂停例子import matplotlib.pyplot as pltplt.ion()x = []y = []for i in range(100): x.append(i) y.append(i ** 2) ...原创 2020-04-05 14:01:46 · 3584 阅读 · 0 评论 -
条件操作后续
if,for,while,except后面都可以跟else语句该语句可以理解为前置条件操作语句的补充,当满足条件并执行完毕之后,进行该操作可以理解为后续操作,明确两个限制满足前置条件:当前置条件不成立,不进行之前的操作,后续语句不会作用操作完毕:如果前置的语句中,包含break,return等破坏结构的关键词时,语句非正常顺序执行,后续的else语句块依旧得不到执行后置原创 2017-09-03 19:18:39 · 327 阅读 · 0 评论 -
隐匿输入
输入密码不回显:import getpassusername = input('please input your name') #输入显示用户名password = getpass.getpass(''input your password') #输入密码不可见原创 2017-09-03 19:08:36 · 228 阅读 · 0 评论 -
字符格式化
username = 'username'password = 'password'‘+’直接拼接(字符串可用,其他类型需强转)message = 'username : ' + username'%s'占位符替换(需要指定数据类型,%d,%f,%c)message = 'username : %s' % (username)format(无数据类型要求):编号传入:原创 2017-09-03 19:03:09 · 194 阅读 · 0 评论 -
input
python中获取输入:input:提示信息:input(‘message’),指定获取同时可以提示信息,message为显示的提示信息数据格式:固定输入格式为字符串,后台接收应该对指定数据进行强转,确保输入格式正确python2.x中的输入,相当于代码的一部分,输入时自带格式声明,未声明认为是代码中的变量raw_input:输入,python3.x中已废弃原创 2017-09-03 18:50:21 · 275 阅读 · 0 评论 -
linux文件权限
linux文件的区分不靠文件的后缀,依靠于打开的方式和权限的分配(文件加上后缀是一个良好的习惯,有利于我们快速分辨)文件的权限分为三种,可读,可写,可执行ls -l 可以看到文件权限的描述(最左侧)描述的方式为十位的标记,分作四部分,从左往右,第一个字母单独作为一个部分,后面每三个为一部分第一部分表示的是文件的类型(文件?文件夹?)后面的权限分别表示文件所属者,文件所属着所在组原创 2017-09-03 20:09:12 · 222 阅读 · 0 评论 -
列表推导
推导基本公式:[x for x in range(start, end, step)]获取0-9列表:[x for x in range(10)]条件推导公式:[x for x in range(start, end, step) if condiction]0-9奇数:[x for x in range(10) if not x%2 == 0 ]多元素推导(多个for之间不用其他原创 2017-09-03 19:55:56 · 389 阅读 · 0 评论 -
常见流程语句
if 条件判断语句,满足条件执行代码块elif 前置条件不满足,当前条件满足,执行此代码,可能都不满足,但if和elif中只能有一个执行else 当前面的条件都不满足,无条件执行此代码块,三个部分相斥,只能有一个执行while 自定义条件,在代码内部需要有条件变量的变化,或者是跳出语句,防止死循环for 自定义可迭代对象,遍历迭代对象并依次执行语句,内部可放置跳出语句f原创 2017-09-03 19:42:41 · 358 阅读 · 0 评论 -
前置配置
#! usr/bin/python 指定执行此文件依靠/usr/bin下的python程序不过一般可以写作 #!usr/bin/env python,配置环境变量,可以指定任意目录下的执行程序,更加的灵活# -*- utf-8 -*-指定文件编码,前置该条件可以固定文本编码格式,避免后续编码混乱,python3默认utf-8文件编码原创 2017-09-03 20:30:46 · 365 阅读 · 0 评论 -
快排?跳排?
快速排序的定义十分简洁:左右分列,分而治之。但是规整的定义背后是跳跃的混乱。作为冒泡的进化,两者的原理是相同:大小的交换,最终有序。快排所进化的点,不过是把一些无所谓的交换进行了省略,通过分而治之,极大的减少了交换的次数,提升了效率。冒泡当中的交换是顺序的,通过彼此连续的努力,一步步的登基。而快排是将数据分类,在更小的范围内进行等级的划分。简而言之,快排就是将交换拆分成了两部分原创 2017-09-05 23:48:59 · 442 阅读 · 0 评论 -
引用?操作?指针!!
每当我们想修改对象的值的时候,发现赋值符号=有时候并不能如愿的完成我们的想法,但有时候确实正确的,why?利用面向对象的思想,可以这样理解:一个对象分作三个部分:实体(核心):实体是对象的主体部分,实体的行为发挥对象的作用,可以看做一个人。名称(逻辑):名称是对象实体的引用,通过名称的调用,可以找到实体,并令其发挥作用,相当于人的名字。指针(物理):指针是实体存在的空间,容纳实原创 2017-09-06 00:03:16 · 192 阅读 · 0 评论 -
random
random模块中常用函数import randomrandom.random()#得带一个随机数,区间为(0,1),不可更改random.uniform(start,end)#得到一个随机数,可以指定区间random.randint(start,end)#得到区间内随机整数,闭区间,两边值都可取random.randrange(start,end)#同上,但是区间左闭右开r原创 2017-09-13 23:05:44 · 160 阅读 · 0 评论 -
os
import osos.getcwd()#获取当前路径os.chdir(path)#进入指定路径os.curdir#返回当前路径os.pardir#返回父目录os.makedirs(path)#层级创建文件夹os.removedirs(path)#递归删除文件夹os.remove(path)#移除指定文件或文件夹,非层级os.listdir(path)#返回指定路原创 2017-09-14 20:02:15 · 149 阅读 · 0 评论 -
and...or引发的深思
python中是没有三目的,一般但是有替代的方法print('True' if True else 'False')不过接受程度更高的应该是print(True and 'True' or 'False')但是这两个关键词并不是必须要联合使用的print(True and 'True')这就颠倒实现了类似Ruby中的if用法puts 'True' if true原创 2017-09-20 19:14:24 · 726 阅读 · 0 评论 -
and...or的 彻底研究
在前面的篇章中,我们似乎已经全部了解了and和or1. 执行顺序:从左到右依次结合执行2. 查找方式:and查找真值为False,or查找真值为True,然后返回找到的对象3. 返回对象:返回的是原生的对象,不经过更多的加工和操作还谈论了逻辑运算中语句和对象的概念:逻辑判断和存储操作,针对的群体必定是对象,执行语句会先执行,将执行结果当做对象进行操作但是,目前为止,原创 2017-09-22 18:11:06 · 409 阅读 · 0 评论 -
装饰器之装饰器类
对于装饰器,之前已经详细的梳理了,总结起来就是装饰器:装饰器就是入参唯一且是方法且返回值为方法的方法条件:1. 本身是方法2. 入参是方法(入参数量之前已经完全讨论,现在不进行深究)3. 返回值是方法同时,考量了一下它的作用对象,我们确定它的作用对象是方法那么,什么叫做方法经过模板定义的就叫做方法?能够执行的就是方法?携带可执行代码的对象?现在重原创 2017-09-22 19:33:06 · 396 阅读 · 0 评论 -
with引起的类的扩充
with作为上下文管理器,对有严格要求的操作的开始和结束的定义操作很大方面节省了多余的操作,也避免了容易遗漏而产生的问题with open('filename','r') as f: f.write('this is a test')对于文件的操作,或许是最经典也是最常用的方式了文件流结束操作时,都应该进行close,但是编码过程中总有遗漏,消耗系统资源这样的方原创 2017-09-22 20:10:41 · 198 阅读 · 0 评论 -
shutil
import shutilshutil.copyfileobj(file1,file2)#拷贝文件内容,传入文件对象shutil.copyfile(filename1,filename2)#拷贝文件,传入文件名即可shutil.copymode(filename1,filename2)#拷贝权限shul.copy(filename1, filename2)#全拷贝,内容加权限sh原创 2017-09-14 20:40:06 · 280 阅读 · 0 评论 -
zipfile
import zipfile#压缩z = zipfile.ZipFile(filename, 'w')#新建压缩对象z.write(filename)#写入压缩文件,文件名即可z.close()#写入,关闭压缩#解压z = zipfile.ZipFile(filename, 'r')#打开压缩文件,创建对象z.extractall()#可设置解压地址z.close()原创 2017-09-14 20:47:11 · 237 阅读 · 0 评论 -
shelve
shelve模块支持所有的pickle格式,可以通过键值对保存任何数据结构import shelve#写入文件f = shelve.open(filename)#打开f[key] = valuef[key1] = value1f[key2] = value2#写入f.close()#关闭#文件读取f = shelve.open(filename)#打开f.get(ke原创 2017-09-14 20:54:07 · 247 阅读 · 0 评论 -
ElementTree
import xml.etree.ElementTree as etsource = et.parse(file)#解析指定文件root = source.getroot()#获取根节点#遍历的两种方式for node in root.findall('tag'): #只能查找子标签 passfor node in root.iter('tag'): #层原创 2017-09-14 21:25:11 · 308 阅读 · 0 评论 -
configparser
利用configparser模块可以更方便的写配置文件import configparser as cp#配置文件写入config = cp.ConfigParser()#创建对象config['DEFAULT']={'class':'attrib'}config['CHOOSE1']={'class':'attrib'}config['CHOOSE2']={'class':'att原创 2017-09-14 21:36:18 · 186 阅读 · 0 评论 -
加密篇
import hashlib#hashlib支持md5,sha1,sha256,sha384,sha512,用法和md5一样m = hashlib.md5()#创建加密对象m.update(b'password')#对输入内容进行加密,m.digest()#获取二进制加密密文m.hexdigest()#获取十六进制加密密文'''python3默认Unicode编码,因此,我原创 2017-09-14 22:21:35 · 170 阅读 · 0 评论 -
re
import re'''正则字符串操作'''re.split(pattern, string)#通过正则pattern分割字符string,返回分割列表re.sub(pattern, replace, string,count)#在string中将pattern匹配到的字符用replace进行替换,count指定替换次数'''正则定义技巧'''pattern = r''原创 2017-09-14 22:55:40 · 376 阅读 · 0 评论 -
socketserver的简单使用
socketserver是对socket的封装,只需要提供处理器Handler和地址就可以迅速搭建socket服务器处理器Handler必须继承自BaseRequestHandler并重写handler方法远程执行命令服务端代码如下import socketserverimport osclass MyHandler(socketserver.BaseRequestHand原创 2017-09-22 23:50:14 · 621 阅读 · 0 评论 -
paramiko基本方法
ssh客户端操作步骤1. 创建客户端连接2. 根据传入信息进行连接3. 执行命令,返回流对象4. 流对象获取信息,进行对应操作5. 关闭客户端连接import paramikossh = paramiko.SSHClient()#创建ssh客户端ssh.connect(hostname='host', port=port, username='godme', pas原创 2017-09-23 17:58:30 · 600 阅读 · 0 评论 -
简单创建多线程
0. 导入多线程模块import threading1. 方法开启多线程先将执行操作定义到方法内部def test(name): for value in range(5): print('thread:{}\tcount:{}'.format(name,value))多线程开启方法执行threading._start_new_thread(原创 2017-09-23 19:28:16 · 341 阅读 · 0 评论 -
线程小结
线程的生命周期分一下几步0. new:新建,创建线程对象1. start:准备,就绪准备执行2. run:执行线程3. wait:阻塞,暂停执行,notify唤醒回到执行前步骤继续执行4. death:死亡,线程执行结束创建线程的方法1. 方法启动import threadingimport timedef test(name) for val原创 2017-09-23 21:46:15 · 273 阅读 · 0 评论 -
GIL理解
1. python自身未实现底层的线程操作,无法自行调度CPU由于采用的是系统原生的线程,同时需要将线程纳入自身,为了保证自身独立,自身加锁GIL内部线程属于自身属性,自身抢占CUP才能进一步分配内部线程,python本身可以看做是一个单线程多核可同步执行多条线程,但不能同时执行同一个线程,python一次只能运行在一个CPU中内部多线程也只能运行在该CPU上2. 本身原创 2017-09-23 22:52:16 · 216 阅读 · 0 评论 -
线程锁
上厕所要关门,这就是线程锁当开启线程的时候,想独占的操作某个变量的时候,就必须要加锁上厕所不关门,茅坑能不能独占不说,被人看见了也是不好的import threadinglock = threading.Lock()lock.acquire()todolock.release()所以,上厕所之前要关门GIL也是一样,python的老婆要上厕所,也是要关上门了一个接一个上原创 2017-09-24 20:25:26 · 273 阅读 · 0 评论 -
队列
先进先出,会进会出,进了不出就存储,出了则不再队列范围内import queueq = queue.Queue()基本方法如下1. 设置队列长度q = queue.Queue(maxsize=length)2. 压入数据q.put()3. 获取数据q.get()4. 判断队列是否为空q.empty()5. 判断队列是否满了q.fu原创 2017-09-24 22:29:31 · 270 阅读 · 0 评论 -
继承
'''**********继承**********'''#基本类定义class Human: def say(self,messaeg): print('i said that {}'.format(messaeg))class Method: def sleep(): pass'''继承的表示方法'''#定义一个类的时候在后面跟上原创 2017-09-16 23:45:10 · 143 阅读 · 0 评论 -
解析四则算式并计算
from re import sub as replacefrom re import search as findfrom re import split'''***********解析四则算式并计算***********''''''全局正则定义'''#乘除正则,查找乘除操作mul_div_calc_regex = r'\d+(\.\d+)?[\*\/]\d+(\.\d+)?原创 2017-09-16 18:35:54 · 330 阅读 · 0 评论 -
类中的集中特殊方法
'''类当中的特殊方法'''class Person(object): _class_var = 'class_var' #初始化方法,用于初始化对象内部变量,第一个入参表示当前对象,外部调用自动隐藏 def __init__(self,message, name): self._message = message self._name原创 2017-09-17 16:30:39 · 275 阅读 · 0 评论 -
内置属性和方法
'''**************内置属性************'''person = Person()'''__dict__,返回内部属性字典'''#类名调用打印所有的属性和方法Person.__dict__#对象调用只打印对象属性,不包含类属性person.__dict____file__#打印当前文件相对路径,无需模块或类进行调用obj.__module__#打印对原创 2017-09-17 17:09:45 · 253 阅读 · 0 评论 -
反射
''' 反射就是在程序运行的时候,对程序的状态,属性,方法通过字符串的形式进行修改'''class Person: def show(self): print('person show')person = Person()''' 反射的四种方法 getattr(obj,attr,default=None): 获取对象的指定原创 2017-09-17 18:08:16 · 136 阅读 · 0 评论 -
小小异常
''' 异常: 程序出错却不想中断执行,抛出,捕捉对应错误,处理之后继续运行 抛出: raise Exception 抛出异常,表示程序出现了错误 要求对可能的错误进行处理,否则会导致程序执行失败 捕捉: try: program except excep原创 2017-09-17 18:43:01 · 164 阅读 · 0 评论 -
单线程socket通信
#-*- utf-8 -*-'''客户端'''import socket#设置超时socket.setdefaulttimeout(5)#端口定义host = '127.0.0.1'port = 10086addr = host,port#创建对象s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#连接判断,返回码原创 2017-09-17 22:03:18 · 434 阅读 · 0 评论