一文彻底搞懂python的垃圾回收机制及常量池验证

Python爬虫解析网页的3种方式,值得收藏 一般来说当我们爬取网页的整个源代码后,是需要对网页进行解析的。 Python网页解析正则匹配解析:BeautifulSoup解析项目实战 正常的解析方法有三种 ①:正则匹配解析 ②:BeatuifulSoup解析 ③:lxml解析 正则匹配解析: 在之前的学习中,我们学习过爬虫的基本用法,比如/s,/d,/w,*,+,?等用法,但是在对爬取到的网页进行解析的时候,仅仅会这些基础的用法,是不够用的,因此我们需要了解Python中正则匹配的经典函数。 re.match runoob解释:re.match尝试从字 阅读详情

Python的引入

人类认识世界是从认识世界中的一个又一个实物开始,然后再对其用语言加以描述。例如当中国人看到苹果时,便会用中文“苹果”加以描述,而用英语的一些国家则会用“apple”加以描述。

以上说到的中文和英文都是人类认识并描述世界的一个工具,而在计算机的世界中,为了让计算机去认知世界,从而帮助人类完成更多的任务。在计算机领域中也发展了语言这个工具,从早期的机器语言到汇编语言再到现在使用范围较广的高级语言。而我们接下来要介绍的Python则属于高级语言这一分支。

变量的引入

为什么要有变量

上面说到Python是计算机世界中用来描述外部世界的,并且也提及了世界就是一个又一个实物的堆叠,描述世界其实就是去描述那一个又一个实物,人类如此,计算机也是如此。因此计算机语言开发者们为了使用计算机语言的人更好的在计算机中去描述这些实物,便在计算机语言中引入了变量这个概念,Python也不例外。简单点说,变量就是用来描述世间万物的。

定义变量

为了在计算机书写方便,定义一变量也有一定的规则,在这里我们仅说说Python中变量的定义规则,首先我们先定义两个变量:

name = 'chenyoude'
year = 2021

上述代码中我们便定义了两个变量,从上面定义的两个变量中,我们可以看到,变量的组成分为三个部分:

  1. 变量名:反应变量值所描述的意义,并且可以用来引用变量值。
  2. 赋值符号:赋值。
  3. 变量值:存放数据,用来记录现实世界中的某种状态。

常量引入

上面简单讲解了Python中的变量,通过字面意思,可以看到变量其实是一个变化的量,例如,下面这个实例:

year = 2021
year = year + 1
print(year) # 输出结果:2022

上面这个常量的实例令人大吃一惊,因为使用常量YEAR后和使用变量year的结果一致,也就是说常量YEAR遭到了更改。但是,稍微解释你就明白了。

在Python中,虽然也和其他很多计算机语言一样拥有常量这个概念,但更多的是约定俗成的,Python并没有严格的对常量进行控制,只是规定常量名必须全部大写。原因很简单:都是常量了,你为什么还要修改?

常量池引入

上面讲到常量就是一个不会变化的变量,严格的讲,在Python中是没有常量这个概念的。但是,在Python中又有另外一种例外,那就是常量池,为了搞清楚常量池,首先我们得弄明白Python的几个小知识,接下来一一叙说。

Python解释器

上面提及到Python是计算机用来描述世间万物的一种语言,由于计算机没有人脑那么强大,计算机更多的只是认识高低压电频,再通过对高低压电频的转化进而编码成我们看到的一个又一个字符,也就是说计算机是无法直接认识利用Python写下的字符的。(此处设计计算机组成原理,不多做介绍)

也就是说,当我们利用Python写下一个又一个字符并且交给电脑时,需要通过编码这个过程,而这个编码的过程有时候也被称为解释。解释的原理就相当于从中文转成英文,只不过此时不是需要让英文使用者看懂中文,而是让计算机能够看懂Python。

中文转成英文的时候,可能需要一个翻译员或一个翻译软件,利用Python写下的字符转化为计算机能看懂的语言同样如此,这个转化过程也需要一个外物的帮助——Python解释器。

Python变量存储机制

假设我们使用Python解释器定义了以下一个变量:

