- 博客(49)
- 资源 (1)
- 收藏
- 关注
原创 Linux 目录管理
Linux下目录管理查看目录结构:tree显示当前路径:pwd切换工作目录: cd创建目录:mkdir删除目录:rmdir查看目录结构:tree安装 sudo apt install tree使用该命令可查看当前目录下有哪些文件,且按照树的形状展开由图可见,当前Python文件夹下有自动化办公和pythonStudy两个文件夹,自动化办公下有os模块文件夹,OS模块文件夹下还有五个py文件显示当前路径:pwd使用pwd命令可以显示当前的工作目录,该命令很简单,直接输入pwd即可,后
2020-07-31 22:28:18 175
原创 vi与vim
vimvi 简介命令模式输入模式末行模式vim命令模式操作输入模式操作末行模式操作相关设置vi 简介vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序,它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。 vi没有菜单,只有命令,且命令繁多。Vi有三种基本工作模式:命令模式文本输入模式
2020-07-25 23:06:27 220
原创 Linux文件的基本信息
文件的基本信息1、文件权限2、访问用户3、访问权限ls -lh 查看文件类型文件的三种时间Linux下一切皆文件,文件名严格区分大小写,且同一目录下普通文件和目录不能重名基本的文件的管理包括文件的增、删、查、改1、文件权限文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。Unix/Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux系统除了对用户权限作了严格的界定外,还在用户身
2020-07-25 22:05:29 331
原创 Linux 目录结构练习题
练习: # mkdir -pv /a/b/c/d -p:在父目录不存在的情况下创建子目录 -v:显示创建过程 # mkdir -p /a/aa/aaa # mkdir /a/b/{bb,cc} 创建两个目录/a/b/bb /a/b/cc 1、使用绝对路径的方式进入到bb目录 [root@localhost ~]# cd /a/b/bb 2、使用相对
2020-07-25 20:47:04 495
原创 scp命令
scp命令scp命令scp命令1.使用该命令的前提条件要求目标主机已经成功安装openssh-server如没有安装使用 sudo apt-get install openssh-server 来安装2.使用格式远程拷贝文件,scp -r 的常用方法:scp -r 目标用户名@目标主机IP地址:/目标文件的绝对路径 /保存到本机的绝对/相对路径举例:scp -r itcast@192.168.1.100:/home/itcast/QQ_dir/ ./mytest/lisi在后续会提
2020-07-24 18:01:03 9211
原创 ssh命令
ssh命令ssh命令1、ssh介绍2、安装ssh3、使用ssh连接服务器ssh命令1、ssh介绍SSH为Secure Shell的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是 UNIX 系统上的一个程序,后来又迅速扩展到其他操作平台
2020-07-24 17:58:05 5423
原创 PyCharm常用快捷键
PyCharm常用快捷键常用快捷键常用快捷键Ctrl+/ : 注释、取消注释Ctrl+s : 保存Ctrl+c : 复制Ctrl+v : 粘帖Ctrl+x : 剪切Ctrl+d : 复制当前行到下一行Ctrl+y : 删除当前行Ctrl+z : 撤销(可连续撤销多个操作)Ctrl+Shift +z : 反撤销Ctrl+f : 当前模块查找Ctrl+Shift +f: 整个项目查找Ctrl+r : 当前模块替换Ctrl+Shift +r: 整个项目替换ta
2020-07-16 18:29:22 425
原创 输出目录下的文件夹与文件
输出目录下的文件夹与文件输出目录下的文件夹与文件1、获取当前Python程序运行路径2、处理路径链接3、列出文件和文件夹4、判断是否为文件、文件夹4.1 判断是否为文件夹4.2 判断是否为文件4.3 os.scandir(path)5、遍历文件夹输出目录下的文件夹与文件Python的标准库中,OS模块可以对文件和路径进行操作,例如创建、移动、复制文件和文件夹;文件的路径和名称处理需要注意的是,OS模块中有些指令是Windows、Mac、Linux下通用的,但有些指令只有Mac和Linux下生效1、获
2020-07-16 17:17:10 300
原创 GIL
GILGIL定义GIL存在原因GIL不是Python特性GIL的弊端如何解决GIL定义GIL,the Global Interpreter Lock,直译为“全局解释锁”GIL存在原因CPython在执行多线程的时候并不是线程安全的,为了线程间数据的一致性和状态同步的完整性。GIL不是Python特性GIL是Python解释器(Cpython)时引入的概念,在JPython、PyPy中没有GIL。GIL并不是Python的语言缺陷。GIL的弊端GIL对计算密集型的程序会产生影响。因为计算
2020-07-10 19:01:09 118
原创 线程的创建与多线程
线程的创建与多线程线程线程创建的方式(一)线程创建的方式(二)线程创建的方式(三)多线程线程线程创建的方式(一)【使用此方式创建的线程为守护线程】import _threadimport threadingdef fn1(a,b): print(a,b) print(threading.current_thread().name)def create_thread1(): #参数一:在子线程中要执行的函数 #参数二:子线程中的函数需要的参数,注意一定要以元组
2020-07-10 18:57:49 108
原创 线程冲突、死锁与信号量
线程冲突、死锁与信号量线程冲突死锁信号量线程冲突多个线程并发访问同一个变量而相互干扰解决方式:线程锁import threadingdef fn(): global num #cpu分配的时间片不足以完成一百万次加法运算 #因此结果还没有被保存到内存中就可能被其他的线程打断 for x in range(1000000): num += 1def thread1(): for i in range(5): t =
2020-07-10 18:54:45 357
原创 Python发送邮件
发送邮件登录163邮箱 —> 设置 —>POP3/SMTP/IMAP —>客户端授权密码 —>开启 —> 重置授权码注意: 授权码尽量和邮件的登录密码不同[],将下面的password改为授权码若要发邮件首先需要知道:服务器地址,发送邮箱地址,发送邮箱密码,要发送的内容,对方的邮箱地址关于邮件:标题,发送者打开服务连接-》登录邮箱-》发送邮件-》退出邮箱#发邮件的库import smtplib#邮件文本from email.mime.text
2020-07-10 18:25:01 102
原创 Python中的高阶函数
高阶函数map()函数reduce()函数filter()函数sorted() 函数zip()函数Map、Reduce主要应用于分布式中。分布式思想:将一个连续的字符串转为列表,元素类型为字符串类型,将其都变成数字类型,使用分布式思想【类似于一件事一个人干起来慢,但是如果人多呢?效率则可以相应的提高】同理,一台电脑处理数据比较慢,但是如果有100台电脑同时处理,则效率则会快很多,最终将每台电脑上处理的数据进行整合。python的优点:内置了map()和reduce()函数,可以直接使用。# pyt
2020-07-10 17:11:41 132
原创 单元和文档测试
单元和文档测试单元测试对函数进行单元测试对类进行单元测试文档测试测试分类:App测试、接口测试黑盒测试【要求最低】,白盒测试,灰盒测试单元测试单元测试就是用来对一个模块、一个函数或者一个类来进行正确性的检测工作。1.若是单元测试通过,则证明测试的函数能够正确的工作,2.反之则证明要么函数有bug要么输入不合法,总之我们需要修复我们的函数功能。对函数进行单元测试创建python文件MathFunc.py,内容如下:def mySum(x,y): return x + y
2020-07-10 17:09:08 160
原创 Python序列化
序列化pickleJsonpickle在程序运行的过程中,所有的变量都是在内存中,比如定义一个dictdict1 = {name:"lili",age:18}在这里我把name进行修改,改成”leilei“,但是一旦程序结束,变量所占用的内存就会被操作系统全部回收,如果没有把修改的name存到磁盘上,下次name初始化的时候又是”lili“在这里我们把变量从内存中变成可存储或者传输的过程称之为序列化,在 python 中叫 picking,序列化之后,我们就可以把序列化后的内容写入磁盘,或是通过
2020-07-10 16:47:15 798
原创 Python读写csv文件
读写csv文件读csv文件写csv文件读csv文件csv文件本身就是个纯文本文件,这种文件格式经常用来作为不同程序之间的数据交互的格式.csv文件可以直接使用excel工具打开读取csv文件:with open(path,"r") as f: csv_reader=csv.reader(f) #csv_reader 迭代器演示:需求:读取001.scv文件说明:可以直接打印,然后定义listimport csvdef readCsv(path): #列表
2020-07-10 16:43:32 769
原创 Python读取pdf文件
读取pdf文件pip是一个安装和管理python包的工具在进行代码演示之前,首先进行安装和pdf相关的工具在cmd中输入以下命令: pip list [作用:列出pip下安装的所有的工具]安装pdfminer3k,继续输入以下命令:pip install pdfminer3k代码演示#导入系统库import sysimport importlib#对importlib做处理,让其加载sysimportlib.reload(sys)from pdfminer.pdfpa
2020-07-10 16:41:08 1797
原创 Python错误处理
Python错误处理错误处理调用栈记录错误抛出错误错误处理在程序运行的过程中,如果发生了错误,可以事先约定一个错误代码,这样就可以知道是否有错,以及出错的原因,在操作系统的调用中,返回错误码的非常常见。三种常见错误:语法错误:直接能检查到的错误运算类型的错误,在测试过程中,一定要解决掉.逻辑错误比如打开文件的函数open,成功时返回文件的描述符[就是一个整数],出错时返回-1,但是使用错误码表示是否出错十分不方便,因为函数本身应该返回的正常结果与错误码混淆在一起,所以调用者要使用大量的代码
2020-07-10 16:38:48 265
原创 多继承与多态(鸭子模型)
多继承多继承多态 --鸭子模型获取对象属性多继承顾名思义:就是一个子类中可以有多个父类,比如一个孩子有一个爸爸,还有一个妈妈from child import Childdef main(): c = Child(300, 100) print(c.money, c.faceValue) c.play() c.eat() #注意:如果多个父类中的方法名相同,默认调用的是子类括号中排前面的父类中的方法 #此时调用的是Father中func方法if
2020-07-10 16:00:05 535
原创 运算符重载
运算符重载类可以重载加减运算,打印,函数调用,索引等内置运算,运算符重载使我们的对象的行为与内置函数一样,在python调用时操作符会自动的作用于类的对象,python会自动的搜索并调用对象中指定的方法完成操作。常见的运算符重载方法:#举例#数字和字符串都能相加print(1 + 2)print("1" + "2")#不同的类型用加法会有不同的解释class Person(object): def __init__(self, num): self.num =
2020-07-10 15:56:32 170
原创 函数重写
函数重写重写:将函数重写一遍 __str __ ():在调用print打印对象时自动调用,是给用户用的,是一个描述对象的方法.__repr __():是给机器用的,在python解释器里面直接敲对象名在回车后调用方法注意:在没有str时,且有repr,__str __=__repr __''''''class Animal(object): def __init__(self, name, age, height, weight): self.name = name
2020-07-10 15:55:08 286
原创 语法糖
语法糖当我们的属性私有化之后,我们可以通过,暴露出的接口来访问我们的变量,在python中也提供了另外一种机制,可以将函数作为变量来调用的一种机制,@property装饰器的作用就是把我们函数作为变量来进行调用.,与此同时它会生成另外一个装饰器,装饰器名字叫做@属性.setter的装饰器,这个装饰器添加设置方法上面,将设置的函数作为属性来进行调用.优点:1.使用者调用起来更加的方便.2.使代码逻辑更加清晰在get的方法上面添加@property的装饰器,在set的方法上面添加@属性.s
2020-07-10 10:43:08 131
原创 类的封装
类的封装--访问限制概念使用单下划线,双下划线,头尾下划线的说明语法糖概念面向对象语言的三大特征:封装, 继承, 多态 (鸭子模型)python中不存在真正的多态广义的封装: 类和函数定义本身就是封装的体现狭义的封装:一个类的某些属性,不希望外界直接访问,而是把这个属性私有化[只有当前类持有],然后暴露给外界一个访问的方法即可.封装的本质:就是属性私有化的过程封装的好处:提供了数据的复用性,保证了数据的安全性举例:插排在class内部可以有属性和方法,而外部的代码可以通过直接调用实例
2020-07-09 21:08:46 739
原创 动态给对象添加属性和方法
动态添加属性和方法成员方法:静态方法:类方法:正常情况下,我们定义了一个class,创建一个class的实例后,我们可以给该实例绑定任何的属性和方法,这就是动态语言的灵活性。动态给对象添加属性和方法:class.属性名 = 属性值class.方法名 = 函数这里说的动态加属性和方法主要指的是关于 __slots__函数的使用__ slots __ = (属性名,函数名)功能:对动态添加的属性以及函数进行限制,只能添加元组中列举出来的属性名或者函数名此限制当前类的实例起作用,对其子类不起作用.
2020-07-09 21:05:51 1950
原创 构造函数和析构函数
构造函数和析构函数构造方法的使用析构函数的使用self的使用构造方法的使用使用上面的方式可以创建对象,但是,很多类都倾向于将对象创建为有初始化状态.因此类可能定义一个名为__init__() 的特殊方法(构造方法)构造方法也叫做构造器,是指当实例化一个对象(创建一个对象)的时候,第一个被自动调用的方法.演示1: 构造方法被调动的动机class Person(): name = "" age = 0 #构造方法 def __init__(self):
2020-07-09 17:43:34 93
原创 时间和日期模块
时间和日期模块1、 Time模块1.1 名词解释1.2 时间的表示形式2、 datetime模块2.1 概述2.2 模块中的类2.3函数的使用3、 Calendar 模块python的内置模块中,时间与日期模块是属于较为常用的模块。关于时间和日期模块python程序能用很多方式处理日期和时间,转换日期格式是一种常见的功能.python提供了一个time和calendar模块可以用于格式化日期和时间.时间间隔是以秒为单位的浮点小数每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表
2020-07-09 17:26:09 296
原创 目录遍历
目录遍历1. 递归遍历目录2. 栈模拟递归遍历目录3. 队列模拟递归遍历目录1. 递归遍历目录import osdef getall(path, treeshow): filelist = os.listdir(path) treeshow += " " for filename in filelist: #拼接绝对路径 filepath = os.path.join(path, filename) if os.path.isdir(filepath): print(tr
2020-07-09 16:46:44 854
原创 栈与队列
栈与队列1、栈 stack2、队列 queue1、栈 stack特点:先进后出[可以抽象成竹筒中的豆子,先进去的后出来] 后来者居上mystack = []#压栈,或称位入栈[向栈中存数据]mystack.append(1)print(mystack)mystack.append(2)print(mystack)mystack.append(3)print(mystack)#出栈[从栈中取数据]mystack.pop()print(mystack)mystack.pop()
2020-07-09 16:45:16 95
原创 Python之 os模块
Python之 os模块1. os.getcwd()2. os.listdir(path)3. os.path.abspath(path)4. os.path.split(path)5. os.path.join(path1,path2,...)6. os.path.dirname(path)7. os.path.basename(path)8. os.path.getsize(path)9. os.path.exists(path)10. os.path.isdir(path)11. os.path.is
2020-07-09 16:43:17 619
原创 递归函数
递归函数递归函数:在函数的内部,可以调用其他的函数,如果一个函数在内部调用自身本身,这个函数就是递归函数.递归调用:一个函数调用自身,成为递归函数使用递归解决问题的思路:1.写出临界条件2.找这一次和上一次的关系3.假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果使用递归的时候考虑的问题:1.效率问题2.递归栈溢出的问题使用递归函数需要注意防止栈溢出,在计算机中函数是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,就会增加一层栈帧,每当函数返回,栈就
2020-07-09 16:41:31 661
原创 返回函数
返回函数当函数作为返回值返回的时候,称这个函数为返回函数在python中除了可以接受函数作为参数外,还可以把函数作为结果值返回.需求:实现一个可变参数的求和.通常是这么定义的:def calc_sum(*args): sum = 0 for i in args: sum += i return sum现在需求有变,现在我不需要立即求和,而是在后面的代码中,根据需要再进行计算,这时候,我们可以不返回求和的结果,而是返回求和的函数.def lazy_sum(*args): de
2020-07-09 16:38:38 212
原创 闭包
闭包当出现函数嵌套的时候 (即在一个函数内部定义了另一个函数) ,外部的我们暂且称之为外函数,内部的称之为内函数闭包: 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用 (内函数的函数名) ,这样就构成了一个闭包装饰器是最典型的闭包一般情况下,如果一个函数结束,函数内部所有的东西都会被释放掉,还给内存,局部变量也会消失,但是闭包是一种特殊的情况,如果外函数在结束的时候发现有自己的临时变量将来还会在内部函数中用到,就把这个临时变量绑定给了内函数,然后再自
2020-07-09 16:36:44 97
原创 Python中变量的作用域
Python中变量的作用域1、概述2、作用域的划分2.1 L(local) 局部作用域2.2 E(enclosing) 嵌套作用域2.3 G(global) 全局作用域2.4 B(built-in)内置作用域3 变量名解析LEGB法则4 关键字global1、概述在python程序中,创建,改变,查找变量名的时候,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域.简单来说,变量的作用域就是指变量可以使用的范围程序的变量并不是在任意的位置都可以访问,访问权限取决于这个变量是在哪里
2020-07-09 16:28:33 718
原创 偏函数
偏函数python中的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。简单来讲偏函数的作用就是把函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用的时候调用新的函数,被固定的参数无需传递。functools.partial(func,args)参数一:要固定的函数的函数名参数二:要固定的参数.功能:将要固定的函数的参数给固定住,然后给你返回一个新的函数.#functools 模块import functools#int(
2020-07-09 16:18:39 601
原创 zip函数
zip函数打包解包打包zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同list1 = [1,2,3,4,5]list2 = ["hello","good","nice","haha"]set3 = {True,False,None,0}zipobj = zip(list1,list2,set3) # 打包print(zipobj) # 这是一个包,显示的是包所在的地址
2020-07-09 16:07:56 12003 9
原创 匿名函数
匿名函数概念:是指一类无需定义标识符(函数名)的函数或者子程序。特点:匿名函数不使用def定义函数,使用lambda来创建匿名函数1.lambda只是一个表达式,函数体比def简单2.关键字lambda表示匿名函数,冒号前面的x表示函数参数.3.匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果.语法:lambda 参数1,参数2,…,参数n: expression[表达式]好处:函数没有名字,不必担心函数名冲突,此外,匿名函数也是一个函数对
2020-07-09 16:04:43 789
原创 迭代器与生成器
迭代器与生成器1、列表生成式2、可迭代对象3、 生成器4、 迭代器5、Iterator转换1、列表生成式语法:list = [result for x in range(m, n)]需求:创建一个[1, 2, …100]的列表>>> range(1, 101)[1, 2, 3, 4, 5,...,100]需求2 :生成一个[1x1, 2x2, 3x3,….100x100]的列表>>> list1 = []>>> for
2020-07-09 00:13:53 140
原创 Python四大类型转换
Python四大类型转换1、 list 转换为set2、 tuple 转换为set3、 set转换为list4、set转换为tuple主要针对几种存储工具:list、tuple、dict、set特殊之处:dict是用来存储键值对的1、 list 转换为setl1 = [1, 2, 4, 5]s1 = set(l1)print(type(s1))print(s1)2、 tuple 转换为sett1 = (1, 2, 3, 4)s1 = set(t1)print(type(s1))
2020-07-09 00:10:35 179
原创 set集合
set集合1、概述set与dict类似,也是一组key的集合,但与dict的区别在于set不存储value本质:无序且无重复元素的集合2、set的创建语法:set1 = set([1, 2, 3, 4, 5])注意:创建set需要一个list或者tuple或者dict作为输入集合,重复的元素在set中会被自动的过滤s1 = set([1, 2, 3, 4, 5])print(s1)3、set操作3.1 set.add()注意:1.可以添加重复的元素,但是不会有效果2
2020-07-09 00:07:50 419
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人