自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(251)
  • 收藏
  • 关注

原创 读《股票大作手回忆录》有感

目录一、大势、等待、仓位二、价格沿着最小阻力方向前进三、主力最在乎的是流动性四、所谓的内幕消息和利好消息五、主力基本的炒作方法六、正确的读懂盘面语言.七、股价的下跌不是空头的问题一、大势、等待、仓位势,意味着熵减,意味着能量的聚集,意味着持续性。持续性使得规律形成,使得预判成为了可能。顺势而为,正确的跟随势,那么势就是最强大的朋友,否则势就是最强大的敌人,交易正道就是顺势而为,不立危墙。势是交易第一维度的东西,任何事物的分析,只有客观的认知和分清主次因素,把握住最

2024-04-14 20:35:05 869

原创 python自定义库的打包和安装

要将自定义库安装到python的三方包地址site-packages中,除了可以直接的复制之外,更为合理科学的方法是通过build和install的方式进行。因为直接复制仅仅作为一种临时的简单的方法,而且只能针对源码进行,也不好进行科学管理,相对的trciky一些,后者才是更为科学合理的工作流。通过打包的方式进行,其需要先将原始的自定义库进行build,生成wheel文件或者压缩后的源码文件,然后通过pip直接安装即可。当然这里对库进行打包,需要依赖专门的工具,本文使用的是相对简单的flit工具。

2024-04-06 23:32:15 815

原创 因子中性化和因子解释

因子中性化因子值本身是否和市值存在高度相关性,若如此,会导致市值因子和该因子混在一起。如果相关性较高,那么实际上就和市值因子的效果一样了。有时候,我们一样因子本身不受市值影响,那么就可以通过使用中性化处理后的因子值。但是有时候,我们因子本身的含义本来就偏好某类市值股票,即这种市值效应是该因子本身的一种预期特点,那么就不需要中性化。因此,只有当我们一样剥离某些其他因子的影响,才需要中性化。一般什么情况下需要中性化?当我们想要的因子由于代理变量不够纯粹,会和其他因子存在较大相关性,但是我们又只想看纯

2023-02-12 15:55:23 1013 1

原创 numba使用注意点小结

4. 对于array的索引,支持全部的基础索引操作和切片索引操作,但是对于高级索引,尽管array可能是多维的,但是高级索引只能有一个,即只能在一个维度上有高级索引,而且这个高级索引也必须是一维的array,这里强调一维以及是array,不能是list,不然numba无法识别;也不能是多于一维的,如果确实需要一维以上的高级索引,则可以使用loop实现,numba会内部将loop转为高效的代码。1. numba不支持python的字典类型。2. 尽量使用数值型的array。

2023-02-09 21:48:02 754

原创 贝叶斯统计

频率学派经典估计和贝叶斯估计经典的频率学派的参数估计方法有矩估计和最大似然估计,假设样本是在一个客观固定的参数所确定的概率模型下生成的,这个前提下,直接先假设一个未知参数,然后根据某些原则(矩相等或者最大似然原则)求出未知参数值。由于频率学派认为参数是固定的未知常数,因此,对参数不会存在概率类似的阐述。例如,对于未知参数估计的在一定置信水平alpha下的置信区间,频率学派的正确解释是:如果进行n次试验,那么会有alpha*n次,真实的参数会落在这个置信区间中,而对于一次采样试验来说,参数是否落在这个区间

2023-01-27 21:40:24 786

原创 python模块循环导入问题解析

在python3中,只要执行import a后者from . import a,即只要a在import语句之后且被执行,那么a就会被加入到sys.modules中,而后续尽管在模块a被完全执行完毕之前,有模块b导入a,由于a已经在sys.modules中,b会直接从缓存中导入a,而不是重新执行a,因此这时避免了语法上无限循环导入的问题,因此导入语句可以顺利执行。在一个包中,如果A的完全导入依赖于B的导入,但是B的完全导入又需要导入A,即两个模块之间存在相互导入,那么就会引发循环导入问题。

2023-01-19 15:33:21 1235

原创 记numpy高速封装库bottleneck的一个bug