year = 2021

当我们通过字符定义变量时,一定会好奇这些变量被Python解释器解释后到底去了哪?如果对计算机的组成熟悉的同学,一定会清楚计算机的核心组件为:CPU、内存、外存、输入设备、输出设备。也就是说,这些字符应该存储在这些核心组件中。在这里就不卖关子了,当我们通过字符定义变量并对其用Python解释器进行解释时,他们会以计算机能看懂的形式进入内存当中。

上面讲的对于很多非科班出身的朋友可能很难理解,在这里将它生动化。现在假设江西师范大学相当于电脑内存,每当有一批新学生进入师大时,师大都会开辟出一个新教室给这批新同学使用,并且会给每一个教室一个独一无二的教室牌号。由于把师大看作是内存,这批新同学就可以看成是变量值,而教室牌号就是变量名。也就是说,对于师大这个大内存,每定义一个变量year=2021,就会在这个大内存中开辟一个小空间,小空间中放变量值2021,然后大内存会给这个小空间定义一个变量名year,此时变量名year指向变量值2021。

上面说到每当Python解释器解释一个变量时,会将这个变量存放到内存中的一个小空间中,但如何知道这个小空间的具体位置呢?此处介绍Python的一个内置函数id(),通过这个函数可以获取某一个变量所在的内存地址,例如下面这个实例:

year = 2021
print(id(year)) # 输出4499932432

Python垃圾回收机制

对于上述师大的例子,此处再做延伸。由于那一批学生所在班级新转来了几位同学,需要那一批学生更换更大一点教室,也就是给他们一个新的教室。那么学校应该会这样处理,首先开辟一个新的教室,然后拿下那一批学生原有教室的教室牌号更换到这个新教室,最后会清空原有教室。

在Python中,也是如此,如果到了新的一年,我们会重新定义一个year变量,也就是year=2022。如果这是在同一个程序中如此做,Python会沿用上述更换教室的方法,它首先会解除year和2021的连接,开辟一个新内存存放变量值2022,让year与2022连接。此时,会发现2021这个变量值只有变量值而没有变量名,因此这个没有变量名的变量值会变成Python眼中的一个垃圾变量,从而触发Python垃圾回收机制,对这个2021所在的内存空间进行回收。

为了更好地理解Python垃圾回收机制,可以看下面这个例子:

year = 2021
print(id(year)) # 输出4499932720
print(year) # 输出2021

year = 2022
print(id(year)) # 输出4499932560
print(year) # 输出2022

通过上述例子,可以看到当新定义了一个year变量时,year会与新的变量进行一个连接。当然,此处所说的垃圾回收机制只是为了引入引用计数这个概念,并不是完全正确的解释,并且上述实例还无法证明变量值2021所在内存是否被回收,下面将通过引用计数的实例会进一步说明并重新解释垃圾回收机制。

引用计数

上面讲到如果某个变量值绑定着变量名,就是一个正常的变量,如果该变量值没有绑定着门牌号,这个变量就是一个垃圾变量,对于垃圾变量,Python会触发垃圾回收机制回收这个变量所占有的内存。进而可以想到,Python中一个变量名一定只能对应一个变量值。

在这里我们就不能沿用师大这个例子了,而得引出一个新的名词——引用计数。

为了解释引用计数,我们首先得明白在Python中,当定义了一个变量值为2021的变量时,它可以表示年份、也可以表示山的高度…也就是说一个变量名只能对应一个变量值,但是一个变量值可以对应不同的变量名,这种设计也是比较合理的。

现在我们引出引用计数这个概念,当相同的变量值被赋予不同的变量名时,变量值每增加一个变量名的赋予,则该变量值的引用计数加1。由于我们可以通过Python内置sys模块中的getrefcount()函数获取某一个变量的引用计数(getrefcount输出值默认从3开始),可以通过下面这个例子感受下:

import sys

# 引用计数初始值为3
print(sys.getrefcount(2021)) # 输出为3

year = 2021
print(sys.getrefcount(2021)) # 输出为4

height = 2021
print(sys.getrefcount(2021)) # 输出为5

