Python 进阶 (九)Python 陷阱:Nonetype

Python进阶(九)-Python陷阱:Nonetype 分享一下我的偶像大神的人工智能教程!http://blog.youkuaiyun.com/jiangjunshow 也欢迎转载我的文章,转载请注明出处 https://blog.youkuaiyun.com/mm2zzyzzp Python进阶(九)-Python陷阱:Nonetype   今天解决一位网友的问题,内容如下:   请教代码问题 def calc_prod(... 阅读详情

今天解决一位网友的问题,内容如下:请教代码问题

def calc_prod(lst):    def ff():        print map(lambda x:x*x,lst)    return ff
f = calc_prod([1, 2, 3, 4])print f()

结果:

[1, 4, 9, 16]None

这样写输出为什么有 None?针对这一问题,自己在 IDEA 中进行了调试,发现果然多输出了一行 None。出现这一现象确实很令人费解。

自己写了简单的测试语句,如下:

b = print(5)print(b)

通过断点调试,内容如下:

发现 b 的值确实为 None,且其类型为 NoneType。

什么是 Nonetype?

要理解这个,首先要理解Python对象,python对象具有三个特性:身份、类型、值。

这三个特性在对象创建时被赋值。只有值可以改变,其他只读。类型本身也是对象。

Null与None是Python的特殊类型,Null对象或者是None Type,它只有一个值None。

它不支持任何运算也没有任何内建方法。None和任何其他的数据类型比较永远返回False。

None有自己的数据类型NoneType。你可以将None复制给任何变量,但是你不能创建其他NoneType对象。

一句话总结:Null对象是python对象,又叫做NoneType,None是这个对象的值。

看过了NoneType的解释,之所以出现None就很好理解了。

NoneType之所以出现是因为定义了一个变量或函数,却没有值或者返回值,因此会默认值为None。

而在上面的程序中,虽然高阶函数 calc_prod()有返回值 ff,但是 ff()却没有返回值,则传递到外层函数 calc_prod()同样没有返回值,故输出了None。 若代码改为如下所示,则可以完美实现列表的输出。

def calc_prod(lst):    def ff():        return map(lambda x:x*x,lst)    return ff
  f = calc_prod([1, 2, 3, 4])  print(f())

注意⚠️:一个实例的私有属性就是以__开头的属性,无法被外部访问。那这些属性定义有什么用?

虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。除了可以定义实例的属性外,还可以定义实例的方法。

实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的。

class Person(object):    def __init__(self, name):        self.__name = name
    def get_name(self):        return self.__name

get_name(self) 就是一个实例方法,它的第一个参数是 self。__init__(self, name)其实也可看做是一个特殊的实例方法。调用实例方法必须在实例上调用:

p1 = Person('Bob')print p1.get_name()  # self不需要显式传入# => Bob

在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。

请给 Person 类增加一个私有属性 __score,表示分数,再增加一个实例方法 get_grade(),能根据 __score 的值分别返回 A-优秀, B-及格, C-不及格三档。

注意 get_grade()是实例方法,第一个参数为 self。

参考代码:

class Person(object):
    def __init__(self, name, score):        self.__name = name        self.__score = score
    def get_grade(self):        if self.__score >= 80:            return 'A'        if self.__score >= 60:            return 'B'        return 'C'
p1 = Person('Bob', 90)p2 = Person('Alice', 65)p3 = Person('Tim', 48)
print p1.get_grade()print p2.get_grade()print p3.get_grade()

运行结果

Python xlwings操作Excel避免NoneType错误的4种方案 在Python自动化办公场景中,xlwings作为连接Excel的桥梁工具,通过COM接口实现高效操作。其核心原理是通过上下文管理器自动管理Excel应用生命周期,但这也带来了典型的NoneType对象错误问题。这类错误通常发生在工作簿对象失去与Excel应用的连接时,严重影响自动化流程的稳定性。针对文件读写、数据处理等常见场景,开发者需要掌握应用实例的生命周期管理技巧。通过分析xlwings的上下文管理机制,可以采取四种解决方案:在上下文内完成操作、手动管理生命周期、使用keep_running参数或重新 阅读详情

相关推荐

第9章 Python数据类型详解之分解理解 NoneType

核心角色None是 Python 中表示无的原子级对象。应用场景函数默认返回值变量初始化占位表示缺失或未定义状态高级技巧利用单例特性优化性能结合类型注解提升代码健壮性自定义哨兵值处理特殊情况通过合理使用None,可以显著提升代码的可读性和健壮性。

老韩的Linux云计算架构师进阶之路 448

python中nonetype指什么_关于python:什么是’NoneType’对象?

当我运行python脚本时,我得到了这个错误:TypeError: cannot concatenate 'str' and 'NoneType' objects我很确定"str"是指字符串,但我不知道"nonetype"对象是什么。我的脚本停在第二行,我知道第一行有效,因为来自该行的命令如我所期望的那样在我的ASA中。起初我认为这可能是因为我在send_命令中使用变量和用户输入。"caps"中的...

