python
这里将介绍些Python学习过程中比较常用的或者有价值的知识,希望能有所启发
阿拉辉
进击的小白
展开
-
求两数之和
两数之和思路:这里通过字典来模拟哈希查询的过程。class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ hashmap={} for ind,num in enumerate(nums):原创 2023-01-06 23:12:16 · 127 阅读 · 0 评论 -
windows安装fbprophet
安装时序预测模块fbprophet,亲测有效,帮你避坑原创 2022-12-21 15:22:05 · 1429 阅读 · 0 评论 -
剑指offer
剑指offer(Python版本)1.二维数组的查找2.替换空格3.从尾到头打印链表4.重建二叉树5.用两个栈实现队列6.旋转数组的最小数字7.斐波那契数列8.跳台阶9.变态跳台阶10.矩形覆盖11.二进制中1的个数12.数值的整数次方13.调整数组中的顺序使奇数位于偶数之前14.链表中倒数第K个结点15.反转链表16.合并两个排序的链表17.树的子结构18.二叉树的镜像19.顺时针打印矩阵20.包含min函数的栈21.栈的压入、弹出序列22.从上往下打印二叉树23.二叉搜索树的后序遍历序列24.二叉树中和原创 2022-03-01 10:50:21 · 460 阅读 · 0 评论 -
对Python文件进行加密
linux下对Python加密linux环境对Python文件加密linux环境对Python文件加密如何封装Python代码,让别人方便调用,同时又能起到加密的作用,本文介绍如何封装成so文件首先需要配置环境 安装Cython gcc例如,要对model_predict.py 文件加密需要写一个setup.py 加密脚本from distutils.core import setupfrom Cython.Build import cythonizesetup(ext_modules原创 2021-05-27 11:20:36 · 508 阅读 · 0 评论 -
shell脚本从外部传参执行py文件
创建start.sh并写入程序source activate kyha=$1 #第一个参数b=$2 #第二个参数c=$3 #第三个参数nohup python /data01/kyh/test/test.py --a=${a} --b=${b} --c=${c} >/data01/kyh/test/${b}.log 2>&1 & #后台运行程序,并将日志以参数b的名称命名执行sh命令sh start.sh 1 2 3这样执行shell脚本从外部给py文件原创 2021-04-30 09:48:18 · 596 阅读 · 0 评论 -
做文本属性抽取中keras 的抽象后端(from keras import backend as K,from bert4keras.backend import K)
keras后端简介:Keras 是一个模型级库,为开发深度学习模型提供了高层次的构建模块。它不处理诸如张量乘积和卷积等底层操作,目的也就是尽量不重复造轮子。keras 有三个后端实现可用 、 即: TensorFlow 后端,Theano 后端,CNTK 后端。如果你需要修改你的后端, 只要将字段 backend 更改为 theano 或 cntk,Keras 将在下次运行 Keras 代码时使用新的配置。你也可以定义环境变量 KERAS_BACKEND,这会覆盖配置文件中定义的内容:定义的方式如原创 2021-03-15 10:36:43 · 929 阅读 · 0 评论 -
python中类装饰器
类装饰器闭包:类装饰器闭包:1.函数嵌套定义 外部函数 内部函数 内部函数 &原创 2020-08-16 10:12:25 · 1187 阅读 · 0 评论 -
python中的设计模式_工厂模式和单例模式
工厂模式设计模式是面向对象语言特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是:GOF(GoupOfFour)23种设计模式。工厂模式实现了创建者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进行统一的管理和控制。#测试工厂模式class CarFactory: def create_car(self,brand): if brand =="奔驰": return Benz() elif bra原创 2020-08-13 18:46:24 · 340 阅读 · 0 评论 -
特殊属性
Python对象中包含了很多双下划线开始和结束的属性,这些是特殊属性,有特殊用法。这里我们列出常见的特殊属性:特殊方法含义obj.dict对象的属性字典obj.class对象所属的类class.bases类的基类元组(多继承)class.base类的基类class.mro类层次结构class.subclasses()子类列表#测试特殊属性class A: passclass B: passclass C(B,A)原创 2020-08-13 18:46:12 · 482 阅读 · 0 评论 -
python中特殊方法和运算符重载
特殊方法和运算符重载Python的运算符实际上是通过调用对象的特殊方法实现的。a=20b=30c=a+bd=a.__add__(b)print("c=",c)print("d=",d)执行结果c= 50d= 50常见的特殊方法统计如下:方法说明例子__init__构造方法对象创建:p=Person()__del__析构方法对象回收__repr__,__str__打印,转换print(a)__call__函数调用a()_原创 2020-08-13 18:46:02 · 473 阅读 · 0 评论 -
python中面向对象编程的三大特性
面向对象编程的三大特性继承类成员的继承和重写查看类的继承层次结构object根类dir()查看对象属性重写__str__()方法多重继承MRO()Python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。·封装(隐藏)隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装起来”,只对外暴露“相关调用方法”。通过前面学习的“私有属性、私有方法”的方式,实现“封装”。Python追求简洁的语法,没有严格的语法级别的“访问控制符”,更多的是依靠程序员自觉实现。·继原创 2020-08-12 09:11:14 · 284 阅读 · 0 评论 -
@property装饰器、_get和_set方法
@property装饰器、_get和_set方法@property可以将一个方法的调用方式变成“属性调用”。下面是一个简单的示例,让大家体会一下这种转变:#简单测试@propertyclass Employee: @property def salary(self): return 30000;emp1=Employee()print(emp1.salary) #打印30000print(type(emp1.salary)) #打印<class'int'原创 2020-08-11 09:54:15 · 403 阅读 · 0 评论 -
python中私有属性的使用
私有属性python对类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有属性和私有方法,有如下要点:1.通常我们约定,两个下划线开头的属性是私有的(private)。其他的为公共的(public)。2.类内部可以方位私有属性(方法)3.类外部不能直接访问私有属性(方法)4.类外部可以通过“_类名__私有属性(方法)名”访问私有属(方法)【注】方法本质上也是属性!只不过是可以通过()执行而已。所以,此处讲的私有属性和公有属性,也同时讲解了私有方法和公有方法的用法。如下测试中,同时原创 2020-08-11 09:54:30 · 779 阅读 · 0 评论 -
python中方法的动态性
方法的动态性ython是动态语言,我们可以动态的为类添加新的方法,或者动态的修改类的已有的方法。下面看一个例子:#测试方法的动态性class Person: def work(self): print("努力上班!")def play_game(s): print("{0}在玩游戏".format(s))def work2(s): print("好好工作,努力上班!赚大钱,娶媳妇!")Person.play = play_gamep =原创 2020-08-10 08:23:41 · 300 阅读 · 0 评论 -
Python中是没有方法的重载
方法没有重载在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可。方法签名包含3个部分:方法名、参数数量、参数类型。Python中,方法的的参数没有声明类型(调用时确定参数的类型),参数的数量也可以由可变参数控制。因此,Python中是没有方法的重载的。定义一个方法即可有多种调用方式,相当于实现了其他语言中的方法的重载。如果我们在类体中定义了多个重名的方法,只有最后一个方法有效。建议:不要使用重名的方法!Python中方法没有重载。class Person: def say_hi原创 2020-08-10 08:23:27 · 518 阅读 · 0 评论 -
__call__方法和可调用对象
定义了__call__方法的对象,称为“可调用对象”,即该对象可以像函数一样被调用。obj() ----call() #实际上是调用的call方法#测试可调用方法__call__()class SalaryAccount: '''工资计算类''' def __call__(self, salary): print("算工资啦...") yearSalary = salary*12 daySalary = salary//22.5原创 2020-08-09 08:43:24 · 454 阅读 · 0 评论 -
__del__方法(析构函数)和垃圾回收机制
__del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如:释放对象占用的资源,例如:打开的文件资源、网络连接等。Python实现自动的垃圾回收,当对象没有被引用时(引用计数为0),由垃圾回收器调用__del__方法。我们也可以通过del语句删除对象,从而保证调用__del__方法。系统会自动提供__del__方法,一般不需要自定义析构方法。#析构方法class Person: def __del__(self): print("销毁对象{0}".form原创 2020-08-09 08:43:06 · 508 阅读 · 0 评论 -
类对象、类属性、类方法、静态方法
类对象、类属性、类方法、静态方法类对象类属性类方法静态方法类对象我们在前面讲的类定义格式中,“class类名:”。实际上,当解释器执行class语句时,就会创建一个类对象。#测试类对象的生成class Student: passprint(type(Student))print(id(Student))Stu2 = StudentS1 = Stu2print(S1)执行结果<class 'type'>1778915500424<class '__ma原创 2020-08-09 08:42:38 · 260 阅读 · 0 评论 -
__init__构造方法和__new__方法
__init__构造方法和__new__方法__init__构造方法实例属性和实例方法实例属性实例方法__init__构造方法一个Python对象包含三个部分:id(identity识别码)、type(对象类型)、value(对象的值)。更进一步的说,一个Python对象包含如下部分:1.id(identity识别码)2.type(对象类型)3.value(对象的值) (1)属性(attribute)  原创 2020-08-08 09:16:58 · 467 阅读 · 0 评论 -
python中对于类的定义
python中类的定义做一个形象的比喻,类就像是制造饼干的“模具”,而“饼干”就是对象。通过类定义数据类型的属性(数据)和方法(行为),也就是说,“类将行为和状态打包在一起”。对象是类的具体实体,一般称为“类的实例”。类看做“饼干模具”,对象就是根据这个“模具”制造出的“饼干”。从一个类创建对象时,每个对象会共享这个类的行为(类中定义的方法),但会有自己的属性值(不共享状态)。更具体一点:“方法代码是共享的,属性数据不共享”。Python中,“一切皆对象”。类也称为“类对象”,类的实例也称原创 2020-08-08 09:16:32 · 947 阅读 · 0 评论 -
python中面向对象和面向过程区别
python中面向过程和面向对象的区别面向过程(ProcedureOriented)思维面向对象(Object Oriented)思维面向对象的思考方式面向对象和面向过程的总结对象的进化面向过程(ProcedureOriented)思维面向过程更加关注的是“程序的逻辑流程”,是一种“执行者”思维,适合编写小规模的程序。面向过程思想思考问题时,我们首先思考“怎么按步骤实现?”比如,如何开车?我们很容易就列出实现步骤:1.发动车2.挂挡3.踩油门4.走你面向过程适合简单、不需要协作的事务。原创 2020-08-08 09:16:21 · 1037 阅读 · 0 评论 -
nonlocal关键字和LEGB规则
nonlocal关键字和LEGB规则nonlocal关键字LEGB规则nonlocal关键字nonlocal用来声明外层的局部变量。global用来声明全局变量。#测试nonlocal、global关键字的用法a = 100def outer(): b = 10 def inner(): nonlocal b #声明外部函数的局部变量 print("inner b:",b) b = 20原创 2020-08-07 07:22:44 · 114 阅读 · 0 评论 -
python中eval()函数的使用方法
功能:将字符串str当成有效的表达式来求值并返回计算结果。语法:eval(source[,globals[,locals]])->value参数:source:一个Python表达式或函数compile()返回的代码对象globals:可选。必须是dictionarylocals:可选。任意映射对象#测试eval()函数s = "print('abcde')"eval(s)a = 10b = 20c = eval("a+b")print(c)dict1 = dict(a原创 2020-08-07 07:22:30 · 334 阅读 · 0 评论 -
python中的递归函数和嵌套函数
python中的递归函数和嵌套函数递归函数嵌套函数递归函数递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。递归类似于大家中学数学学习过的“数学归纳法”。每个递归函数必须包含两个部分:1.终止条件表示递归什么时候结束。一般用于返回值,不再调用自己。2.递归步骤把第n步的值和第n-1步相关联。递归函数由于会创建大量的函数对象、过量的消耗内存和运算能力。在处理大量数据时,谨慎使用。def test01(n): print("test01:",n) if n原创 2020-08-06 08:59:57 · 790 阅读 · 0 评论 -
python中参数的几种形式
参数的几种形式位置参数默认值参数命名参数可变参数强制命名参数lambda表达式和匿名函数位置参数函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。按位置传递的参数,称为:“位置参数”。def f1(a,b,c): print(a,b,c)f1(2,3,4)f1(2,3)执行结果2 3 4 f1(2,3)TypeError: f1() missing 1 required positional argument: 'c'默认值参数我们可以为某些参数设置默认值,这原创 2020-08-06 08:58:09 · 940 阅读 · 0 评论 -
python中的浅拷贝和深拷贝的使用
浅拷贝和深拷贝使用内置函数:copy(浅拷贝)、deepcopy(深拷贝)。浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象def testCopy(): '''测试浅拷贝''' a = [10, 20, [5, 6]] b = copy.copy(a) print("a:", a) print("b:", b) b.append(30) b[2].append(7)原创 2020-08-05 20:23:22 · 301 阅读 · 0 评论 -
python中的参数的传递
参数的传递传递可变对象的引用传递不可变对象的引用函数的参数传递本质上就是:从实参到形参的赋值操作。python中“一切皆对象”,所有的赋值操作都是“引用的赋值”。所以,python中参数的传递都是“引用传递”,不是“值传递”。具体操作分为两类:1.对”可变对象“进行“写操作”,直接作用于元对象本身。2.对“不可变对象”进行”写操作,会产生一个新的“对象空间”,并用新的值填充这块空间。(起到其他语言的“值传递”效果,但不是“值传递”)可变对象有:字典、列表、集合、自定义的对象等不可变对象有:数字原创 2020-08-05 20:22:55 · 268 阅读 · 0 评论 -
python中的全局变量和局部变量的使用
@TOC变量的作用域(全局变量和局部变量)变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量、局部变量。全局变量:1.在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。2.全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。3.全局变量一般做常量使用。4.函数内要改变全局变量的值,使用global声明一下局部变量:1.在函数体中(包含形式参数)声明的变量。2.局部变量的引用比全局变量快,优先考虑使用。3.如果局部原创 2020-08-04 09:52:57 · 1365 阅读 · 0 评论 -
函数也是对象,内存底层分析
函数也是对象,内存底层分析python中,“一切都是对象”。实际上,执行def定义函数后,系统就创建了相应的函数对象。执行如下代码,然后解释def print_star(n): print("*"*n)print(print_star)print(id(print_star))c=print_starc(3)执行结果<functionprint_starat0x0000000002BB8620>45844000***上面代码执行def时,系统会创建函数对象,并原创 2020-08-04 09:52:39 · 174 阅读 · 0 评论 -
python函数用法和底层分析
这里写目录标题函数的基本概念python函数的分类函数的定义和调用要点形参和实参文档字符串(函数的注释)返回值函数是可重用的程序代码块。函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封装,并增加了函数调用、传递参数、返回计算结果等内容。函数的基本概念1.一个程序由一个个任务组成;函数就是代表一个任务或者一个功能。2.函数是代码复用的通用机制。原创 2020-08-03 12:25:29 · 331 阅读 · 0 评论 -
python中推导式创建序列
推导式创建序列列表推导式字典推导式集合推导式推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。推导式是典型的Python风格,会使用它代表你已经超过Python初学者的水平。列表推导式列表推导式生成列表对象,语法如下:[表达式 for item in 可迭代对象]或者:{表达式 for item in 可迭代对象 if 条件判断}>>>[xforxinrange(1,5)][1,2,3,4]>>>[x*2f原创 2020-08-03 12:25:19 · 382 阅读 · 0 评论 -
循环代码优化和zip迭代
循环代码优化循环代码优化使用zip()并行迭代循环代码优化虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上“斤斤计较”。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:1.尽量减少循环内部不必要的计算2.嵌套循环中,尽量减少内层循环的计算,尽可能向外提。3.局部变量查询较快,尽量使用局部变量#循环代码优化测试importtimestart=time.time()foriinrange(1000):result=[]forminrange(10000):原创 2020-08-03 12:25:08 · 186 阅读 · 0 评论 -
众多比较运算符和增量赋值运算符
众多比较运算符和增量赋值运算符众多比较运算符增量赋值运算符众多比较运算符Python解释器对众多比较运算符(==、!=、>、<、>=、<=)的处理与前文类似,不过在两个方面有重大区别。• 正向和反向调用使用的是同一系列方法。这方面的规则如表13-2所示。例如,对==来说,正向和反向调用都是__eq__方法,只是把参数对调了;而正向的__gt__方法调用的是反向的__lt__方法,并把参数对调。• 对==和!=来说,如果反向调用失败,Python会比较对象的ID,而不抛出Typ原创 2020-07-31 16:20:41 · 422 阅读 · 0 评论 -
重载标量乘法运算符*
重载标量乘法运算符*Vector([1, 2, 3]) * x是什么意思?如果x是数字,就是计算标量积(scalar product),结果是一个新Vector实例,各个分量都会乘以x——这也叫元素级乘法(elementwise multiplication)。 #示例1 >>> v1 = Vector([1, 2, 3]) >>> v1 * 10 Vector([10.0, 20.0, 30.0]) >>> 11 *原创 2020-07-31 16:02:28 · 1174 阅读 · 0 评论 -
运算符的正确重载
正确重载运算符运算符重载基础重载加法运算符+:这次主要讨论一下几个问题• Python如何处理中缀运算符中不同类型的操作数• 使用鸭子类型或显式类型检查处理不同类型的操作数• 中缀运算符如何表明自己无法处理操作数• 众多比较运算符(如==、>、<=,等等)的特殊行为• 增量赋值运算符(如+=)的默认处理方式和重载方式运算符重载基础Python施加了一些限制,做好了灵活性、可用性和安全性方面的平衡:• 不能重载内置类型的运算符• 不能新建运算符,只能重载现有的• 某些运算符原创 2020-07-31 15:53:39 · 207 阅读 · 0 评论 -
Python中继承的优缺点
继承的优缺点子类化内置类型很麻烦多重继承和方法解析顺序处理多继承的一些建议探讨继承和子类化,重点是说明两个细节:• 子类化内置类型的缺点• 多重继承和方法解析顺序子类化内置类型很麻烦在Python 2.2之后,内置类型可以子类化了,但是有个重要的注意事项:内置类型(使用C语言编写)不会调用用户定义的类覆盖的特殊方法。直接子类化内置类型(如dict、list或str)容易出错,因为内置类型的方法通常会忽略用户覆盖的方法。例如:内置类型dict的__init__和__update__方法会忽略我们原创 2020-07-20 09:23:24 · 915 阅读 · 0 评论 -
Tombola子类的测试方法
Tombola子类的测试方法Tombola子类的测试方法Python使用register的方式鹅的行为有可能像鸭子Tombola子类的测试方法编写的Tombola示例测试脚本用到两个类属性,用它们内省类的继承关__subclasses__()这个方法返回类的直接子类列表,不含虚拟子类。_abc_registry只有抽象基类有这个数据属性,其值是一个WeakSet对象,即抽象类注册的虚拟子类的弱引用。#示例1:Tombola子类的测试运行程序import doctest from tom原创 2020-07-20 08:15:55 · 301 阅读 · 0 评论 -
pyhton中定义并使用一个抽象基类
定义并使用一个抽象基类为了证明必要定义抽象基类,要在框架中找到使用它的场景。想象一个场景:网站或移动应用中显示随机光告,但是在整个广告清单轮转一遍之前,不重复显示广告。假设我们在构建一个广告管理框架,名为ADAM。它的职责之一是,支持用户提供随机挑选的无重复类。为了让ADAM的用户明确理解“随机挑选的无重复”组件是什么意思,我们将定义一个抽象基类。将使用现实世界中的物品命名这个抽象基类:宾果机和彩票机是随机从有限的集合中挑选物品的机器,选出的物品没有重复,直到选完为止。把这个抽象基类命名为Tombol原创 2020-07-19 11:28:29 · 367 阅读 · 0 评论 -
Python中的抽象基类的实现
抽象基类定义抽象基类的子类标准库中的抽象基类collections.abc模块中的抽象基类抽象基类的数字塔定义抽象基类的子类利用现有的抽象基类(collections.MutableSequence),然后再自己定义。如示例1所示:#示例1:FrenchDeck2,collections.MutableSequence的子类import collections Card = collections.namedtuple('Card', ['rank', 'suit']) class F原创 2020-07-19 10:56:28 · 318 阅读 · 0 评论 -
Python 语言中的 “鸭子类型”
Python 语言中的 “鸭子类型”继承多态鸭子类型鸭子类型(duck typing)多态的一种形式,在这种形式中,不管对象属于哪个类,也不管声明的具体接口是什么,只要对象实现了相应的方法,函数就可以在对象上执行操作。提到 “鸭子类型”,就要先讲讲面向对象编程语言中的继承和多态。继承首先创建一个 Animal() 父类,父类继承自 object,object 是所有类都会继承的类:class Animal(object): def run(self): prin原创 2020-07-18 10:45:34 · 308 阅读 · 0 评论