del year
print(sys.getrefcount(2021)) # 输出为4

从上述代码可以看出变量值2021的引用计数由于每一次赋予新的变量名,引用计数都会增加,而当我们利用del关键字删除变量值2021的一个变量名year时,引用计数则会减少。

为了更加严谨的表达引用计数,此处不得不再次深入,引用计数字面意思可以理解为引用的次数,也就是说上面的例子其实并不严谨,更严谨的讲,只有当一个变量值每一次被直接或间接引用时,引用计数才会增加,在Python中让引用计数增加共有三种方法:

  1. 变量被创建,变量值引用计数加1
  2. 变量被引用,变量值引用计数加1
  3. 变量作为参数传入到一个函数,变量值引用计数加2

具体看下述实例:

import sys

# 引用计数初始值为3
print(sys.getrefcount(2021)) # 输出为3

# 变量被创建,变量值引用计数加1
year = 2021
print(sys.getrefcount(2021)) # 输出为4

# 变量被引用,变量值引用计数加1
height = year
print(sys.getrefcount(2021)) # 输出为5

# 变量作为参数传入到一个函数,变量值引用计数加2
def func(year):
    print(sys.getrefcount(year)) 

func(year) # 输出为7

Python中既然有增加引用计数的方法, 也当然会减少引用计数的方法,共有以下4种:

  1. 变量值对应的变量名被销毁
  2. 变量值对应的变量名被赋予新的值
  3. 变量值对应的变量名离开它的作用域
  4. 变量值对应的变量名的容器被销毁

重看Python垃圾回收机制

有了getrefcount()方法并通过引用计数,我们就可以解开垃圾回收机制遗留的一个问题——如何判断是否触发了垃圾回收机制。每当一个变量定义,他的getrefcount输出值为3,而如果该变量值被垃圾回收机制回收,则它的getrefcount输出值回到3,可以通过下面实例验证上述猜想:

import sys

print(sys.getrefcount(2021)) # 输出为3

year = 2021
print(sys.getrefcount(2021)) # 输出为4
print(id(year)) # 输出4499932720
print(year) # 输出2021

year = 2022
print(sys.getrefcount(2021)) # 输出为3
print(id(year)) # 输出4499932560
print(year) # 输出2022

通过上述实例,可以发现由于变量值2021对应的变量名被新的变量值2022引用,它的getrefcount输出值为3,引用计数变成了0,因此可以证明Python触发了垃圾回收机制。

如果对上述验证Python触发垃圾回收机制的实例深入挖掘,会发现当把year赋给变量值2022时,变量值的2021的引用计数为0,此时触发了Python的垃圾回收机制,那么是否可以表明只有当变量值2021的引用计数为0时才能触发垃圾回收机制呢?而不是上一次说的当变量值的变量名被新的变量值被引用了才会销毁呢?因为变量值可以对应多个变量名,下面通过下述实例验证:

import sys

print(sys.getrefcount(2021)) # 输出为3

year = 2021
print(sys.getrefcount(2021)) # 输出为4

height = 2021
print(sys.getrefcount(2021)) # 输出为5

year = 2022
print(sys.getrefcount(2021)) # 输出为4

del height
print(sys.getrefcount(2021)) # 输出为3

通过上述实例,可以发现由于定义一个变量后,该变量对应的变量值引用计数可以不断增加,而只要引用计数不为0,那么Python就一直还在内存中保留着这个变量值并且对其引用,只有当该变量的引用计数为0时,Python才会触发垃圾回收机制对该变量值进行回收,这才是比较正确的垃圾回收机制。当然,如果深入,Python的回收机制还有分代回收,此处不做延展,了解上述这些就足矣了解接下来讲的小整数池。

常量池

在上述各个知识的打通之后,现在可以正式引入常量池这个概念。上面讲到在Python中严格的讲是没有常量这个概念的,即使你通过约定俗成的方法定义了一个常量,但这个常量也只是一个变量,也就是说只要你对这个常量做出修改,这个常量原有对应的常量值引用计数就会变成0,由于常量等同于变量,它一样会被Python垃圾回收机制回收。