因此,在使用bottleneck时,避免直接使用move_mean函数,而且切记要对结果进行检查,bottleneck这个库目前看来还不是很安全。奈何numpy本身对移动窗口函数的支持不好,numpy.lib.stride_tricks.sliding_window_view用起来不是那么方便,有时候效率也不高。博主在使用bottleneck的移动平均函数时,对0的平均得到了很接近0的非零值,这是一个官方已知的bug,但是还未修复。

2023-01-09 23:12:51 387

原创 多元函数的二阶泰勒展开推导

多元函数受多个变量的影响,变量的变化造成函数值的变化,因此,只要变量的变化对函数值的影响一致,那么两个源自同一点的函数就完全一样。变量的变化对函数值的影响,是多重多阶的,因此,要使得两个函数一致,就要保证这种影响在任何阶任意维度都是一致的。从一元函数的角度,如果将函数图像理解成时间位移区间,那么两个函数曲线一致,意味着某一点开始,其速度要相等、速度的变化程度(加速度)要相等、加速度的变化程度(加速度的加速度)要相等...,这样就意味着两种位移是完全一致的,而这实际上就对应着各阶导数。

2022-11-12 18:11:04 4011

原创 pandas中parquet文件对于缺失值的交互处理

当把一个带有缺失值的df写入到parquet文件,parquet的缺失值的处理是和python兼容的,会一律把缺失值转为None,无论原始的df中的缺失值是None还是NaN。由于pandas本身在将数据转为df时,会额外对缺失值进行处理,处理原则是,如果某列的类型推断为object,那么缺失值会保留原来的值,即None或NaN,但是如果带有缺失值的列推断为数值类型,那么缺失值会全部被转为浮点数类型的NaN,这时原来的None缺失值也会被转为NaN。pandas对于缺失值的处理在。

2022-11-02 10:42:55 458

原创 Spyder编辑器关于自定义库无法提示代码补全问题修复

博主的自定义库,已经将库路径加入了环境变量的PYTHONPATH中,最开始可以正常的导入,并且在Spyder编辑器中也可以和其他标准库以及三方库一样,有代码补全提示。但是某天突然在Spyder中对于自定义的库就无法提示代码补全了,但是标准库已经其他三方库是可以正常提示的,而且在Ipython中,代码提示一切都正常。原因找到后,解决方法就很简单,打开上图的PYTHONPATH管理器,手动显式的再次在Spyder中添加自定义库的所在路径。

2022-10-18 12:33:19 797

原创 高效数据存储格式Parquet

Parquet还使用了字典编码,以及RLE编码(Run Length Encoding),将数据值映射成数字,然后保存一个字典映射,同时记录某个值连续重复的次数,这样不用反复的保存一些占用空间较大的数据,特别是对于字符类型的数据,这种方式尤其对于重复值较多的chunk,非常高效,实际上我们的表格数据经常某些列具有较多的重复数据。因此,Parquet的这些编码方式,可以高效的节省空间,减少实际数据的IO,但是需要更多的metadata的解析,将IO密集部分变成了CPU密集的工作,CPU当然快多了。

2022-10-09 23:37:39 2616

原创 内积、点积和坐标

所以点积的由来源自物理意义下的点积的定义,为了将物理意义下的点积形式化,可以使用内积数学工具,引入基将向量坐标化,从而对坐标进行运算操作。实际上,选取基是为了将向量坐标化,从而可以使用内积运算,使用数学工具进行更多的分析研究,而选取规范正交基仅仅只是为了计算简单(上述最后一项为0,可以消去,i、j的长度为1,系数也可以忽略)。但是实际上,我们选取规范正交基并不是为了和数学定义上的内积联系起来,因为数学上的内积有很多种,只要满足内积定义即可,对于任意一组基,都可以定义一种内积使得物理意义下的向量坐标等价于。

2022-10-01 23:56:34 1298

原创 python进程池之创建子任务的函数总结

目录mapapplymap_async和apply_asyncimap和imap_unorderedstarmap和starmap_async python多进程标准库multiprocessing通过进程池启动多进程有以下几种方式,本文旨在说明这几种方式的区别:map、apply、map_async、apply_async、imap、imap_unordered、starmap、starmap_async。map函数签名:(func, iterable[, chunksize])

2022-06-25 15:14:22 1049

