python
文章平均质量分 65
python相关
zy010101
会写一点代码
展开
-
使用Cython将Python代码转为C语言,从而提高代码保密性
CythonCython是Python编程语言和扩展 Cython 编程语言(基于Pyrex)的优化静态编译器。 它使得为 Python 编写 C 扩展就像 Python 本身一样容易。这允许编译器从 Cython 代码生成C代码。显而易见的是,它能将python代码翻译为C代码,然后生成符合Python/C API的动态链接库。这样就能更好的保护你的python源码不被破解。例如你的代码包含了核心的量化交易策略。将其转为机器语言才能更好的保护你的核心代码。另外一方面,Cython也带来了一些扩展,使得原创 2022-08-11 13:42:11 · 9933 阅读 · 12 评论 -
Python伪随机数模块random
random模块该模块实现了各种分布的伪随机数生成器。(包括在实数轴上计算均匀、正态(高斯)、对数正态、负指数、伽马和贝塔分布的函数)不应将此模块的伪随机生成器用于安全目的。有关安全性或加密用途,请使用secrets模块。关于random模块的更多详细内容,请参考官方文档random — 生成伪随机数下面列举一下该模块常用的功能。random.seedrandom.seed(a=None, version=2)初始化随机数生成器,如果a被省略或为None,则使用当前系统时间。如果操作系统提供随原创 2022-08-14 20:32:42 · 1297 阅读 · 0 评论 -
python3的sorted和sort
排序函数python内置排序函数sorted,可以适用于所有可迭代的对象。而类型自有的sort函数只适用于类型本身。例如list.sort(),只适用于列表类型。另外,sort函数是在原来列表上直接进行排序,而sorted函数则是返回一个排序之后的列表。sort(self, /, *, key=None, reverse=False) # list类的sort方法原型sorted(iterable, /, *, key=None, reverse=False) # sort原创 2022-03-02 14:26:12 · 673 阅读 · 0 评论 -
Python匿名函数
匿名函数匿名函数,为了解决一些简单的需求而设计的一句话函数。在python里使用lambda表达式来生成匿名函数,不需要用def来声明,一句话就可以声明出一个函数。例如:def func(x): return x*2f = lambda x:x*2 # f等价于funcprint(func(3)) # 输出结果是6print(f(3)) # 输出结果是6lambda表达式的语法如下:函数名 = lambda 参数:返回值注意:函数的参数可以原创 2022-02-12 17:03:40 · 476 阅读 · 0 评论 -
python内存管理与垃圾回收
内存管理与垃圾回收内存管理python官方文档-内存管理我们在python还是需要尽量避免手动管理内存,应该交给python自动管理。垃圾回收Python采用的是引用计数机制为主,标记-清理和分代收集两种机制为辅的策略。引用计数引用计数就是对对象的引用次数进行计数,可以将其抽象为:引用计数结构体{ 引用计数; 引用的对象;};那么当引用计数为0的时候,就会进行垃圾回收。引用计数+11、对象被创建时,例如 mark="帅哥"2、对象被copy引用时,例如 mark2原创 2022-02-12 16:24:15 · 923 阅读 · 0 评论 -
python断言
断言Python也提供了断言,但是我们很少使用。因为断言是出于调试目的的一种手段,而python中可供调试的手段实际上非常多。而且python还内置了unittest模块来提供完成单元测试。例如:a = 1assert a,'error'a += 1print(a)断言的作用是判断a是否为真,如果不为真,那么python就会引发异常。data项将称为异常构造函数的参数。当然,如果不捕获assert异常,那么将会导致程序中断。例如:a = 0assert a,'error'a += 1p原创 2022-02-12 10:03:00 · 4101 阅读 · 0 评论 -
Python生成器
生成器本质上,生成器就是迭代器。在Python中可以通过下面两种方式来产生生成器。生成器函数各种推导式来实现生成器首先,来看一下生成器函数。实际上就是将普通函数的return换成yield即可。例如:def func(): print(111) yield 1 print(222) yield 2gen = func() # 获取生成器genprint(next(gen))print(next(gen))# print(next(gen)原创 2022-02-11 17:33:09 · 250 阅读 · 0 评论 -
python类方法和静态方法
类方法和静态方法类方法使用装饰器@classmethod来定义类方法。原理上来说,类方法是将类本身作为对象进行操作的方法。类方法内部可以直接访问类属性、类方法、实例方法,但是无法访问实例属性。例如:class person: flag = "类属性" def __init__(self, name): self.name = name @classmethod def class_m(cls): print(cls.flag)原创 2022-02-11 16:15:52 · 413 阅读 · 0 评论 -
Python装饰器
装饰器模式装饰器是一种设计模式,只不过在Python中有了语法层面的支持。装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的方法的一个包装,因此被称为装饰器。装饰器这种设计模式比派生子类或者函数重载等方式更加灵活。装饰器主要用于扩展一个类(方法)的功能,或者动态增加功能,动态撤销功能。因为装饰器和被装饰的对象之间没有耦合关系。闭包首先,我们需要学习闭包。那么什么是闭包? 闭包就是内层函数, 对外层原创 2022-02-10 20:51:00 · 335 阅读 · 0 评论 -
Python模块基础
模块基础模块文件名因为模块名在Python程序中会变成变量名。因此,应该遵循变量命名规则。例如:你不能建立一个名为def的模块。当一个模块被导入时,Python会把内部模块名映射到外部文件名。模块的使用用户程序可以执行from或者import来导入模块文件。import会读取整个模块,而from则是从模块取出(复制出)特定的名称,并非取出整个模块。from *会取出模块顶层被赋值的所有名称的副本。注意:在Python3中from xxx import *语句不能出现在函数内部,但是可以使用fr原创 2022-01-20 09:18:57 · 297 阅读 · 0 评论 -
Python模块和包
模块和包模块是提供自包含的变量的包(命名空间)从而将部件组织为系统的一种可行方式。一个模块文件顶层定义的所有变量在被导入的时候都变成了模块对象的属性。模块能够提供的核心功能:代码重用命名空间划分共享的服务和数据我们通常在顶层文件(就像C/C++语言中的mian.c文件一样)中包含主要控制流程,而在模块(类似于C/C++其它的.h和.c文件)中定义工具库来提供细节操作。我们导入了模块,就能获取它的属性,从而使用模块提供的功能。import如何工作import的作用是在一个文件中导入模块。原创 2022-01-19 10:05:41 · 934 阅读 · 0 评论 -
python编写类代码的一些细节
编写类代码的细节classpython的类看起来和C++的类没什么区别,实际上不是。python的class语句定义了类,不像C++只是声明类。python的class语句是赋值语句,将类对象赋值给类名,并且直到class赋值语句被执行之前,类都是不存在的。class语句一般形式class name(superclass,...): attr = value def method(self,...): ... self.attr = value原创 2022-01-06 14:01:06 · 895 阅读 · 0 评论 -
Python面向对象的实际例子(一)
面向对象的实际例子下面我们将构造两个类,分别是Person类和Student类。Person类将创建一个处理和人相关的信息的类Student类将定制化Person,修改了所继承的行为。下面我们来一步步构造上面这两个类。创建类并编写构造函数class Person: def __init__(self, name, job, age): self.name = name self.job = job self.age = agecla原创 2021-12-31 14:54:14 · 1678 阅读 · 0 评论 -
Python类的基础知识
基本的类对于Python中的类而言,从最底层来看,就是命名空间。但是这个命名空间和模块不一样,类支持实例化多个对象,类支持命名空间继承,类支持运算符重载。模块的命名空间不支持这些功能。类对象和实例对象类对象提供默认行为,是实例对象的工厂。类对象由class语句创建。实例对象是程序实际处理的对象,每个实例对象都有自己的命名空间,并且拥有创建该实例对象的类的属性和方法。实例对象由类调用创建。python中的类和def以及模块是类似的,这可能也是python一直以来的一致性设计导致的结果。python中原创 2021-12-29 13:59:24 · 999 阅读 · 0 评论 -
python的OOP机制
python的OOP机制在Python中,实际上一切都是对象,我们使用的内置数据类型,本质上也是类的实例化。例如:>>> type("123")<class 'str'>而类本身也是对象,只不过是元类的对象而已。 例如:>>> type(int)<class 'type'>>>> type(list)<class 'type'>从本质上讲,python的OOP机制主要依赖两个基础:1.函数的第一个原创 2021-12-28 09:45:20 · 1519 阅读 · 0 评论 -
python的or,and会返回其中一个操作数
or,and会返回其中一个操作数or,and在python中会返回两个操作数中的一个,例如:>>> 1 and 22这里并不是返回True,而是返回了第二个操作数。 因此,我们需要特别注意一下这里的特殊之处。下面的一些例子是面试喜欢问的。a = 1 or 2 and 3 and 4 or 5 and 6print(a)我们来分析一下上面例子的执行过程, and运算符的优先级高于or运算符,因此一步步执行的结果如下所示:1 or 3 and 4 or 5 and 61原创 2021-12-24 15:26:20 · 1431 阅读 · 0 评论 -
Python函数的文档字符串和__doc__属性
Python函数文档字符串和__doc__属性def add(a, b): a = 123 """ 1.描述函数功能 2.参数说明 3.返回值说明 """ ... return ...写在三引号中内容就是我们通常给一个函数写的文档(注释),这个文档是和函数的内置属性__doc__相关的。你可以使用该属性直接查看函数的文档字符串。例如:print(add.__doc__)注意:文档字符串必须出现在函数体的最前面,它的前面不能有其它的东原创 2021-12-23 14:24:29 · 1509 阅读 · 0 评论 -
wsgi和asgi
wsgi和asgiwsgi和asgi都是Web服务器网关接口。它们是一种规范,描述了Web服务器如何与Web应用程序(客户端)通信,以及如何将Web应用程序链接在一起以处理一个请求。发展历史就本质而言,Web开发绝大多数时候是对HTTP协议(当然还有其它协议,例如FTP,SMTP等)的应用,实际上我们能使用socket自制web服务器,但每次都需要自己处理协议的内容,所以你可能会想自己设计个程序来完成对协议的处理。之后每次都使用该程序来完成对协议的处理。基于此出现了CGI(Common Gateway原创 2021-12-07 08:58:37 · 2585 阅读 · 0 评论 -
Python推测图片格式
使用imghdr模块imghdr模块提供了what()方法,该方法可以推测文件或字节流中的图像的类型。可以识别的图片格式见Python文档。为防止打不开,我把截图放在下面。imghdr的使用方法比较简单,如下所示。你可以传入一个文件,也可以传入字节流。import imghdr# 文件形式res = imghdr.what("/home/zy/图片/渴望.png") print(res)# 字节流形式import requestsdata = requests.get(u原创 2021-11-17 16:12:45 · 818 阅读 · 0 评论 -
Python核心类型总结
Python核心类型总结Python内置的核心数据类型如下表所示。对象类型分类是否可变数字数值否字符串序列否元组序列否列表序列是集合集合是字典映射是在使用的时候,需要我们注意的是python中的一切都是变量都是引用赋值的,除非你显示进行复制操作。变量本身没有数据类型,有数据类型的是对象。变量就是一个void *类型的指针。列表,元组,字典可以包含任何种类的对象,可以任意嵌套。集合只能包含不可变类型的对象因为Pyt原创 2021-11-12 16:46:19 · 1439 阅读 · 0 评论 -
Python——字典
字典字典是一种常见的数据结构,通常在别的语言里,可能会称呼它为哈希表,HashMap。无论怎么样,字典其实就是键值对。是以key-value的形式存在的。在 Python 中,字典是一系列键值对。每个键都与一个值相关联,你可使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,可将任何 Python 对象用作字典中的值。任何不可变对象都可以用作字典的键。在python中,字典被花括号标识(因此创建空集合是由set()来完成的)。例如:>>> a = {原创 2021-11-04 10:22:48 · 544 阅读 · 0 评论 -
python内置函数exec
execpython里的exec函数,能够执行模块文件。例如:>>> exec(open("load.py").read())123456这个效果和import类型,但是实际上exec并不会导入模块。exec每次都会重新运行文件,类似于将代码粘贴到了exec处然后执行。上述的这种写法在python2和python3中都是可行的。在python2中还支持一下写法。exec(open("load.py")) # python2execfile("load.py")原创 2021-11-02 22:25:27 · 624 阅读 · 0 评论 -
Python2和Python3之间的差异
Python2和Python3之间的差异python2和python3默认编码方式不同python2的默认编码方式是ASCII,而python3的默认编码方式是Unicode,因此我们在python2的脚本开始处经常可以看到类似下面的一行注释# coding:utf-8这行注释告诉python解释器,编码方式是utf-8,当然这句话的形式可能有以下的几种方式。# coding:utf-8# *-* coding:utf-8 *-*# coding=utf-8它们之间没有什么区别,不过第二行原创 2021-11-02 22:22:57 · 240 阅读 · 0 评论 -
python——模块和重载
模块和重载简单来讲,任意一个以.py结尾的python文件都是一个模块。例如有A.py和B.py两个文件。在A中可以通过导入B来读取B模块定义的内容,导入操作本质上就是载入另一个文件。基于模块的模型是python程序架构背后的核心思想。一个大型python程序往往以多个模块文件的形式出现,并且从其它模块导入工具。但是通常会指定一个模块文件作为主文件(也叫顶层文件),该文件启动之后,就会运行整个程序。除了顶层文件之外的其他文件都是导入模块。导入操作将会导致模块中的代码被运行,因此导入文件也是一种运行p原创 2021-11-01 23:29:21 · 379 阅读 · 0 评论 -
只要一条命令即可pip换源
只要一条命令即可pip换源pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple下面是一些常用的国内源:阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.douban.com/simple/ 清华大学 https://pypi.tu原创 2021-09-25 15:36:44 · 226 阅读 · 0 评论 -
后缀名非.py的文件,如何作为模块导入
Python文件命名通常而言,我们会给python文件命名为xxx.py的格式。实际上你可以随意给他起一个名字。例如:你可以有一个名为qwe.qq的python文件。然后在终端中使用命令:python3 qwe.qq来执行它。你会发现没有任何问题,它将会被成功执行。**但是,以.py结尾的命名方案在被导入时是必需的。**换言之,你可以起一个名为qwe.qq的python,只不过这时候它就不能被导入了。Linux下导入非.py结尾的python文件在Linux下有种东西叫软连接,它类似于Windows下原创 2021-09-18 15:52:46 · 342 阅读 · 0 评论 -
web后端实现验证码思路
验证码实现思路前端也可是生产验证码,但是前端如果生成简单的验证码,很容易就被爬虫破解,无法很好的起到一个人机识别的效果。而后端生成验证码图片发送给前端,这样的人机识别效果比较好。验证码流程如下:1. 前端发送get请求来获取验证码图片。需要前端生成uuid并把uuid的值传到后端;2. 后端收到前端的生成验证码请求,生成验证码图片和验证码内容。然后将前端传递过来的uuid值作为键,验证码内容作为值,形成一对键值对,存储在Redis中。同时根据需求设置验证码的有效期。3. 前端获取到验证码,等待用户原创 2021-09-05 19:36:18 · 2738 阅读 · 0 评论 -
python使用pip
python使用pip首先判断一下,你的系统是否安装了pip,在终端输入下面的命令即可: pip3 --version或者pip --version两者的结果对于之后的时代而言,应该是没有区别的。毕竟python2已经结束了它的历史使命。我的系统执行这两条命令的结果是一样的。 zy@zy-QiTianM428-A376:~$ pip pip pip3 zy@zy-QiTianM428-A376:~$ pip --version pip 20.0.2 from /usr/lib/p原创 2021-08-28 13:16:31 · 1496 阅读 · 0 评论 -
python——深入函数(1)
函数基础函数能够实现功能的模块化封装,以方便后续调用。函数能够实现代码重用,减少代码冗余。另外,函数可以实现过程的分解。来一步一步实现整个过程。defpython的函数是由一条赋值语句def编写的。def是可执行语句,在python运行到def的时候,会创建一个函数对象,并把该函数对象赋值给函数名变量。由于def是语句,因此它能出现在任何可以出现语句的地方。例如:name = input("please input your name:")if name == "Nicholas Zhao Si"原创 2021-06-22 11:12:20 · 186 阅读 · 0 评论 -
python——文档字符串
字符串文档python支持自动附件在对象上的文档,可以在运行时查看。从语法上来看,就是可以跨行的字符串注释。这种注释可以放在模块开头,函数顶部,以及类顶部。这些字符串被正式的称为“文档字符串”。python会自动装载文档字符串的文本,使其称为相应对象的__doc__属性。用户自定义文档字符串用户自定义文档字符串非常简单,直接按照上面所属即可。例如下面的代码,我保存在一个名为doc_str.py的文件中。#! /usr/bin/env python3"""模块文档"""def func()原创 2021-06-17 10:07:16 · 1887 阅读 · 0 评论 -
Python——迭代器
迭代器模式当扫描内存中放不下的数据集时,我们要找到一种惰性获取数据项的方式,即按需一次获取一个数据项。这就是迭代器模式(Iterator pattern)。C/C++这种语言并没有在语法层面直接实现迭代器模式,需要手动实现。python直接内置了迭代器模式。python2.3中正式引入yield关键字,该关键字用来构建生成器(generator),其作用和迭代器一样。所有生成器都是迭代器,因为生成器完全实现了迭代器接口。迭代器用于从集合中取出元素;而生成器用于“凭空”生成元素。不过在python中原创 2021-06-16 09:19:07 · 351 阅读 · 4 评论 -
python——语句和表达式
语句和表达式在python中,语句和表达式是不一样的。语句不能出现在应该是表达式的位置。最典型的例子莫过于赋值语句出现在了表达式的位置,然后就会导致语法错误。赋值语句出现在循环条件表达式处>>> i = 1>>> while i = 3: File "<stdin>", line 1 while i = 3: ^SyntaxError: invalid syntax赋值语句出现在函数调用的参数中>>原创 2021-06-11 23:39:00 · 527 阅读 · 4 评论 -
python3取代None和pass的新语法
python3取代None和pass的新语法我们常用pass来表示“以后在填上”,或者是表示“这里什么都不做”,当然了,这里什么都不做,我们极可能使用None来表示。不过在python3中有一种新的语法“…”,使用“…”来代替pass和None出现的场合,这样就可以两者的功能合并用一种语法来完成。例如:替换None>>> a = None>>> a>>> b = ...>>> bEllipsis替换pass>&原创 2021-06-11 10:40:14 · 512 阅读 · 1 评论 -
python——布尔值
真值和布尔测试在python中:所有对象都有一个布尔值(真或者假);任何非0数字或非空对象都是真;数字0,空对象以及特殊对象None都是假;比较和相等测试会递归的应用到数据结构中;以上这些都可以使用bool()函数来进行测试,例如:>>> L = [1,2,3]>>> bool(L)True>>> string = "qwert">>> bool(string)True>>> bool(N原创 2021-06-08 09:04:31 · 458 阅读 · 0 评论 -
python——赋值
赋值赋值操作,本来没有什么细节。但是python现在的赋值操作也是花里胡哨的,跟C++快一样烦人了,你不用这种方式,总有人用,因此还是有必要学一下。就像切片能够完成删除,增加一样,虽然很不好,但是python支持这种做法,就难免有人这么写。序列赋值直接看代码,其中第三行的赋值是可行的,合法的语句,不像表明上看到的A, B组成一个元组,元组是不可变对象,因此无法赋值。>>> a = 1>>> b = 2>>> A, B = 3, 4>原创 2021-06-05 16:58:52 · 2966 阅读 · 0 评论 -
Python风格——跨行代码
跨行代码在python里有时候,一行代码可能太多了,需要跨行书写。python提供了两种方案,其中一种是C语言风格的,另外一种则是python自身提供的方式。C语言风格from kvsp import views,roleInfo,roleNotice,patchInfo,poc,updatePackage,pacInfo,guide,osVersion,userManage,\cve_like,versionList,scanmanage,osBaseInfo,cvekernel,extern原创 2021-06-04 16:37:11 · 937 阅读 · 0 评论 -
Python交换两个变量的值
交换两个变量的值首先,来回顾一下C语言中交换两个数字的三种方法,最简单的方式也需要一个中间人来暂存其中某一个值。但是在python下,这个操作会异常的简单。>>> a = [1,2,3]>>> b = ['a','b','c']>>> a,b = b,a>>> a['a', 'b', 'c']>>> b[1, 2, 3]>>> a = 1>>> b = 2>原创 2021-06-04 11:20:42 · 374 阅读 · 0 评论 -
Python——分片的强大功能
分片的强大功能一些细节从某一个位置开始进行切片,到整个序列结束。例如:>>> l[1:] # 不用写结束位置即可。[2, 3]超出边界的索引会出错,但是分片不会,因为python会调整分片的边界来适应。例如:>>> l[5]Traceback (most recent call last): File "<stdin>", line 1, in <module>IndexError: list index out原创 2021-06-04 10:51:03 · 505 阅读 · 1 评论 -
Python——字符串
字符串python3的内置字符串类型默认是支持utf-8的,并且python的字符串提供有一套强大的处理工具集,为程序设计带来了巨大的便利。相较于C语言,python没有单个字符这种类型,单字符也是字符串。python的字符串是不可变类型,因此不能修改一个字符串对象。在Python里单引号(’’),双引号(""),三引号(’’’’’'和"""""")都可以用来把字符串包括起来。它们都是字符串,没有本质上的区别。注意由于python3的str类型是Unicode的,因此我们应该摒弃C语言中一个ASC原创 2021-06-03 13:43:04 · 203 阅读 · 3 评论 -
python风格——动态类型
python风格的代码想要写出python风格的代码,就得理解python的特点,合理的应用python所带来的东西。python是一门动态类型的语言,这是由python的设计思想所决定的。在python中,我们编写对象接口而不是类型。我们关心的是一个对象能做什么,而不是关心它是什么。它是什么并不重要,重要的是它能做什么?我们希望代码能自动的适应非常多的类型,任何具有兼容性的接口对象能够正常工作。实际上这就是多态(多态:指为不同数据类型的实体提供统一的接口),这也是使用python的核心思想之一。动态原创 2021-06-01 12:24:06 · 529 阅读 · 3 评论