但是在Python中,存在着一些例外,这些例外就是一个小整数池,顾名思义,小整数池表示的是从-5到256范围内的整数,这些整数定义出来后就是一个常量,也就是说他们的引用计数即使为0,也不会被Python的垃圾回收机制回收,可以通过下述实例验证:

import sys

first_l = []  # 定义列表l存储[-5,256]中的所有整数的引用计数
add_l = []  # 定义列表add_l存储[-5,256]中的所有整数的引用计数加1后的引用计数
del_l = []  # 定义列表del_l存储[-5,256]中的所有整数的引用计数减1后的引用计数

for i in range(-5, 256):
    first_l.append(sys.getrefcount(i))
    add = i
    add_l.append(sys.getrefcount(i))
    del add
    del_l.append(sys.getrefcount(i))

first_l.sort()
add_l.sort()
del_l.sort()

print(f'min(first_l): {min(first_l)}') # 获取[-5,256]中所有整数的最小引用计数,输出为4
print(f'min(add_l): {min(add_l)}') # 获取[-5,256]中所有整数的最小引用计数,输出为5
print(f'min(del_l): {min(del_l)}') # 获取[-5,256]中所有整数的最小引用计数,输出为4

从上述实例可以看出,[-5,256]中的整数的getrefcount默认初始值为4,也就是说即使没有对这些整数进行初始化的创建,Python早已对他们进行了引用,即使他们的引用计数为0,他们也不会也不可能被删除,因为他们从Python解释器启动开始就已经被生成。

当然,也可以通过垃圾回收机制判断小整数池中的整数是否会被垃圾回收机制回收,可用如下实例证明(由于Pycharm等解释器会一次性编译整个文件,固使用终端编辑代码):

>>> a = 5
>>> id(a)
4529334480
>>> del a
>>> b = 5
>>> id(b)
4529334480
>>>
>>> a = 257
>>> id(a)
4533920752
>>> del a
>>> b = 257 # 消除分代回收对结果的影响
>>> del b
>>> b = 257
>>> id(b)
4531031792
>>>

从上述实例中可以看出,变量值5即使被垃圾回收机制回收后,再次创建变量值为5的变量,该变量的内存地址始终无变化,即该变量未被垃圾回收机制回收,小整数池中的其他整数同理;而变量值257却已经被垃圾回收机制回收,非小整数池中的其他变量同理。

当然,还可以通过下述方法查看这些小整数池的整数的内存地址的变化,如下:

a = 256
b = int("256")
print(id(a), id(b))  # 4544968752 4544968752

a = 257
b = int("257")
print(id(a), id(b))  # 4548719792 4546289360

a = -5
b = int("-5")
print(id(a), id(b))  # 4544960400 4544960400

a = -6
b = int("-6")
print(id(a), id(b))  # 4690036912 4546289360

对于上述实例,在Python中,由于每生成一个变量便会开辟一个新的内存空间给该变量,但是上述实例表明当变量值为-5和256时,每次开辟的内存空间地址都是一样的;而当变量值不属于[-5,256]时,每次定义变量值时,内存空间的地址都是不一样的。

总结

在Python中,变量是用来描述世间万物的,变量顾名思义是变化的一个量,而在某一个局部范围内,有些量可能是不会变化的,因此语言设计者在计算机中定义了常量这个概念,但是在Python中并没有规定的常量,只有约定俗称的常量,也就是变量名全大写的则是常量。但是Python中有一个另外,也就是小整数池[-5,256],在这个小整数池中的整数对于Python来说就是一个常量,因为从引用计数的打印中可以看出它在Python解释器启动的时候就已经生成并占用了一个固定的内存空间,并且不会因为引用计数变为0之后就会被Python的垃圾回收机制回收,而这些小整数池也可以称作Python的常量池。