原创 利用矩阵初等变换进行对角化

目录矩阵初等变换对角化证明矩阵初等变换记某矩阵为,其中为维度为n的行向量。则行初等变换有以下三种:1. 交换两行的位置;2. 3. 同样的,对应的列初等变换就是把行向量换成列向量即可。为什么这些变换被称为矩阵的初等变换呢?或者说这些操作有什么特点呢?如果我们把矩阵看成一个多元一次齐次线性方程组的系数矩阵的话,那么很显然,这些操作并不会改变该方程组的解空间,即加入某个向量是变换前的解,那么一定也是变换后的解,反...

2022-05-28 23:29:43 2406 1

原创 多元一次齐次线性方程组

目录命题 证明命题 本文旨在说明多元一次齐次线性方程组的解空间的维度、系数矩阵秩和未知变元个数之间的关系。(系数矩阵定义在实数域上)假设有n个未知变元,系数矩阵的秩为k,方程组解空间的维度为m,则有如下的关系成立:n=k+m证明设方程组为:由于A的秩为k,所以该方程组只有k个有效方程,剩下的n-k个方程都是可以通过其他k个方程线性组合后得到的冗余方程。由于只有k个有效方...

2022-05-21 17:59:31 505

原创 同一向量空间的不同基具有相同的维度的一种证明

目录基基的维度证明基某一向量空间中的基由一组线性独立的向量组成,且这组向量可以张成该向量空间,这就是基的定义。其中基中的向量,叫做基向量。基的维度基中基向量的个数为基的维度。根据基的定义,我们无法得到向量空间中的基是唯一的,实际上,一个向量空间具有无数个基。但是目前为止,我们并不能很直接的得到不同基的维度是一样的,实际上不同的基的确具有相同的维度,这也使得基的维度成了向量空间的一个属性。 当然,不同的基...

2022-05-17 00:14:13 1123

原创 Steinitz exchange lemma

目录内容翻译证明推论Reference内容U和W是向量空间V的有限非零子集。如果U是一个线性独立的向量构成的子集,W可以张成V,那么:1. |U|<=|W|;2. 存在W的子集W',满足|W'|=|W|-|U|,使得U和W‘的并集可以张成V。翻译1. |U|表示集合U中元素的个数。上述第一点说明,由线性独立的向量构成的子集的元素的个数,是小于或等于张成集的元素个数的。2. 说明线性无关的向量可以替换张成集中的向量,不改变张成的线性空间,而且这个替换是

2022-05-15 16:08:28 726

原创 python模块导入详解

目录包和模块模块导入绝对导入sys.modulessys.meta_pathsys.path相对导入__init__.py相对导入mian脚本中的相对导入Reference包和模块我们可以在一个脚本中定义变量、函数和类,并添加逻辑,但是当某个项目具有复杂的逻辑时,我们希望把这些逻辑分解成不同的脚本,并以一定的合理的方式组织成层级结构,这种具有层级结构的包含脚本的文件夹就称为包。模块通常指的是定义了变量、函数和类的脚本。但...

2022-05-03 21:09:26 7261

原创 Xmind

主题主题是Xmind思维导图的基本单元,其根据逻辑关系分为父主题、子主题和分支主题,并依此递归。创建一张导图时,最先开始的就是最原始的父主题,然后从父主题衍生出子主题和分支主题,其中子主题之间,是同级关系,所以同级的主题之间也互为分支主题。任意一个主题单元,都可以衍生自己的子主题和分支主题,那么该主题单元也是其子主题的父主题。任意主题单元可以通过Tab键衍生出子主题,Enter键衍生出跟其同级的分支主题,故而,某个主题单元如果要新增一个子主题,它即...

2022-04-30 16:00:28 987

原创 配对交易-协整套利

当两个品种价格存在某种比较简单的可量化关系时,我们可以利用这种关系进行配对交易。一般情况下,这种关系可以是:价格协整、价格和对数价格协整。至于这种关系呈现的模式可能是同步相关,即两个品种同时受到相同或者类似的其他因素影响,从而价格存在同步变化的趋势;或者是leader-lagger关系,这个在商品期货的上下游品种中比较常见。价格协整如果两个品种存在价格协整关系,那么可以通过简单的线性回归两个两个价格的关系,利用残差项的平稳特性,进行统计套利。即如果残差项过大,比如偏离...

