干货 | 如何写一个更好的函数

Python学习:自定义函数,不可或缺 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 一、函数基础 说白了,函数就是为了实现某一功能的代码段,只要写好以后,就可以重复利用。 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。 函数 阅读详情

Python虽然好用,但用好真的很难。

尤其是函数部分,只要写不好,后面的一连串人都会遭殃。

看又看不懂,测试起来也麻烦,维护又维护不动,真是让人头疼。

那怎么写好一个Python函数呢?

《Writing Idiomatic Python》一书的作者在Medium上发表了一篇文章,给出了6个建议。

希望能够给你带来帮助。

什么样的函数是一个好函数?

“好”的Python函数和“差”的Python函数之间有什么差别呢?每个人都有自己的理解。基于我的理解,如果一个Python函数能够符合下面的大部分条件,我会认为它是一个“好”函数:

  1. 命名合理
  2. 单一功能
  3. 包括文档字符串
  4. 返回一个值
  5. 不超过50行
  6. 是幂等函数或纯函数

对许多人来说,这些要求可能显得过于苛刻了。

不过,我保证,如果你的函数遵循这些规则,你的代码会非常漂亮,会让其他的程序员都“馋哭”的。

下面,我将一一讨论这些规则,然后总结它们是如何创造“好”函数的。

命名

在这个问题上,我最喜欢的一句话是:

计算机科学中只有两件事很让人头疼:缓存失效和命名。

尽管这听起来很莫名其妙,但给一个事情命名太难了。下面是一个反面案例:

def get knn(from_df):

原文中这个代码没有放上去,量子位根据上下文信息进行了补充。

这个函数命名的第一个问题是它使用了缩写。

对于那些并不出名的缩略词来说,使用完整的英语单词会更好。缩写单词的唯一原因是为了节省打字时间,但是每个现代编辑器都有自动填充功能,所以你只需要键入一次全名就可以了。

缩写通常是特定领域的。在上面的代码中,KNN指的是“K-Nearest Neighbors”,df指的是“DataFrame”,这是一个数据结构。如果另一个不熟悉这些首字母缩写的程序员正在阅读代码,几乎很难看懂。

关于这个函数的名字还有另外两个小瑕疵:

  1. “get”这个词是无关紧要的。对于大多数命名比较好的函数来说,很明显有一些东西会从函数中返回,它的名字将反映这一点。
  2. from_df也不是必要的。如果没有明确的参数名称,函数的文档字符串或类型注释会描述参数的类型。

那么我们如何重命名这个函数呢?很简单:

def k_nearest_neighbors(dataframe):

即使是外行,这个函数要计算的内容也很清楚,参数的名称(dataframe)也清楚地表明了参数类型。

单一功能

单一功能原则不仅适用于类和模块,也同样适用于函数。

一个函数应该只有一个功能。也就是说,它应该只做一件事。

一个重要的原因是,如果每个函数只做一件事,只有这件事发生了变化,才需要改变这个函数。

此外,如果这个函数的单个功能不再需要了,直接把它删了就行了。

还是用例子来说明吧。下面这个函数,可以做不止一件“事情”:

def calculate_and print_stats(list_of_numbers):

sum = sum(list_of_numbers)

mean = statistics.mean(list_of_numbers)

median = statistics.median(list_of_numbers)

mode = statistics.mode(list_of_numbers)

print('-----------------Stats-----------------')