怎么用python做网站? python做网站方法步骤:[外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图片上https://传(imblog.cdgmg.cn/2021040219043-770.png?x-oss-process=image/watermark,type_ZmFuZ3poZD5naGVpdGk,shadow_n0,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Byb2dyYiW1WE1fRw==,size_16,color_FFFFF,t#pic_center488)(ht 阅读详情

相关推荐

利用 Python 破解 ZIP 或 RAR 文件密码

利用 Python 破解 ZIP 或 RAR 文件密码破解原理实验环境库利用 Pipenv 安装 rarfile编码准备密码本读取压缩文件尝试解压暴力破解程序入口使用运行结果:扩展密码本如何获取?如何加速破解过程?多线程(进程)破解利用 GPU 加速 常会从网络上下载一些带密码的压缩包,想要获取里面的内容,往往就要给提供商支付一些费用。想要白嫖其中的内容,常见的做法是百度搜索一些压缩包密码破解软件,但后果相信体验过的人都知道。本文将会利用 Python 破解压缩包的密码,这里以 ZIP/RAR 为例。 本

program_G的博客 2860

Python基础

今天学习的是python的基础语法。

m0_71883051的博客 116

遇到禁止复制该怎么办?幸好我会Python...

目录 01、小案例 1、安装pdfkit库 2、小案例 02、实战 1、目标网站 03、小结 或者是这种情况 以上这种情况都是网页无法复制文本的情况。不过这些对于Python来说都不是问题。今天辰哥就叫你们用Python去解决。 思路:利用pdfkit库将html网页保存为pdf 01、小案例 1、安装pdfkit库 pip install pdfkit 通过命令安装pdfkit,此外还需要安装exe文件(wkhtmltopdf)。 下载链接:https://wkh

program_G的博客 2779

Python之常量池

常量池 有下面这段代码: >>> name = '张三' >>> name2 = '张三' >>> name3 = '张三' >>> id(name) 4347189392 >>> id(name2) 4347194288 >>> id(name3) 4348257232 例子中虽然三个变量都是张三,但它们的内存地址是不同的,说明它们不是同一个对象。 非常勤奋好学的**@薛定谔的猫**提出了问题:

weixin_58753619的博客 823

如何将你的 neovim 打造成 vscode 一般的 Python IDE?

将 neovim 打造成 vscode 一般的 Python IDE安装安装neovim1. 下载 nvim.appimage2. 加入可执行权限3. 放入/usr/bin 目录配置插件管理自动补全1. 安装 coc.vim2. 安装Python支持3. 安装快速生成代码插件4. 安装书签搜索配色插件窗口控制文件浏览美化状态栏加入 emoji 图标注释插件自动生成 Python 函数/类文档快速对齐彩虹括号 安装 安装neovim 本文只写Linux 的安装。 由于仓库的 neovim版本可能和最新版本有很

program_G的博客 2439

python编写游戏怎么打包——详解python+pygame游戏开发之使用Py2exe打包游戏为exe文件

python编写游戏怎么打包1.简介2.软件准备3.打包流程 最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本。 这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编译,python毕竟是脚本程序)成一个可执行文件势在必行。 在网上搜了几款关于python打包的程序,使用以后发现Py2exe是比较实用和方便的(py2exe是免费的)。 1.简介 Py2exe可以将一个Python程序打包成exe可执行文件,方便没

program_G的博客 2348

常量池垃圾回收:判断类的存活

方法区中的常量池也需要进行垃圾回收。主要回收对象是废弃的常量和无用的类。其中,判断类的存活需要同时满足以下3个条件:1.    该类所有的实例已经被回收,即Java堆中已经不存在任何该类的实例。2.    加载该类的ClassLoader已经被回收。3.    该类对应的java.lang.Class对象没有在任何地方被引用,即无法在任何地方通过反射访问该类的方法。同时满足这3个条件的类,就是可回...

超频化石鱼的博客 1118

python调用matlab函数

python调用matlab函数1、matlab中python外部接口(API)的安装2、matlab.egine模块3、从Python传递数值到Matlab 1、matlab中python外部接口(API)的安装 第一次使用Matlab需要先安装一下python的API。 路径为:…\Matlab2019a\extern\engines\python\setup.py 需注意matlab版本与其所支持的python版本,如 Matlab2018b支持python 3.4 3.5 3.6,2019a支持到3