2022-04-03 21:29:34 1526

原创 python中导入字符串对象命名的模块

通过标准库importlib中的import_module函数实现,该函数返回被导入的对象。如下,就可以通过字符串对象导入模块test_module,并且重命名为tm,效果等于import test_module as tm。import importlibm = 'test_module'tm = importlib.import_module('%s'%m)...

2022-03-19 22:31:37 546

原创 What is P value and Significance Level?

在统计学的假设检验中,有一个概念叫做P值,一般通过P值跟提前定好的显著性水平进行对比,来判断是否应该拒绝原假设。如果P值比显著性水平更低,则拒绝原假设,反之,没有充分的证据拒绝原假设。在学统计的人眼中,这是很自然的,以至于不需要去进一步想一些细节,比如,P值到底是什么?如何去准确的理解?P值的定义是,在原假设的基础上,统计量X的值,理论上至少跟已观察统计量一样极端的概率。更具体地,假设是右侧检验,P值就等于。其中X表示某个统计量,我们可以在原假设为真的基础上求出X的分布,...

2022-03-06 22:27:33 1172

原创 python可迭代对象、迭代器和生成器

可迭代对象指的是兼容__iter__函数的对象,调动该函数会返回一个生成器,生成器指的是兼容__next__函数的对象,__next__函数会单次获取便利对象的值并返回。对于迭代工具,实际上遍历的是迭代器,因此,对于迭代工具(比如for循环),其实际上需要先获取一个迭代器,所以对于可迭代对象,python会先通过iter内置函数作用在可迭代对象上,获取一个迭代器,然后再进行单次遍历(对于已经是生成器的对象,iter函数返回的就是该对象本身),这就是迭代协议。为什么需要区分可迭代对象和...

2022-01-08 19:39:18 350

原创 pandas一维数据分组之cut和qcut

对于一个一维的数值型数据,我们有时候想对其根据数值区间或者根据分位数进行分组,然后再做后续的分析,本文介绍pandas里的cut和qcut函数,实现这种快速分组操作。cutcut函数,将一维序列中的数值打上区间标签,参数签名如下:pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False,duplicates='raise')其中x...

2021-12-15 17:48:26 2558

原创 深度学习小思1

深度学习目前并没有一个统一的理论框架,没有理论上的解析解,模型的求解依赖于数值优化,因此,对深度学习模型架构的思考不能受限于naive的理论层面,而是应该结合优化算法。理论上,一个简单的MLP就应该可以拟合出所有的函数关系。但是在正确拟合的前提下,MLP模型架构中需要的参数过多(MLP自身可以组合衍生出其他架构),这会使得路径过多,且过于稀疏,从而通常的随机剃度下降算法的优化路径太多,学习难度会大大的提升,从而在MLP的前提下,难以学得正确的参数。因此,在算力和数据都有限的前提下,我们需要更加合理的模型

2021-12-04 23:28:20 2175

原创 词嵌入(Word Embedding)

目录为什么需要词向量嵌入?表征的对象是什么?如何表征?词向量嵌入矩阵Skip-GramCBoW负采样结语Reference为什么需要词向量嵌入? 在自然语言相关的任务中,我们将句子作为特征输入,然后得到相应的预测输出。相比于其他的任务,自然语言相关任务的特点就是,其输入的特征是句子,不是已经量化好的特征。但是计算机,或者说模型,本质上只能识别数字,只能对数字进行运算和处理,因此,对于符号型的文字,我们需要先进行数字化,这样才能将其作为特征输入。词向...

2021-11-21 18:25:01 1295

原创 理解拉格朗日乘子法的一种角度

本文旨在以一种相对直观的角度去理解拉格朗日乘子法,在推导得到拉格朗日乘子法最终形式之前,需要先理解以下三个推论:1. 梯度和等高域正交;2. 约束域的维度+约束条件个数=变量个数;3. 极值点的必要条件为约束域领域和目标梯度正交。 其中,等高域是目标函数等于某一个值时自变量所在的区域,所以在等高域中的所有点对应的函数值都是相等的;约束域就是由多个等式约束条件共同约束下自变量形成的区域。梯度和等高域正交 假设某点P对应的目标函数的梯度为G,根...