weixin_40002692的博客 1万+

Android 面试题 Handler篇

1.Handler的实现原理。

ViewHandKownHealth的博客 955

Python错误 TypeError: ‘NoneType‘ object is not subscriptable解决方案汇总

这个错误通常发生在你试图访问一个类型为'NoneType'的对象的元素或者属性时。在Python中,'NoneType'是一种特殊类型,表示值的缺失或空值。

艰难困苦,玉汝于成。 11万+

PythonWeb开发框架—Django之工程创建和models的定义和增删改查

文章介绍了Django工程的创建、models的定义和增删改查

weixin_42476668的博客 990

(OpenCV)图像目标尺寸检测

  本文翻译自pyimagesearch技术博客上的一篇文章,《Measuring size of objects in an image with OpenCV》,原文作者:Adrian Rosebrock 。 https://www.pyimagesearch.com/2016/03/28/measuring-size-of-objects-in-an-image-with-opencv...

明柳梦少的博客 7万+

【Python】进阶学习:判断一个对象是否是NoneType类型

在本文中,我们深入探讨了如何判断一个对象是否是NoneType类型,以及NoneType在Python编程中的重要作用。我们学习了使用is操作符来判断None,了解了NoneType与其他类型的区别,并探讨了在实际编程中如何应用这些知识。此外,我们还讨论了使用Optional类型注解来处理可能为None的值,并提醒了一些在使用NoneType时需要注意的事项和常见误区。掌握如何正确处理和判断NoneType类型是编写健壮、可维护的Python代码的关键之一。

m0_59235508的博客 2572

DESeq2实战:如何用LRT检验分析基因表达随时间变化的模式(附完整代码)

本文详细介绍了如何使用DESeq2中的LRT检验分析基因表达随时间变化的模式,包括实验设计、数据预处理、模型构建、结果提取与可视化等完整流程。通过实战案例和完整代码,帮助生物信息学研究者掌握时间序列RNA-seq分析的核心技术,特别适合需要快速上手的实践者。

weixin_42620255的博客 466

python NoneType 说明时候出现

python NoneType 说明时候出现 1、对象没有初始化返回值就是None,类型是NoneType。 2、函数没给返回值的时候就输出None,类型是NoneType。

Jack_2085 1056

lammps建模(电解液)opls-aa力场的基本流程

lammps建模(电解液)opls-aa力场的基本流程

syj0922的博客 2133

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

y_u_yu_yu_的博客 1万+

Python进阶(九)Python陷阱:Nonetype

而在上面的程序中,虽然高阶函数calc_prod()有返回值ff,但是ff()却没有返回值,则传递到外层函数calc_prod()同样没有返回值,故输出了。针对这一问题,自己在IDEA中进行了调试,发现果然多输出了一行None。只有值可以改变,其他只读。之所以出现是因为定义了一个变量或函数,却没有值或者返回值,因此会默认值为。发现b的值确实为None,且其类型为NoneType。若代码改为如下所示,则可以完美实现列表的输出。它不支持任何运算也没有任何内建方法。对象具有三个特性:身份、类型、值。

IT全栈 华强工作室 7万+

C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现(史上最全)

本文详细介绍了Socket通信中多个异步Udp客户端功能的实现、介绍如何使用多个客户端与多个服务器进行数据的交互,包含连接服务器、断开服务器、发送数据、读取数据、C#代码实现,由高级工程师多年经验总结而成,绝对干货!

qq_34059233的博客 1982

Python陷阱:tuple与Nonetype