print('SUM: {}'.format(sum) print('MEAN: {}'.format(mean)

print('MEDIAN: {}'.format(median)

print('MODE: {}'.format(mode)

这个函数做了两件事:一是计算一组关于数字列表的统计数据,二是将它们打印到STDOUT。

如果需要计算新的或不同的统计数据,或者需要改变输出的格式,就需要对这个函数进行调整。

所以,这个函数最好写成两个独立的函数:一个用来执行并返回计算结果,另一个用来获取这些结果并打印出来。

这种处理方式,不仅能让测试函数更容易,并且还允许这两个部分有了迁移性,如果合适的话,还可能一起应用到不同的模块中。

在编程中,你会发现好多函数都可以做很多很多事情。同样,为了可读性和可测试性,这些函数应该被分解成更小的函数,每个函数只有一个功能。

文档字符串(Docstrings)

虽然每个人似乎都知道PEP - 8,它定义了Python的样式指南,但是很少有人知道PEP - 257,它是关于文档字符串的。我再这里不简单地重复PEP - 257的内容了,你可以在闲暇时读一下。其中的关键内容是:

  1. 每个函数都需要有一个文档字符串
  2. 使用适当的语法和标点符号;用完整的句子写
  3. 首先对函数的作用进行一句话的总结
  4. 使用说明性语言而不是描述性语言

在编写函数时,要养成写文档字符串的习惯,并在编写函数代码之前尝试写一下。

如果你不能写一个清晰的文档字符串来描述函数做什么,就说明你需要再考虑考虑为什么要写这个函数了。

返回值

函数可以被认为是一些独立的程序。它们以参数的形式接受一些输入,并返回一些结果。

参数有没有都可以,但从Python内部的角度来看,返回值是必须要有的。你不可能创建一个没有返回值的函数。如果函数没有返回值,Python会“强制”返回None。你可以测试一下这段代码:

❯ python3

Python 3.7.0 (default, Jul 23 2018, 20:22:55)

[Clang 9.1.0 (clang-902.0.39.2)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> def add(a, b):

... print(a + b)

...

>>> b = add(1, 2)

3

>>> b

>>> b is None

True

你会发现 b 的返回值实际上是 None。 即使你写的函数没有返回语句,它仍然会返回一些东西。而且,每个函数都应该返回一个有用的值,测试起来也会更方便。毕竟,你写的代码应该能够被测试。

试想一下,测试上面的add函会有多艰难。遵循这个概念,我们应该这样写代码:

with open('foo.txt', 'r') as input_file:

for line in input_file:

if line.strip().lower().endswith('cat'):

# ... do something useful with these lines

if line.strip().lower().endswith(‘cat’):这一行能够工作,是因为每个字符串方法( strip ( )、lower ( )、end swith ( ) )都返回一个字符串作为调用函数的结果。

当给定函数没有返回值时,有一些常见的原因:

“它所做的只是[一些与I / O相关的事情,比如将一个值保存到数据库中]。我不能返回任何有用的东西。”

我不同意。如果操作顺利完成,函数可以返回True。

“我们修改了其中一个参数,将其用作参考参数。”

这里有两点需要注意。首先,尽最大努力避免这种做法。用好了令人惊讶,用不好非常危险。

其次,即使这样做不可行,复制某个参数的成本太高,你也可以回到上一条建议。

“我需要返回多个值。单独返回一个值是没有意义的。”

可以使用元组返回多个值。

总是返回一个有用的值,调用者总是可以自由地忽略它们。

函数长度

让你读一个200行的函数,并说出它是做什么的,你是什么感受?

函数的长度直接影响可读性,从而影响可维护性。所以要保持你的函数简短。50行是一个随意的数字,在我看来是合理的。你编写的大多数函数应该要短一些。

如果一个函数遵循单一功能原则,它很可能是相当短的。 如果它是纯函数或是幂等的(下面讨论) ,它也可能是短的。

那么,如果函数太长,应该怎么做?重构。这会改变程序的结构而不改变其行为。

从一个长函数中提取几行代码,并把它们变成自己的函数。这是缩短长函数的最快、也是最常见的方式。

加上你给所有这些新函数取了合适的名称,因此生成的代码读起来也会更容易。

幂等和函数纯度

不管被调用了多少次,幂等函数总是在给定相同参数集的情况下返回相同的值。

结果不依赖于非局部变量、参数的可变性或来自任何I / O流的数据。下面的这个add_three(number)函数是幂等函数:

def add_three(number):
 """Return *number* + 3."""
 return number + 3

不管一个人调用add_three(7)多少次,答案总是10。以下是一个非幂等函数:

def add_three():

"""Return 3 + the number entered by the user."""

number = int(input('Enter a number: '))

return number + 3

这个函数的返回值取决于I / O,即用户输入的数字。对add_three()的每次调用都会返回不同的值。

如果它被调用两次,用户可以第一次输入3,第二次输入7,分别调用add_three()返回6和10。

幂等性的一个现实中例子是在电梯前点击“向上”按钮。第一次按时,电梯会被“通知”你要上去。因为按按钮是幂等的,所以反复按它都没有什么影响。结果是一样的。

为什么幂等很重要?

可维护性和可维护性。幂等函数很容易测试,因为在使用相同的参数时,它们总是返回相同的结果。

测试仅仅是检查通过不同调用返回值的预期值。更重要的是,这些测试很快,这是单元测试中一个重要且经常被忽视的问题。

而在处理幂等函数时,重构是轻而易举的事情。 无论如何在函数之外更改代码,使用相同的参数调用它的结果总是一样的。

什么是纯函数?

在函数编程中,如果一个函数既幂等又没有可观察到的副作用,它就被认为是纯函数。函数外部的任何东西都不会影响这个值。

然而,这并不意味着函数不能影响非局部变量或I / O流之类的事情。例如,如果上面add_three(number)的幂等版本在返回结果之前打印了结果,那么它仍然被认为是幂等的,因为当它访问I / O流时,这个访问与从函数返回的值无关。

调用print ( )只是一个副作用:除了返回值之外,还与程序的其他部分或系统本身进行了一些交互。

让我们把我们的add_three(number)示例再向前推进一步。我们可以编写下面的代码片段来确定调用add_three(number)的次数:

add_three_calls = 0

def add_three(number):

"""Return *number* + 3."""

global add_three_calls

print(f'Returning {number + 3}')

add_three_calls += 1

return number + 3

def num_calls():

"""Return the number of times *add_three* was called."""

return add_three_calls

我们现在正在打印到控制台(一个副作用)并修改一个非局部变量(另一个副作用),但是由于这两者都不影响函数返回的值,它仍然是幂等的。

纯函数没有副作用。它不仅不使用任何“外部数据”来计算值,除了计算和返回所述值之外,它与系统/程序的其余部分都没有交互。因此,虽然我们新的add_three(number)定义仍然是幂等的,但它不再是纯的。

纯函数没有日志语句或print ( )调用。它们不使用数据库或互联网连接。它们不访问或修改非局部变量。它们不调用任何其他非纯函数。

简而言之,它们无法做到爱因斯坦所说的“远距离幽灵般的行动”(在计算机科学环境中)。它们不会以任何方式修改程序或系统的其余部分。

在命令式编程(编写Python代码时所做的那种)中,它们是所有函数中最安全的函数。

它们也很容易被测试和维护,甚至比只是幂等函数更重要的是,测试它们基本上可以和执行它们一样快。

测试本身很简单:没有数据库连接或其他外部资源进行模拟,也不需要安装代码,之后也没有什么需要清理的。

明确地说,幂等性和纯函数只是一种期望,不是必需的。也就是说,由于好处很多,我们可能会希望只编写纯函数或幂等函数,但这不现实。

重要的是,我们要有意识开始写代码来隔离副作用和外部依赖性。这会使得我们编写的每一行代码都更容易被测试。

原文链接:

https://hackernoon.com/write-better-python-functions-c3a9a36382a6

-OVER-

干货|手把手教你写单片机的结构体 摘要:听说还有好多学单片机的小伙伴不会用结构体?指针和结构体是学单片机必须要掌握的,如果你C语言掌握的不牢,单片机根本学不到精髓,只能完非常低级的项目。看得懂结构体并且能够灵活运用结构体才能说你入门了单片机。本篇将以最通俗的方式结合STM32单片来将将结构体的运用。解决你学完C语言、考过了计算机二级还是看不懂单片机结构体的苦恼。宝藏文章,记得点赞转发收藏。 大家知道指针和结构体是单片机的难点,所以就去学习C语言,找视频看书… 这里面每一个视频的播放量都非常高。对于单纯的学习C语言,这里讲的很清楚。看完你不 阅读详情

相关推荐

川崎机器人 AS语言基础运动指令表

    功能简介 动作方式 参考坐标系 位置特性 X,Y,Z 角度特性 O,A,T 指令格式(距离单位毫米,时间单位秒,角度单位度 示例1 示例2 运 动 指 令 JMOVE 以关节移动到目标点 关节移动方式 基础坐标系 不受控 伪随机动作 JMOVE 目标点 JMOVE #yd JMOVE put1 LMOVE 以直线移动到目标点 直线移动方式

喜欢自学并分享经验的技术宅 9348

干货 | 如何写一个更好的Python函数?

乾明 编译整理自 Medium 量子位 报道 | 公众号 QbitAIPython虽然好用,但用好真的很难。尤其是函数部分,只要写不好,后面的一连串人都会遭殃。看又看不懂...

量子位 655

[Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译

本文介绍了如何使用Python调用Dify的API实现文本翻译自动化。Dify作为AI开发平台,其工作流功能可执行文本处理、翻译等任务。选择Python调用Dify的优势在于职责划分清晰:Dify专注AI服务,Python处理文件操作等非AI任务。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1095

python函数定义的要点_函数学习要点

函数学习要点函数是python的一等公民,是掌握python这门编程语言的关键,如何准确无误的理解其概念,如何得心应手的灵活运用,本篇教程尝试带给你一些启发。1. 把函数定义与函数调用分开理解1.1 函数定义函数的定义由4部分组成def 关键字函数名称函数参数函数体def add(a, b):return a + b函数体是指函数内部的代码,在上面的示例中,函数体内只有一行代码 return a ...

weixin_39520869的博客 1101

量子编程专业权威教程(十四):Shor 算法

本文系统阐述了Shor算法的原理与实现,重点解析了将大数分解问题转化为周期寻找问题的数论基础,以及模幂运算量子电路的设计方法。通过以N=15为例的完整算法流程演示,展示了量子计算在因数分解问题上的指数级优势。文章详细拆解了受控幺正操作构建、量子傅里叶变换应用等关键技术环节,并提供了可复现的Qiskit代码实现。同时指出了当前量子硬件在比特数、相干时间和错误率等方面面临的工程挑战,这些限制使得分解大整数仍需长期技术突破。该研究为理解量子计算优势提供了典型范例,对后量子密码学发展具有重要启示意义。

分享知识,拥抱变化 798

C#:实现统计图像主颜色的算法(附完整源码)

C#:实现统计图像主颜色的算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 517

Python 函数基础

函数 l 函数是组织好的、可重复使用的,用来实现单一或相关功能的代码段 l 函数能提高应用的模块性和代码的重复利用率。Python提供了许多内建函数,也可以自己创建函数,这被叫做用户自定义函数 l 函数分类:内置函数、自定义函数 l 不使用函数的问题:组织结构不清晰、代码冗余、无法统一管理且维护难度大 一、定义函数 l 函数代码块以def关键词开头,后接函数标识符名称和圆括号...

weixin_34304013的博客 251

MATLAB 与 STK 互联导出导弹轨迹及速度数据(csv导出)

本文介绍了如何通过 MATLAB 脚本连接 STK 提取导弹三维轨迹数据,并以 CSV 格式导出,包含以下关键内容:自动连接 STK 场景;获取所有导弹对象;提取 J2000 坐标系下的位置和速度;加入任务优先级与状态;导出为标准 CSV 文件;

weixin_52370774的博客 778

python定义函数的基本要素_python基础之函数v1

Python基础之函数1:函数一:什么是函数函数就是对某一个功能的代码,进行打包。类似于一修车师傅有工具箱一样,需要用什么工具直接拿来用就行。二:为什么要有函数当需要重复的用一些功能的时候,就可以直接调用,不用再复制粘贴三:函数的分类三.一:内置函数print,id,map,filter...都是内置函数,你只需要怎么用就行。。。三.二:自定义函数就是你需要用什么功能,都是需要自己造四:使用函数的...

weixin_39661405的博客 489

【OpenClaw企业级智能体实战】第09篇:OpenClaw金融投研实战:17个场景+完整代码,打造专属数字研究员

金融投研面临信息过载、流程重复、数据安全合规三大核心痛点,OpenClaw作为本地部署的新一代AI智能体,凭借“长期记忆+主动执行+数据不出域”的优势,成为券商分析师集体追捧的效率工具。本文基于8家头部券商公开研报,拆解OpenClaw在金融投研的17个核心应用场景(信息处理、研报撰写、量化策略、流程自动化),详解原理、技术选型、实操流程,并提供可直接运行的完整代码与执行结果。文章兼顾新手入门与进阶提升,强调安全隔离部署与幻觉防范,读者可按步骤搭建专属投研智能体,将信息处理、数据整理等重复工作效率提升80%

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 673

OTFS 消息传递算法信号检测【附matlab代码详解】

OTFS 消息传递算法方面的一些浅浅理解。

Cuby的博客 4009

python怎么写好_干货 | 如何写一个更好的Python函数?

乾明 编译整理自 Medium 量子位 报道 | 公众号 QbitAIPython虽然好用,但用好真的很难。尤其是函数部分,只要写不好,后面的一连串人都会遭殃。看又看不懂,测试起来也麻烦,维护又维护不动,真是让人头疼。那怎么写好一个Python函数呢?《Writing Idiomatic Python》一书的作者在Medium上发表了一篇文章,给出了6个建议。希望能够给你带来帮助。什么样的函数是一...

weixin_36269141的博客 126

【ComfyUI】Wan2.2 Animate 动作迁移重绘视频生成

本文介绍了一个基于ComfyUI的Wan2.2 Animate视频生成工作流,通过动作迁移和视频重绘技术实现高质量视频创作。该系统融合视频帧重建、动作迁移、图像重绘和音频合成等多种AI技术,核心采用Wan2.2 Animate 14B_fp8模型配合专属VAE解码器和LoRA微调模块。工作流程包含输入预处理、模型加载、特征提取、动作采样生成、解码输出和资源清理六个阶段,通过WanVideo系列节点实现从图像/视频输入到最终视频输出的完整处理。系统支持对参考图像进行视觉特征提取和嵌入生成,结合文本/动作嵌入进

Mr数据杨 2444

干货 | 如何写一个更好的Python函数?

乾明 编译整理自 Medium 量子位 报道 | 公众号 QbitAIPython虽然好用,但用好真的很难。尤其是函数部分,只要写不好,后面的一连串人都会遭殃。看又看不懂

qq_16111127的博客 170

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python怎么写ai_干货 | 如何写一个更好的Python函数?

点击上方“磐创AI”,选择“置顶公众号”精品文章,第一时间送达本文经AI新媒体量子位(公众号 ID: QbitAI)授权转载,未经允许不得二次转载Python虽然好用,但用好真的很难。尤其是函数部分,只要写不好,后面的一连串人都会遭殃。看又看不懂,测试起来也麻烦,维护又维护不动,真是让人头疼。那怎么写好一个Python函数呢?《Writing Idiomatic Python》一书的作者在Medi...

weixin_39986741的博客 290

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python函数怎么写优美,如何写一个更好的Python函数?

点击关注上方“SQL数据库开发”,设为“置顶或星标”,第一时间送达干货Python虽然好用,但用好真的很难。尤其是函数部分,只要写不好,后面的一连串人都会遭殃。看又看不懂,测试起来也麻烦,维护又维护不动,真是让人头疼。那怎么写好一个Python函数呢?《Writing Idiomatic Python》一书的作者在Medium上发表了一篇文章,给出了6个建议。希望能够给你带来帮助。什么样的函数是一...

weixin_34396941的博客 225

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

怎样才能写好一个 Python 函数

点击上方“涛哥聊Python”,选择“星标”公众号重磅干货,第一时间送达出处:乾明(编译)@量子位链接:https://hackernoon.com/write-better-pytho...

涛哥聊Python 357

如何写好 Python 的 Lambda 函数?

当你需要完成一件小工作时,在本地环境中使用这个函数,可以让工作如此得心应手,它就是 Lambda 函数。Lambda 函数是 Python 中的匿名函数。lambda 关键字可以用来创建一个 lambda 函数,紧跟其后的是参数列表和用冒号分割开的单个表达式。例如,lambda x: 2 * x 是将任何输入的数乘2,而 lambda x, y: x+y 是计算两个数字的和。语法十分直截了当,对吧?假设您知道什么是 lambda 函数,本文旨在提供有关如何正确使用 lambda 函数的一些常规准则。

Python学习与数据挖掘 2274

技术干货 | 基于MindSpore更好的理解Focal Loss

摘要:Focal Loss的两个性质算是核心,其实就是用一个合适的函数去度量难分类和易分类样本对总的损失的贡献。

华为云官方博客 1728

adddays函数_纯干货分享!Axure函数整理,供大家自查!

当我们用Axure来制作一些高级交互去产出高保真产品原型时,难免会用到Axure函数。不过其函数众多,我们常用的也就几个类型,如若遇到不常用的类型,可能需要自查。这里笔者为大家整理了相关资料来说明各函数的用途,供给大家查询使用。元件函数(最常使用类型)This获取当前元件对象。当前元件是指要为其添加交互事件的元件,而非要进行控制的元件,注意和下面的Target区分开Target目标元件对象。指在交...

weixin_35662019的博客 1311

好用的库函数,qsort函数大详解(干货满满!)(初阶)

我们不要过度依赖库函数,要有着自己的思想,如今很多人说现在是AI时代,AI时代会淘汰程序员这种话,我觉着这是错误的,因为AI终究是机器思想,它可能会帮我们去干一些活,虽然很好用,但也会让我们不在想思考,让我们思考能力下降,所以我们也是不能一直依赖AI,我们要会自己思考,况且程序员也是不断在学习的,目前程序员还是无法被淘汰的,这里说了不少脱离文章本身的话,也是通过滥用库函数而感慨一些了。透过现象看本质 ,明白它背后的逻辑,懂得此代码为什么去写!2.冒泡排序和qsort的代码比较。

effort123_的博客 2567

python写一个程序有一个函数输出一句话在程序启动时调用这个函数_瞧瞧,这样的函数才叫 Pythonic...

点击上方“Python编程时光”,选择“加为星标”第一时间关注Python技术干货!2020年,力度最大的购书优惠,千万别错过了在机器学习中,我们经常需要使用类和函数定义模型的各个部分,例如定义读取数据的函数、预处理数据的函数、模型架构和训练过程的函数等等。那么什么样的函数才是漂亮的、赏心悦目的代码呢?在本文中,Jeff Knupp 从命名到代码量等六方面探讨了如何养成美妙的函数。与多数...

weixin_39987313的博客 221

java数组求和函数_求和之王SUMPRODUCT函数,你会的你不会的都在这了,干货慢慢...

今天来说一下SUMPRODUCT函数SUMPRODUCT函数功能非常的强大,它兼顾sum函数、product函数、sumif函数、sumifs函数、countif函数、countis等函数的功能。函数介绍:在给定的几组数组中,将数组间对应的元素相乘,并返回乘积之和。函数语法:SUMPRODUCT(array1,array2,array3,…)SUMPRODUCT具有以下参数:array1:为必需项...

weixin_39736007的博客 2298

前端js if判断以及for循环该如何写的更好,优化upup

if判断以及for循环该如何写的更好大致介绍NO.1 接了上一任前端的坑(if判断的升级)接下来进行持续升级,出小干货!跳出反反复复一直写的for循环 大致介绍 这是小m马发布的第一篇文章,关于前端领域的开发习惯,这是自己的一些经验总结,希望可以给大家带来一定的帮助,提升自己的开发效率以及代码质量,m马会用react,以及vue分别举出一些正反例来进行对比,从而更直观的体现代码开发的质量性 N...

webhour的博客 2661
下一篇: 汇总初学python时的28个操作难点(新手必看篇)
python之光
博客等级 码龄7年 114粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值