2021-11-07 20:42:16 556

原创 pandas pivot_table之数值精度丢失陷阱

pandas的pivot_table函数可以指定行列值重新制表,并且对于同一行列索引下的多个值会进行聚合运算,默认是均值运算,因此,这里如果我们默认其aggfunc的均值运算,那么会存在将其他数值类型转为浮点值的行为,如果原本是数值较大的整型,超出了64位浮点数能精确表示的最大范围的话,这里就会存在精度丢失现象。 尽管我们可以让aggfunc=lambda x:x,即不对value做任何操作,这样不会存在均值计算,但是实际上还会存在精度丢失的情况。看如下是pivot_tab...

2021-11-07 16:56:21 902

原创 利用python执行linux命令的几种方式和区别

本文介绍三种在python执行linux命令的方式,三种方式都是基于python的标准库实现,因此不需要额外安装第三方库。os.system() os.system(cmd),其中cmd就是需要执行的linux命令。该方式会阻塞主进程,直到命令执行结束并返回状态,如果返回的状态值为0,表示命令正常执行,如果不为0,则表示命令执行异常。要注意的是,该方式执行linux命令,会直接打印出命令执行的结果,但是不会作为对象返回,因此程序无法直接获取命令执行的结果。os.po...

2021-11-03 13:28:57 1109

原创 使用plotly画交互图入门

目录plotly简介plotly的安装作图图片保存plotly简介 plotly是一个python的第三方库,其可以制作精美的动态交互图,并且和pandasDataFrame数据结构兼容较好。如今plotly还集成了plotly_express,plotly_express最初是基于plotly的一个库,其提供一些更加高级简单的作图接口,使得用plotly作图更加简单便捷,如今plotly已经将plotly_express集成在了一起,因此不需要额外安装plotly...

2021-11-01 21:49:31 1234

原创 numpy的整型数值溢出陷阱

numpy中的ndarray对于数值对象的数据类型具有严格要求,比如,假设一个数据类型为int32的ndarray,且数值较大,那么再继续对其做平方运算,假设平方运算之后的值已经超出了32位整型的最大范围,那么就会造成数值溢出。问题在于,numpy中对这个数值溢出并不是直接报错,而是会返回一些垃圾值,甚至有可能出现负值,这就使得运算结果无法预期,从而出错。但这个现象并不会出现在创建生成ndarray中,如果创建ndarray时,数值已经超出了指定数据类型的最大范围,那么numpy会报overflo...

2021-10-23 19:25:04 998

原创 框架设计

为什么需要框架?针对某一类目的,为了实现这个目的,从最原始的端到目的之间会经历一系列可能的或者潜在的复杂步骤或者子任务,那么框架的作用就是为了对这一系列步骤进行高度的抽象解藕,并且标准化,使得我们可以专注于局部,只要符合标准规范即可。这样让分工协作成为可能,让精力可以只专注在一小部分,也让整个任务设计更加合理,更加健壮和复杂,工作更加高效。这是复杂项目所必须的。因此,框架实际是就是一种合理并且高度的抽象和解藕,是一种标准和规范。如何设计框架?一、首先对整个框架的目的和对应的业务需要熟悉,这样才可以做

2021-10-10 11:07:13 525

原创 Batch Normalization

batch normalization是深度学习中常用的一种方操作,在深层网络的优化中,其可以说是一种标配,因为batch normalization带来的效果往往是显著的。方式 batch normalization是针对一个batch的样本进行的操作。如果对于某一层,我们要对其进行batch normalization操作,那么实际上就是对该层的每个单元分别进行Z-score的计算。因为一个batch有多个样本,对于每个样本,都可以计算得到一个该单元对应的前向反馈值...

2021-10-06 02:50:32 140

原创 深度学习之序列建模初总结