program_G的博客 2034

Python识别图片中的文字

Python识别图片中的文字前言Tesseract(1)Tesseract的安装及配置(2)下载语言包(3)其它模块下载文字识别(1)单张图片识别(2)批量图片识别 前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制。或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存。但是当我们想用到里面的文字时,还是要一个字一个字打出来。那么我们能不能直接识别图片中的文字呢?答案是肯定的。 Tesseract 文字识别是ORC的一部分内容,ORC的意思

program_G的博客 1万+

用 Python 写个贪吃蛇,保姆级教程

本文基于 Windows 环境开发,适合 Python 新手 Python 练手级项目——贪吃蛇一、初识 curses1.1 简单使用1.2 整点花样1.2.1 新建一个子窗口1.2.2 上点颜色1.2.3 给点细节二、贪吃蛇2.1 设计2.2 蛇语者2.3 命令行?画板!2.4 控制!2.5 直接使用三、结尾 本期介绍 Python 练手级项目——贪吃蛇! 原本想推荐一个贪吃蛇的开源项目:python-console-snake,但由于该项目最近一次更新是 8 年前,而且在运行的时候出现了诸多问题。.

program_G的博客 2003

五分钟学会Python网络爬虫,这可能是我见过最简单的基础教学了!

五分钟学会Python网络爬虫前言什么是爬虫爬虫的基本原理爬虫工具和语言选择一、爬虫工具二、爬虫语言Python 爬虫Selenium库的使用一、基础知识二、Selenium基础爬虫实例演示 前言 “爬虫写得好,牢饭吃到饱”,业内常用这个段子来调侃爬虫工程师。因为做爬虫有些敏感、重要的数据是不能随便抓取,进行商业利用的,不然随时都可能被请去“喝茶”。今年,就有好多互金公司因为爬虫的问题,被举报调查。 但不管怎样,爬虫技术是无罪的,还是值得我们开发人员去学习了解一下的。在学习之前,我们还是要先了解一下相关概念

program_G的博客 1966

瞬间“友尽”的五大整蛊代码,快去坑你的小伙伴吧!

Python 能做很多无聊,但有意思的事情,例如接下来的一些案例。 Python 五大整蛊代码Python 整蛊程序无聊程序之一无聊程序之二无聊程序之三无聊程序之四无聊程序之五 Python 整蛊程序 以下程序,不要发代码,要不实现不了你整蛊的目的。 要打包成一个 exe 程序,发给朋友才有意思。 使用 pip install pyinstaller。 打包命令如下: pyinstaller -F 文件名.py 1 过程中如果出现 BUG(一般是编码错误),点击导航查看解决方案 无聊程序之一 while

program_G的博客 1万+

乖乖!“手机”居然也可以写Python代码?还支持各种库?

2017.12.9更新如果单纯手机上使用python的话,安卓更推荐Pydroid3/2,可以直接在google play下载。可免费使用,各种模块如numpy,matplotlib,pandas,scipy,pillow,pyqt5,scikit-learn等等都可以安装使用,不过免费版是没有代码提示功能的,有条件的还希望大家支持一下作者,开个pro版本。---------------------------------------------------------------------------.

program_G的博客 1848

用Python爬取网页数据,手把手教会你!

其实在当今社会,网络上充斥着大量有用的数据,我们只需要耐心的观察,再加上一些技术手段,就可以获取到大量的有价值数据。这里的“技术手段”就是网络爬虫。今天就给大家分享一篇爬虫基础知识和入门教程: 什么是爬虫? 爬虫就是自动获取网页内容的程序,例如搜索引擎,Google,Baidu 等,每天都运行着庞大的爬虫系统,从全世界的网站中爬虫数据,供用户检索时使用。 爬虫流程 其实把网络爬虫抽象开来看,它无外乎包含如下几个步骤 模拟请求网页。模拟浏览器,打开目标网站。 获取数据。打开网站之后,就可以自动化的获

program_G的博客 8136

怎样使用python爬虫获得免费代理IP

