数据工程师面试必备——Python与数据库的那些事

Python 全栈工程师必备面试题 300 道(2020 版) Python 全栈工程师核心面试 300 问深入解析(2020 版) Python 面试不仅需要掌握 Python 基础知识和高级语法,还会涉及网络编程、web 前端后端、数据库、网络爬虫、数据解析、数据分析和数据可视化等各方面的核心知识。针对网上资料参差不齐,并且自己上网寻找费时费力,效果还不好的问题,进行该 Chat 创作。 本人结合自己多年的开发经验,同时汲取网络中的精华,本着打造全网最全面... 阅读详情

最近身边有小伙伴在准备python数据工程师的面试,趁这个机会整理了Python与数据库的相关问题,话不多说,直接开始。

一、关系数据库与非关系数据库

SQL(Structured Query Language)数据库,指关系型数据库。主要代表:SQL Server、Oracle、MySQL、PostgreSQL。

NoSQL(Not Only SQL)泛指非关系型数据库。主要代表:MongoDB、Redis、CouchDB。

关系数据库是以表的形式存储数据的数据库。每个表都有一个模式来记录需要的列和类型。每个模式必须至少有一个主键来唯一标识该记录。换句话说,数据库中没有重复的行。此外,每个表可以使用外键与其他表关联。

关系数据库的一个重要方面是必须将模式中的更改应用于所有记录。这有时会在迁移期间造成破坏,因此十分麻烦。非关系数据库以不同的方式处理问题。它们本质上是无模式的,这意味着可以用不同的模式和不同的嵌套结构保存记录。记录仍然可以有主键,但是模式中的更改是在逐项基础上进行的。

以SQLite为例

我们使用SQLite来举例,首先,导入所需的Python库并创建一个新数据库

import sqlite3

db = sqlite3.connect(':memory:')  # 使用内存数据库
cur = db.cursor()