本文旨在讲解使用深度学习模型对序列数据进行建模,并且主要集中再MLP、RNN、LSTM以及GRU。MLP MLP是最简单的神经网络模型,其就是一个简单的DNN,即全连接前馈深度神经网络。根据通用近似理论,MLP可以近似拟合出任意的连续函数。但是这里有一个基本的前提是,输入数据包含了影响应变量或者说预测变量的所有因子或者说特征,而且数据量需要足够大,这个足够大是相对于噪声和具体模型而言的。实际上,现实情况是,我们并无法在输入数据中包含所有特征,而且现实数据也往往包含较多的...

2021-09-21 22:52:00 1820

原创 神经网络反向传播(BP)算法推导

BP算法是训练神经网络的一种算法,其是一种计算神经网络可训练参数的梯度的高效算法,正是因为BP算法的提出和在工程上的实现,使得深度神经网络模型可以比较轻易的训练。 BP算法是建立在梯度下降的优化算法基础之上的,正是因为我们使用了梯度下降的方法来优化我们的模型,我们才有计算参数梯度的需求。当然,神经网络已经给了我们目标函数的表达方式,因此,计算梯度其实是一件很显而易见的事情,问题在于,如果更加高效简单的计算,而且具有通用性,这才是这个优化问题的核心所在,BP算法的特点就是高效...

2021-09-12 17:15:51 732

原创 python pdb之快速事后调试

事后调试(post-mortem debugging)指的是程序运行发生异常而进入的调试模式。 当执行一个python脚本触发异常时,我们可以通过该方式进行问题的快速定位。使用如下命令执行需要调试的python脚本: python -m pdb script.py,该执行方式使用了python的标准模块pdb,pdb是python用来调试程序的模块。使用该方式执行脚本,脚本会从第一行开始就进入调试模式,然后直接输入c回车,程序就会一直执行,直到程序遇到异常;当程序遇到异常后...

2021-09-10 21:40:32 653

原创 理解两个函数乘积的导数的一种视角

令z(x)=f(x)g(x)。通过乘法求导公式,会很容易通过f(x)和g(x)的导数得到z(x)的导数,当然背公式的事情不值一提。本文在于如何去理解这个导数公式,怎么去推导。 首先第一种方式是通过导数的定义去推导,这个其实也简单,只需要根据定义,写出定义方程,然后做一些简单的变换即可,这种方式也不能给我们更多的insight。所以本文想说的其实是下面的第二种方式。 另外一种方式是将f(x)和g(x)看成不同的个体,先忽略之间的关联,为避免歧义,我们把属于不同部分...

2021-09-05 16:40:38 3928

原创 python充分理解def语句

python中def是一个可执行语句,用来定义一个函数。当解释器执行def语句时,其会在内存中创建一个函数对象,除此之外,还会创建一个该函数对应的本地命名空间。这里需要注意的有两点:1 该命名空间是在执行def语句时就已经创建的,而不是在函数调用时; 2 这个命名空间中有包含哪些变量。 对于2点,取决于函数签名已经函数类型。如果函数具有默认参数,那么该命名空间会包含默认参数变量,此外,如果该函数还是一个闭包,那么该命名空间还包含了外层函数的自由变量(即在外层函数定义,但是在...

2021-07-28 19:55:45 6291

原创 python作用域详解

命名空间 一个程序具有多个变量,为了更好的组织这些变量,更好的控制变量之间的命名冲突以及更好的管理变量在程序中的角色,python使用了命名空间这样一种结构来实现这个目的。python中,一个命名空间由多个变量组成,且以字典的形式来保存这些变量,其中key是变量名称,value是变量名对应的对象。 同一个命名空间中的变量名是唯一的,不同命名空间中的变量相互独立(这里的相互独立指的是不会相互冲突相互覆盖,但是可能会有相同的对象引用(即指向同一个内存中的对象))。既然命名空...

2021-07-27 14:52:03 1391

原创 python闭包

python有四种作用域,本地作用域(Local Scope)、闭包(Enclosing Scope)、全局作用域(Global Scope)以及内置作用域(Built-in Scope),作用域就是放置变量的命名空间,程序中的任何一个变量,都一定且唯一归属于某个层级的作用域。本文主要讲解一下作用域之中的闭包。 当某个变量在一个函数中定义,同时被其内部的嵌套函数所引用,那么python就会创建一个闭包,该变量就会归属于这个闭包,如下所示。def outer(): ...

2021-07-24 21:58:04 176

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除