怎样使用python爬虫获得免费代理IP进行爬取和测试有效性总结 爬虫一直是python使用的一个重要部分,而许多网站也为此做了许多反爬措施,其中爬虫访问过于频繁直接封ip地址也作为一种“伤敌一千,自损八百”的方法被许多网站采用,代理ip便可以防止这种情况出现。 进行爬取和测试有效性 分析完毕开始爬取ip,直接使用第三方的requests和BeautifulSoup4,可以让抓取变得很方便,代码如下: from iptools import header, dict2proxy from bs4 impor

program_G的博客 1832

MT5策略如何设置回测结果才能最接近实盘

摘要:在MT5回测中,选择"每笔分笔报价"模式最接近实盘交易,因其使用真实Tick数据模拟价格波动、点差和滑点。关键设置包括:下载高质量历史数据、合理设定点差和滑点、使用正常回测速度。该模式能准确测试挂单、止盈止损等策略,虽然速度较慢但结果最可靠,避免其他模式造成的失真,是评估交易策略表现的最佳选择。(149字)

weixin_38915451的博客 1882

Python代码原来还可以这样玩——画出不同人物效果图,感觉很美好

看到不少人都在用Python(大多是turtle库)绘制各种图,感觉很哇塞,就稍微整理了下觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~)

program_G的博客 4092

vos如何对接okcc(保姆级教程)

1.添加账户 点击 系统->账户管理 [图片] 2.创建费率 系统->费率管理 点击添加

qq_46333281的博客 3455

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

weixin_53637133的博客 181

SAPABAP金色传说:关于导入和导出Excel时反复弹窗提示 SAP GUI安全性问题的解决方法

文章目录前言一、提示的到底是什么?二、关闭SAP GUI安全提示的步骤1.设置位置 前言 如果你在SAP中,经常需要将数据导出Excel,或者使用Excel进行批导数据,那么你对下面这个频繁出现的弹窗提示一定不陌生! 系统试图创建文件 C:\Users\15265\Desktop\EXPORT.XLSX 于目录 C:\Users\15265\Desktop\ 是否要授权修改父目录及其所有子目录? 不管你是不是选的记住我的决定,它必出!就很烦!那如何处理才能关闭呢? 提示:以下是本篇文章正文内容,看完快

Easystudios博客 1万+

uniapp - 超详细实现播放 svg / svga 格式动画组件插件,用于直播间赠送礼物特效动画或项目动画特效较多的应用(新手小白保姆级教程,提供插件+详细运行示例+使用文档+注意事项+格式说明)

uniappsvga,uniapp播放svga动画,uniapp中使用svga动画详细教程,uniapp播放svga的插件,uniapp有没有调用svga格式动画的组件插件,uinappH5App小程序全端兼容的svga播放器免费好用插件,uniapp好用的svga格式动画插件,在uniapp中使用SVGAPlayer播放svga动画,uniapp中使用svga动画,编译到apph5,uniapp运行svg动画,uniapp怎么使用svga文件格式,uniapp播放svg格式的动画教程,un

🏆 前端领域优质创作者 1万+

【第 009 讲】全面掌握 Python 注释:注释的定义与作用 | 单行注释 | 三引号与多行注释 | 注释使用的最佳实践

本文系统讲解 Python 注释的完整知识体系:从注释的定义与作用讲起,梳理单行注释的书写位置、临时屏蔽用法与 PEP 8 排版规范,剖析注释被忽略的底层机制;进而说明三引号字符串的本质与嵌套问题;最后给出注释使用的三条实践原则,帮助读者写好可读性高的注释。

大模型全栈工程师 · Thanks_ks 575

SAP-ABAP:SAP创建CDS视图(SQL语句创建)实例详解

通过Eclipse和ADT创建CDS视图是SAP开发中的一项重要技能。CDS视图不仅简化了数据建模,还提供了高性能和灵活性。掌握CDS视图的开发和使用,可以帮助你更好地支持SAP S/4HANA和Fiori应用的开发。

baidu_35680696的博客 1825
上一篇: python调用matlab函数
下一篇: Python全局变量global关键字详解
克金森沐沐
博客等级 码龄6年 694粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值