接下来,创建以下三个表:

  1. 客户:此表包含一个主键以及客户的名字和姓氏。

  2. 物品:此表包含主键,物品名称和物品价格。

  3. 购买的项目:此表将包含订单号,日期和价格。它还将连接到“项目”和“客户”表中的主键。

                id integer PRIMARY KEY,
                firstname varchar(255),
                lastname varchar(255) )''')
cur.execute('''CREATE TABLE IF NOT EXISTS Item (
                id integer PRIMARY KEY,
                title varchar(255),
                price decimal )''')
cur.execute('''CREATE TABLE IF NOT EXISTS BoughtItem (
                ordernumber integer PRIMARY KEY,
                customerid integer,
                itemid integer,
                price decimal,
                CONSTRAINT customerid
                    FOREIGN KEY (customerid) REFERENCES Customer(id),
                CONSTRAINT itemid
                    FOREIGN KEY (itemid) REFERENCES Item(id) )''')

再往表里插入一些数据

cur.execute('''INSERT INTO Customer(firstname, lastname)
               VALUES ('Bob', 'Adams'),
                      ('Amy', 'Smith'),
                      ('Rob', 'Bennet');''')
cur.execute('''INSERT INTO Item(title, price)
               VALUES ('USB', 10.2),
                      ('Mouse', 12.23),
                      ('Monitor', 199.99);''')
cur.execute('''INSERT INTO BoughtItem(customerid, itemid, price)
               VALUES (1, 1, 10.2),
                      (1, 2, 12.23),
                      (1, 3, 199.99),
                      (2, 3, 180.00),
                      (3, 2, 11.23);''') 

OK,现在每个表中都有一些数据,现在我们用这些数据来回答进行下一步

SQL聚合函数

聚合函数是对结果集执行数学运算的函数。比如AVG,COUNT,MIN,MAX,和SUM。一般来说,还要使用GROUP BY和HAVING子句来搭配使用。拿AVG函数来说,可以用来计算给定结果集的平均值:

>>> cur.execute('''SELECT itemid, AVG(price) FROM BoughtItem GROUP BY itemid''')
>>> print(cur.fetchall())
[(1, 10.2), (2, 11.73), (3, 189.995)]

上面sql语句就提取出数据库中购买的每个商品的平均价格。也可以显示项目名称,而不是itemid⬇️

>>> cur.execute('''SELECT item.title, AVG(boughtitem.price) FROM BoughtItem as boughtitem
...             INNER JOIN Item as item on (item.id = boughtitem.itemid)
...             GROUP BY boughtitem.itemid''')
...
>>> print(cur.fetchall())
[('USB', 10.2), ('Mouse', 11.73), ('Monitor', 189.995)]

另一个有用的聚合函数是SUM。比如可以使用此功能显示每个客户花费的总金额⬇️

>>> cur.execute('''SELECT customer.firstname, SUM(boughtitem.price) FROM BoughtItem as boughtitem
...             INNER JOIN Customer as customer on (customer.id = boughtitem.customerid)
...             GROUP BY customer.firstname''')
...
>>> print(cur.fetchall())
[('Amy', 180), ('Bob', 222.42000000000002), ('Rob', 11.23)]

加速SQL查询

SQL语句的执行速度取决很多因素,但主要受以下几种因素的影响:

  • 连接

  • 聚合

  • 遍历

  • 记录

连接数越多,表的复杂度越高,遍历次数也越多。在涉及多个表的数千条记录上执行多次连接非常麻烦的,因为数据库还需要缓存中间结果,所以真的需要的话就要考虑增加内存大小。

执行速度还受数据库中是否存在索引的影响。索引非常重要,它可以快速搜索表并找到查询中指定列的匹配项。索引以增加插入时间和一些存储为代价对记录进行排序。可以组合多个列以创建单个索引。

调试SQL查询

大多数数据库都包含一个EXPLAIN QUERY PLAN描述数据库执行查询的步骤。对于SQLite,可以通过EXPLAIN QUERY PLAN在SELECT语句前面添加来启用此功能:

>>> cur.execute('''EXPLAIN QUERY PLAN SELECT customer.firstname, item.title,
...                item.price, boughtitem.price FROM BoughtItem as boughtitem
...                INNER JOIN Customer as customer on (customer.id = boughtitem.customerid)
...                INNER JOIN Item as item on (item.id = boughtitem.itemid)''')
...
>>> print(cur.fetchall())
[(4, 0, 0, 'SCAN TABLE BoughtItem AS boughtitem'),
(6, 0, 0, 'SEARCH TABLE Customer AS customer USING INTEGER PRIMARY KEY (rowid=?)'),
(9, 0, 0, 'SEARCH TABLE Item AS item USING INTEGER PRIMARY KEY (rowid=?)')]

该查询尝试列出所有购买商品的名字,商品标题,原始价格和购买价格。而该查询在SQL中应这样写⬇️

SCAN TABLE BoughtItem AS boughtitem
SEARCH TABLE Customer AS customer USING INTEGER PRIMARY KEY (rowid=?)
SEARCH TABLE Item AS item USING INTEGER PRIMARY KEY (rowid=?)

二、有关非关系数据库的问题

在上一节已经说明了关系数据库和非关系数据库之间的差异,并将SQLite与Python结合讲解,本节主要讲NoSQL。

以MongoDB为例

首先安装在python中安装MongoDB相关的库

$ pip install pymongo

再创建数据库并插入一些数据⬇️

import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017/")

# Note: This database is not created until it is populated by some data
db = client["example_database"]

customers = db["customers"]
items = db["items"]

customers_data = [{ "firstname": "Bob", "lastname": "Adams" },
                  { "firstname": "Amy", "lastname": "Smith" },
                  { "firstname": "Rob", "lastname": "Bennet" },]
items_data = [{ "title": "USB", "price": 10.2 },
              { "title": "Mouse", "price": 12.23 },
              { "title": "Monitor", "price": 199.99 },]

customers.insert_many(customers_data)
items.insert_many(items_data)

可以发现MongoDB将数据记录存储在collection中,等价于Python中的字典列表。

使用MongoDB查询

首先尝试复制BoughtItem表,就在SQL中所做的一样。先向客户追加一个新字段。MongoDB的文档指定关键字操作符集可以用来更新一条记录,而不必写所有现有的字段:

bob = customers.update_many(
        {"firstname": "Bob"},
        {
            "$set": {
                "boughtitems": [
                    {
                        "title": "USB",
                        "price": 10.2,
                        "currency": "EUR",
                        "notes": "Customer wants it delivered via FedEx",
                        "original_item_id": 1
                    }
                ]
            },
        }
    )

实际上,可以稍微更改架构来更新另一个客户:

amy = customers.update_many(
        {"firstname": "Amy"},
        {
            "$set": {
                "boughtitems":[
                    {
                        "title": "Monitor",
                        "price": 199.99,
                        "original_item_id": 3,
                        "discounted": False
                    }
                ]
            } ,
        }
    )
print(type(amy))  # pymongo.results.UpdateResult

可以像在SQL中一样执行查询。首先,可以创建一个索引

>>> customers.create_index([("name", pymongo.DESCENDING)])

然后,就可以更快的检索按升序排序的客户名称:

>>> items = customers.find().sort("name", pymongo.ASCENDING)

还可以遍历并打印购买的物品:

>>> for item in items:
...     print(item.get('boughtitems'))    
...
None
[{'title': 'Monitor', 'price': 199.99, 'original_item_id': 3, 'discounted': False}]
[{'title': 'USB', 'price': 10.2, 'currency': 'EUR', 'notes': 'Customer wants it delivered via FedEx', 'original_item_id': 1}]

甚至可以在数据库中检索唯一的名字列表:

>>> customers.distinct("firstname")
['Bob', 'Amy', 'Rob']

现在我们已经知道数据库中客户的名称,可以创建一个查询检索有关他们的信息:

>>> for i in customers.find({"$or": [{'firstname':'Bob'}, {'firstname':'Amy'}]}, 
...                                  {'firstname':1, 'boughtitems':1, '_id':0}):
...     print(i)
...
{'firstname': 'Bob', 'boughtitems': [{'title': 'USB', 'price': 10.2, 'currency': 'EUR', 'notes': 'Customer wants it delivered via FedEx', 'original_item_id': 1}]}
{'firstname': 'Amy', 'boughtitems': [{'title': 'Monitor', 'price': 199.99, 'original_item_id': 3, 'discounted': False}]}

写成SQL语句就是

SELECT firstname, boughtitems FROM customers WHERE firstname LIKE ('Bob', 'Amy')

NoSQL与SQL

如果架构是不断变化的(例如财务监管信息),则NoSQL可以修改记录并嵌套相关信息。想象一下,如果我们有八个嵌套顺序,那么在SQL中必须执行的连接数需要多少。但是现在,如果需要运行报告,提取有关该财务数据的信息并推断结论该怎么办?在这种情况下,就需要运行复杂的查询,并且SQL在这方面往往会更快。

注意: SQL数据库(尤其是PostgreSQL)还有一项功能允许将可查询的JSON数据作为记录的一部分插入。虽然这可以结合两个方面的优势,但速度可能并没有很好。而从NoSQL数据库查询非结构化数据比从PostgreSQL中的JSON类型列查询JSON字段要快。

由于存在各种各样的数据库,每个数据库都有其自身的功能,因此,还需要具体分析,以决定使用哪个数据库。

三、有关缓存数据库的问题

缓存数据库保存经常访问的数据。它们与主要的SQL和NoSQL数据库并存。他们的目标是减轻负载并更快地处理请求。

上一节已经为长期存储解决方案介绍了SQL和NoSQL数据库,但是更快,更直接的存储又如何呢?数据工程师又如何更改从数据库检索数据的速度?典型的Web应用程序经常检索常用数据,例如用户的个人资料或姓名。如果所有数据都包含在一个数据库中,则数据库服务器获得的次数将非常高。因此,需要更快更直接的存储解决方案。

尽管这减少了服务器负载,但也给数据工程师,后端团队和DevOps团队带来了两个麻烦。首先,现在需要一个读取时间比主SQL或NoSQL数据库更快的数据库。但是,两个数据库的内容必须最终匹配。

所以收到请求时,首先要检查缓存数据库,然后是主数据库。这样,可以防止任何不必要和重复的请求到达主数据库的服务器。由于缓存数据库的读取时间较短,因此还能让性能提升。

以Redis为例

首先用pip安装相关的库

$ pip install redis

现在,考虑一个简单的例子:从ID中获取用户名的请求:

import redis
from datetime import timedelta

r = redis.Redis()

def get_name(request, *args, **kwargs):
    id = request.get('id')
    if id in r:
        return r.get(id)  
    else:
        name = 'Bob'
        r.setex(id, timedelta(minutes=60), value=name)
        return name

此代码使用id来检查名称是否在Redis中。如果不是,则使用过期时间来设置名称,现在,如果面试官问这段代码是否有问题,回答应该是没有异常处理!数据库可能有很多问题,例如连接断开,因此永远要考虑异常捕捉。

四、结束语

有关数据库相关的问题还有设计模式、ETL概念或者是大数据中的设计模式。这些就留到以后再聊。

近期热门:

高手心得|菜鸟学Python从入门到进阶

干货来了!菜鸟入门最经典的机器学习项目,面试必考!

400多人做过的8道Python极速入门题

 点击阅读原文,阅读菜鸟学Python 400篇干货

2024年最新数据仓库面试题集锦(附答案和数仓知识体系),2024年最新字节跳动算法工程师面试经验 Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助! 阅读详情

相关推荐

python数据工程师公司面试题整理

奥德塔、奥盾、并行科技、大公国际、多来点等公司的python面试题。

Python面试必知20题,看这一篇就够了!

在 Python 中,函数是一段可重复使用的代码块,用于执行特定的任务。函数定义使用def关键字,基本语法如下:"""函数文档字符串,用于描述函数的功能和参数"""# 函数体statements参数类型位置参数:调用函数时,按照参数定义的顺序传递参数。例如:result = add_numbers(3, 5) # 这里3和5是位置参数,分别对应a和b默认参数:在函数定义时为参数指定默认值。调用函数时,如果没有为默认参数提供值,则使用默认值。默认参数必须放在位置参数之后。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 6193

从原理图到PCB:Cadence Allegro 17.4网表同步全流程详解(含第三方网表配置)

本文详细解析了Cadence Allegro 17.4中从Orcad原理图到PCB布局的网表同步全流程。核心内容包括标准的第一方网表同步步骤,以及针对第三方网表导入时关键的封装库路径配置方法,并提供了常见同步错误的排查思路,帮助工程师高效、准确地完成设计数据传递,确保PCB设计顺利开局。

salt9的博客 655

聊聊一次真实的 Python 面试经历 ,学Python太香了

今天来聊聊小编的一次真实 Python 面试经历,首先我挺喜欢这家公司的面试风格的,也是比较务实的吧。无奈自己的心理因素和技术水平都不好,导致面试失败。再接再厉!

Python966的博客 300

避坑指南:sherpa-onnx中文语音识别模型实测对比(2024最新版)

本文实测对比了sherpa-onnx框架下Paraformer、Zipformer、SenseVoice等主流中文语音识别模型。针对不同应用场景,从准确率、延迟、资源占用等维度提供选型建议,并分享部署避坑指南与最佳实践,帮助开发者高效选择本地语音转文字方案。

xray4的博客 2291

从零到一:用ROS2和Gazebo搭建Franka机械臂仿真环境(避坑指南)

本文详细介绍了如何使用ROS2和Gazebo从零开始搭建Franka机械臂的仿真环境,包括环境准备、ROS2包安装、控制器配置及常见问题解决方案。特别针对关节位置控制等核心功能提供了实用代码示例和避坑指南,帮助开发者高效构建机器人算法验证平台。

weixin_29061465的博客 463

Python常考基础面试题

Python基础面试题 1、 Python 数据结构有哪些 2、Python 中列表和元组的区别是什么?元组是不是真的不可变? 3、什么是生成器和迭代器?它们之间有什么区别? 迭代器 生成器 4、什么是闭包?装饰器又是什么?装饰器有什么作用?你用过装饰器吗?请写一个装饰器的例子 5、什么是匿名函数,用匿名函数有什么好处? 6、如何提高 Python 的运行效

努力让自己发光,对的人才能迎着光而来 4万+

kali2020.2安装出现的问题并附详细解决办法

kali2020.2的安装

weixin_48776804的博客 3050

Python工程师常见的30个基础面试题

PEP是 Python Enhancement Proposal 的缩写,翻译过来就是 Python增强建议书简单说就是一种编码规范,是为了让代码“更好看”,更容易被阅读。

Python栈 3196

Qlib上手学习记录

Qlib 是一个面向人工智能的量化投资平台,其目标是通过在量化投资中运用AI技术来发掘潜力、赋能研究并创造价值,从探索投资策略到实现产品化部署。该平台支持多种机器学习建模范式,包括有监督学习、市场动态建模以及强化学习等。真的是走了很多弯路step 1. 使用 ananconda 建立环境,要主要必须是 python 3.8失败的下了以后 进入 glib folder 后执行是会报错的,不管你还什么source 都一样,整了很久使用前最好看下这个。

chenchihwen的专栏 3100

反光柱定位算法实战05:Cartographer Landmark融合定位——从原理到实战

本文介绍了CartographerLandmark融合定位方案,该方案将反光柱作为Landmark节点直接融入Cartographer后端优化框架,避免了传统双系统切换导致的位姿跳变问题。文章详细阐述了Landmark的核心原理、数据发布格式(包括ID、坐标、权重等关键字段)以及两种工作模式(建图模式和导航模式)。特别指出组合反光柱作为Landmark可提供方向参考,有效解决镜像歧义问题。该方案通过统一优化框架实现稳定定位,尤其适用于缺乏自然特征的环境,但存在ID匹配不稳定等局限性。整体而言,Cartogr

Studying…… 424

Python面试50题!面试巩固必看!

鸭子类型是动态类型语言判断一个对象是不是某种类型时使用的方法,也叫做鸭子判定法。简单的说,鸭子类型是指判断一只鸟是不是鸭子,我们只关心它游泳像不像鸭子、叫起来像不像鸭子、走路像不像鸭子就足够了。换言之,如果对象的行为跟我们的预期是一致的(能够接受某些消息),我们就认定它是某种类型的对象。bytesbytearraymemoryviewStringIOBytesIOGzipFilesocketstrbytes),其中file-like对象都能支持read和write。

Saki_Python的博客 1万+

【stata基础代码大全 】 可独立完成一篇实证

用stata打开,直接替换自己需要的变量就行,小白友好❗️❗️❗️。八、八.中介效应检验:路径分析(三种方法)第二种方法即Sobel-Goodman检验。*(7)Winsor处理,剔除异常值。六、内生性问题解决方法(附具体模型)其三,工具变量:两阶段最小二乘。第三种方法即Bootstrap检验。二、Stata中数据的基本处理。*(5)生成行业、年度虚拟变量。PSM1————近邻匹配。七、调节效应检验:机制分析。*(2)剔除数据中的样本。*(4)给变量添加标签。*(3)生成新的变量。*(6)基本数据匹配。

J_Giser的博客 8025

sqlite复制数据主键重复_数据工程师面试必备——Python与数据库的那些事

最近身边有小伙伴在准备python数据工程师的面试,趁这个机会整理了Python与数据库的相关问题,话不多说,直接开始。一、关系数据库与非关系数据库SQL(Structured Query Language)数据库,指关系型数据库。主要代表:SQL Server、Oracle、MySQL、PostgreSQL。NoSQL(Not Only SQL)泛指非关系型数据库。主要代表:Mongo...

weixin_35968572的博客 148

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【程序员必备的面试技巧】大数据工程师面试必备技能

大数据工程师可以从事对大量数据的采集、清洗、分析、治理、挖掘,并对这些数据加以利用、管理、维护和服务的相关技术工作。本文讲述大数据工程师的面试技巧和必备技能。

Morse_Chen的博客 2372

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

如何面试Python后端工程师?这些你可能想知道

金三银四找工作旺季,又来给大家送干货了。关于Python后端工程师你了解多少,下面告诉你如何面试Python后端工程师? 文章目录一、Python后端技术栈1.1 Python语言基础1.2 Python框架1.3 数据库1.4 Web1.5 系统二、关于面试+自我介绍2.1 面试流程2.2 如何进行自我介绍?三、程序员如何写简历?四、刷题最后,送大家Python面试宝典!!! 一、Python后端技术栈 1.1 Python语言基础 精通Python语言,了解Python高级特性,了解设计模式,能够.

黑马程序员官方博客 933

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

大数据开发工程师必备技能有哪些?

大数据开发工程师必备技能有哪些?随着全行业数字化转型和新基建时代的到来,对技术人才提出了更高的要求。不管是面试还是实际工作过程中,数据工程师要时时刻刻面对这些层出不穷的技术演进。随着数据的爆发式增长以及指标维度多元化,T+1 的数据报表早已无法满足需求。在保证高时效性的同时,让数据发挥更大的价值是筛选“王牌”大数据开发工程师的重要门槛。现在对大数据开发工程师的能力要求越来越高:1、OLAP型大数据开发能力对数字化转型的公司来说,公司的业务可以分为两类:一类是OLTP型的业务,一类是OLAP型的业务。

weixin_51689029的博客 3111

python全栈面试题_Python 全栈工程师必备面试题 300 道

Python全栈工程师必备面试题300道(2020版)Python面试不仅需要掌握Python基础知识和高级语法,还会涉及网络编程、web前端后端、数据库、网络爬虫、数据解析、数据分析和数据可视化等各方面的核心知识。本人结合自己多年的开发经验,同时汲取网络中的精华,本着打造全网最全面最深入的面试题集,分类归纳总结了Python面试中的核心知识点,这篇文章不论是从深度还是广度上来讲,都已经囊括了非常...

weixin_39574287的博客 347

测试工程师常用的10个python库,面试必备哦

今天给各位小伙伴带来的是测试工程师常用的10个python库,相信有些小伙伴肯定知道一些库,也使用过一些库。下面我们就来聊聊这常用的10个python库,我们主要介绍这些库和这些库的一些应用场景,方便没有接触过的小伙伴知道这些库的作用。1、os库介绍:os 库是Python标准库,包含几百个函数,常用的有路径操作、进程管理、环境参数等。

2401_83396248的博客 1509

数据工程师面试指南by Simplilearn(一)

以下文章来自英文网站simplilearn中国运营机构圣普伦提供。 无论您是希望跻身于数据工程师角色的新手,还是正在观望新机会的有经验的数据工程师,为即将到来的面试做准备都会让你搜肠刮肚。 考虑到目前人才市场的竞争程度,预测可能被问到的问题,并给出具有数据革命意义的答案将使你在面试中胸有成竹。 以下是一些来自顶级数据工程师的面试题,以及为什么会提出这些问题,你有可能在面试中遇到这些问题。这里还附有面试官通常会期望的答案。 问:什么是数据工程? 答:这个问题看起来很初级,不过无论您的技能水平如何...

simplilearnCN的博客 620

Python数据工程师与数据分析有什么区别?

不少朋友都很困惑,大数据工程师和Python的数据分析师有什么区别,哪一个的就业好薪资高?现在我们一起来探讨下这个问题。首先我们来区别下大数据工程师和数据分析师:

Python84310366的博客 876

Python程序员面试前必须知道的4件事

随着大数据和人工智能领域的发展,Python语言未来的应用前景还是非常值得期待的。另外,Python语言在Web开发、嵌入式开发和各种后端服务开发中也扮演着重要的角色,从语言生态来看,Python语言已经越来越健全了。目前也有越来越多的企业在使用Python解决方案,相应的人才需求将在未来得到一定程度的释放。 面试Python程序员首先要针对不同的岗位做不同的准备,因为不同的岗位需要具备不同的知识结构和思维方式。今天我们就简单说下,Python程序员面试之前必须清楚的4件事。 0 1 认清自己的职业发展方向

wy122222222的博客 520
上一篇: 漫画,假装自己是Python高手,学会这十招就可以
下一篇: 另类数据解读 : 口罩是什么时候成为硬通货的?!
菜鸟学Python
博客等级 码龄9年 8086粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值