1. 慎重使用tuple处理string生成的list 首先我要把从文件里逐行读取的字符串转变为数字列表,正确的是: >>> [float(item) for item in "1e2 to 2".split() if item not in ["to", " "]] [100.0, 2.0]接着读取到某一行时,出现一个“le” 无法转换类型,于是报错: >>> [float(item) f

小白兔的窝 8214

RockChip Android14 修改LCD背光最大值

在调试LCD屏时时长会出现硬件不匹配,导致电流过大,屏幕发热严重。在不调整硬件的情况下,我们可以通过修改软件,降低LCD背光最大值来实现适配。我们都知道LCD屏背光是靠pwm来控制,一般来说最大值可以设置为255,针对上述问题,我们可以通过软件来降低该值,比如200,100等等。

qq_34968572的博客 631

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Python】成功解决AttributeError: ‘NoneType’ object has no attribute ‘XXXX’

🎉【Python大神带你解决AttributeError难题!】🎉 遇到“AttributeError: ‘NoneType’ object has no attribute ‘XXXX’”就头疼?别担心,Python大神来拯救你!本文将通过深入浅出的方式,带你一步步分析这个常见错误,并提供实用解决方案。从问题背景到举一反三,让你彻底掌握如何避免这类陷阱!还有扩展阅读与总结展望,助你成为Python编程高手!快来一起学习吧! #Python #AttributeError解决方案 #NoneType

创作高质量博文,分享知识,共同进步! 5222

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Python开发者必看(NoneType错误全解析):90%的人都忽略的函数返回陷阱

快速解决python报错TypeError: 'NoneType' object is not callable,详解函数返回None导致的调用异常。涵盖常见触发场景、调试技巧与代码修复方案,帮助开发者避开90%的人都踩过的坑,值得收藏。

Algorhythm的博客 740

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Python】已解决:(Python正则匹配报错)AttributeError: ‘NoneType’ object has no attribute ‘group’

这个错误通常出现在我们尝试从一个正则表达式匹配的结果中调用.group()方法时,但匹配结果为None。在Python中,None类型没有group这个方法,所以尝试调用None.group()时会抛出AttributeError。在这个例子中,我们尝试从一个不包含数字的字符串中匹配数字,因此pattern.search(text)返回None,接着尝试调用None.group(0)时就会报错。通过遵循这些注意事项,你可以减少在正则表达式匹配过程中遇到错误的概率,并使你的代码更加健壮和易于维护。

屿小夏.的知识博客 2307

【Python报错已解决】AttributeError: ‘NoneType‘ object has no attribute ‘x‘

# 引言: 在Python开发过程中,各种报错就像隐藏在代码丛林中的陷阱,等待着开发者不小心踩入。其中,AttributeError: 'NoneType' object has no attribute 'x'是一个相当棘手的报错。这个报错常常让开发者感到困惑,因为它涉及到对象属性的访问,而'NoneType'类型在Python中是一个特殊的类型,表示没有值或者空值。当我们试图从一个为'None'的对象中访问属性时,就会触发这个报错。那么如何在这个复杂的报错迷宫中找到出路呢?让我们深入探讨这个问题,为开发

鸽芷咕的博客 1261

python -- TypeError: ‘NoneType’ object is not iterable

Type错误:“NoneType”对象不是可迭代的 一般出现在 将None返回给了多个值 遍历的对象为None 例 : item = None for i in item: print(i) 解决 :加判断item是否为None即可 ...

weixin_43646491的博客 7359

python陷阱之一切方法皆函数——以AttributeError: 'NoneType' object has no attribute 'append'为例

python中,对于一些明明应该不返回值的方法,其往往也会返回一个NoneType,而不是直接报错,如果稍不注意,就会中招,而且一时半会儿还debug不出来。下面就以list对象的append方法为例。 list对象的append方法本不应是函数,因此本不应该返回任何值,但是python中一切方法皆函数,尽管设计逻辑是一个方法,但是其也会返回一个NoneType,从而...

S_o_l_o_n的博客 1万+

Python None 类型检查与条件判断:5个常见陷阱与最佳实践

本文深入探讨Python中`None`类型的检查与条件判断,揭示5个常见陷阱并提供最佳实践。从`is None`与`== None`的性能差异到函数参数默认值的隐藏风险,帮助开发者避免常见错误,写出更健壮的代码。特别强调类型注解和防御性编程技巧,提升代码质量和可维护性。

weixin_33924770的博客 1540

python print打印函数返回值多一个none_Python 打印输出 为什么会多了一个None

问题描述:Python 打印输出 为什么多了一个None看到这里,先看下你print的函数是嵌套函数吗?每层是否都有return。问题就差不多可以解决了。排错:python print输出后面为什么会跟一个None - y786256773的博客 - 优快云博客因为python中print函数需要返回值,如果你在print函数中所放的函数没有返回值,那么print将会return None检查 ...

weixin_30604459的博客 2067

Mamba安装报TypeError: ‘NoneType‘ object is not callable解决方案

Mamba是基于libmamba的高性能Conda替代包管理器,其核心依赖C++动态库与Python绑定层的协同运行。当出现TypeError异常时,本质是libmamba初始化失败导致_solvemap被设为None,根源常为ABI不兼容、通道元数据解析错误或Python 3.11+对__call__协议的严格校验。该问题在金融量化、AI推理等对环境稳定性要求极高的工程场景中尤为突出,直接影响conda install、环境构建与CI/CD流水线。本文聚焦Mamba安装阶段的NoneType调用错误,提供

379

Python字典get方法的默认值类型陷阱(资深工程师避坑指南)

掌握Python字典get方法的默认值类型陷阱,避免因类型不一致导致的隐蔽bug。详解适用场景与正确用法,提升代码健壮性。理解Python字典get的默认值类型的关键细节,值得收藏。

QuickTrans的博客 666
上一篇: Python 进阶 (八) 编写带参数 decorator
下一篇: Python 进阶 (十)Python 编程规范
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值