标签 python 下的文章

Pandas 是一个十分流行的 Python 第三方库。本文介绍了 Pandas 库中的一些特性和函数,并且我们鼓励读者亲手使用 Pandas 库,来解决实际的业务问题。

Pandas 为 Python 中数据分析提供了基础和高级的构建组件。Pandas 库是用于数据分析与数据操作的最强大和最灵活的开源分析工具之一,并且它还提供了用于建模和操作表格数据(以行和列组织的数据)的数据结构

Pandas 库有两个主要的数据结构:第一个是 “ 系列 Series ”,该数据结构能够很方便地从 Python 数组或字典中按位置或指定的索引名称来检索数据;第二个是“ 数据帧 DataFrames ”,该数据结构将数据存储在行和列中。列可以通过列名访问,行通过索引访问。列可以有不同类型的数据,包括列表、字典、序列、数据帧、NumPy 数组等。

Pandas 库可以处理各种文件格式

有各种各样的文件格式。用于数据分析的工具必须能够提供处理各种文件格式的方法。

Pandas 可以读取各种文件格式,例如 CSV 文件、JSON 文件、XML 文件、Parquet 文件、SQL 文件,详见下表。

写入读取
CSV 文件to_csv 函数read_csv 函数
JSON 文件to_json 函数read_json 函数
Parquet 文件to_parquet 函数read_parquet 函数
SQL 文件to_sql 函数read_sql 函数,read_sql_query 函数,read_sql_table 函数
XML 文件to_xml 函数read_xml 函数

使用 Pandas 进行数据清理

在现实场景中,很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。此外,数据还会有需要 屏蔽 mask 的敏感和机密信息。接下来,Pandas 提供了清理、丢弃、替换、屏蔽等方法,来处理这些坏数据。

Pandas 清洗空值:

a. 空行可以使用 df.dropna(inplace=True) 方法来删除。

b. 空值可以使用 df.fillna(<value>, inplace=True) 方法来替换。还可以指定某一个列来替换该列的空数据。

Pandas 屏蔽数据:

c. 要屏蔽所有不满足条件 my_list.where(my_list < 5) 的敏感数据的值,可以使用 my_list.mask(my_list < 5)

Pandas 清洗重复数据:

d. 要删除重复数据,可以使用 drop_duplicates() 方法:

df.drop_duplicates(‘<column>’, keep = False)
df.drop_duplicates(‘<column>’, keep = ‘first’)
df.drop_duplicates(‘<column>’, keep = ‘last’)

使用 Pandas 进行数据分析

下面的表格列出了 Pandas 中进行数据分析的各种函数,以及其语法。(请注意:df 代表一个 数据帧 DataFrame 数据结构的实例。)

语法描述
df.head(x)head() 函数用于读取前面的 x 行,如果不填参数 x,默认返回 5 行
df.tail(x)tail() 函数用于读取尾部的 x 行,如果不填参数 x ,默认返回最后 5 行,空行各个字段的值返回 NaN
loc(x:y)Loc 函数返回指定行的数据,也可以对数据进行切片
groupby('<column>')对指定列的数据进行分组
df['column'].sum()计算指定列数据的总和
df['column']. mean()计算指定列数据的算术平均值
df['column'].min()计算指定列数据的最小值
df['column'].max()计算指定列数据的最大值
df.sort_values(['column'])在指定列上根据数值进行排序,默认升序
df.size返回元素的个数,即为行数 * 列数
df.describe返回对各列的统计汇总
pd.crosstab(df['column1'], df['column2'], margins = True)创建 column1column2 的交叉表
df.duplicated([column1, 'column2'])根据 column1column2 中的重复值,返回 TrueFalse

Pandas 的优点

  • 支持多索引(层次索引),方便分析多维数据。
  • 支持数据透视表的创建,堆栈和取消堆栈操作。
  • 可以使用 Pandas 处理有限值的分类数据。
  • 支持分组和聚合运算。
  • 可以禁用排序。
  • 支持行级过滤(获取满足过滤条件的行)和列级过滤(只选择需要的列)。
  • 有助于重塑数据集(数组的维度变换)。还可以转置数组的值,并转换为列表。当你使用 Python 处理数据时,可以将 Pandas 数据帧转换为多维 NumPy 数组。
  • 支持面向标签的数据切片。

Pandas 的不足

Pandas 的代码和语法与 Python 不同,所以人们需要额外再学习 Pandas。此外,相较于 Pandas,像三维数据这样的高维数据会在 NumPy 等其他库有更好的处理。

总结

Pandas 能够大幅提升数据分析的效率。它与其他库的兼容性使它在其他 Python 库中都能有效地使用。


via: https://www.opensourceforu.com/2022/08/pandas-the-popular-python-library-for-data-analysis-and-data-science/

作者:Phani Kiran 选题:lkxed 译者:chai001125 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这个简单的指南演示了如何在 Windows 上下载和安装 Python。

这篇文章是用最新的 Python 3.11 稳定版测试的。

在学习如何在 Windows 上安装 Python 之前,你可能想看看如何在 Linux 发行版(如 Ubuntu)上轻松安装 Python。如果你打算成为一名开发者,最好在 Linux 中尝试 Python。那么,你可能想看看 如何在 Windows 之外安装 Linux(如 Ubuntu)

Python 是一种流行的通用编程语言,在过去十年中成为开发者的选择。而且它的受欢迎程度与日俱增。它被广泛用于网络开发、复杂系统、数据科学、机器学习和所有科学领域。

你可能遇到的 Python 有两个版本。Python2 目前已经不支持了。而 Python3 系列是持续支持的版本。

检查 Python 是否已经安装

在 Windows 上安装它之前,你应该检查它是否已经安装。一般来说,它应该没有安装,不像在 Ubuntu (和其他 Linux 发行版)中,Python 是预先安装的。

从开始菜单中,打开“命令提示符”。

并输入以下内容:

python --version

如果 Python 是可用的,它将显示一个包含版本细节的信息。

下载并安装 Python

打开下面的 Python 官方下载页面。

下载 Python

如何找到要安装的 Python

在顶部,你应该看到当前的稳定版本。点击下载链接。如果你正在寻找任何特定的版本,在这个页面上向下滚动,在 “Python releases by version number:” 的标签下下载特定的版本。

下载后,进入下载文件夹,运行安装程序。

按照屏幕上的指示进行安装。

安装 Python 第 1 步

安装 Python 第 2 步

安装完成后,验证 Python 的版本。

验证 Python 版本

从开始菜单,打开“命令提示符”,运行以下命令。

python --version

Windows 上的 Python 版本

你应该看到你的系统当前安装的 Python 包的版本。另外,你也可以运行下面的程序来获得一个 Python 交互式 shell。

python

你可以用 CTRL+Z 和回车键退出这个交互界面。

检查 PATH 变量

你应该检查系统变量 PATH,看看 Python 的可执行位置是否存在。这应该是使用安装程序自动更新的。

从开始菜单中,搜索“ 系统变量 system variables ”并打开它。

打开环境变量设置

在“系统属性”对话框中,点击“ 高级 Advanced > 环境变量 Environment Variables ”。在用户变量部分,对照路径变量,检查 Python 的安装位置是否存在。请参考下面的图片作为指导。

如果你看到所有的路径都存在,你就可以运行你的 Python 项目了。

检查 Windows 中的 Python 环境 PATH 值

创建并运行你的第一个 Python 程序

一个额外的步骤,这里是你如何编码和运行你的第一个 Python 程序。你可以使用任意 推荐的 Python 编辑器 来编写你的程序。

下面是一个简单的程序,它在控制台中输出文本 debugpoint.com

# Sample Python program
print("debugpoint.com")

用任意名字保存文件。这里我把它保存为 hello.py,放在 E 盘。.py 是 Python 源码的扩展名。

要运行这个程序,请打开命令提示符,在 E 盘中执行以下内容。

python hello.py

输出:

在 Windows 中运行一个简单的 Python 程序

结束语

我希望这个简单的初学者指南能够帮助你在 Windows 中安装 Python,验证安装并运行你的第一个程序。

如果你遇到问题,请在下面的评论栏中告诉我。


via: https://www.debugpoint.com/install-python-windows/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本文将帮助你了解在 Ubuntu 和 Fedora 中设置 Python 开发环境的基础知识和步骤。

Python 由于其强大的库、简单的语法和可移植性,在过去几年中变得很流行。目前几乎所有的企业系统都在使用它。

因此,如果你正试图建立你的 Python 环境,并想知道如何开始等等,那么你就找到正确的地方了。在这里,我试图给你一些开始的步骤。

在 Ubuntu 和 Fedora 中设置 Python 开发环境

Python 版本

如果你刚刚开始 Python 开发,那么建议你使用最新的 Python 3.x 进行开发,因为 Python 2.x 已经不再支持了。几乎所有领先的 Linux 发行版都取消了对 Python 2 的依赖。

如果你正在运行 Fedora 或 Ubuntu 的最新发行版,那么你应该已经安装了 Python 3.x,并设置为默认解释器。例如,Fedora 37 和 Ubuntu 22.04 LTS 将 Python 3.11 作为默认的 Python 交互界面。

找到你的 Python 版本的一个快速方法是在 Ubuntu 和 Fedora 的终端运行以下命令:

python2
python3

python3

如果你运行的是早期版本的 Ubuntu 或 Fedora,那么你可以使用以下命令安装最新的 Python 3.x:

Ubuntu:

sudo apt install python3

Fedora:

sudo dnf install python3

另外,运行下面的命令,找出当前系统中 Python 可执行文件的路径:

Which python

切换默认解释器的版本

如果你的系统安装了多个 Python 版本 —— 2.x 和 3.x,并且你想在它们之间切换,也是可以的。

如果你只安装了一个版本,你可以跳过这一节。

要进行切换,首先,从终端运行 python,找出默认的可执行路径。理想情况下,它应该是 /usr/bin/python。现在,运行下面的程序,找出通往可执行文件的符号链接:

ln -l /usr/bin/python
lrwxrwxrwx 1 root root .... /usr/bin/pyhton -> python2

现在检查一下 $PATH 变量,确定系统查找可执行文件的路径连接顺序:

echo $PATH

PATH 变量

你可以看到 /usr/local/bin/usr/bin/ 之前,那么你可以创建一个软符号链接到 python3。然后你的解释器在运行 python 命令时就会找到最新的 Python 3 而不是 Python 2。

ls -s /usr/bin/python3 /usr/local/bin/python

现在你应该注销并再次登录以清除任何哈希条目,或者你可以运行 hash -r 来清除它们。

现在你可以从终端运行 python,你应该有最新的 Python 3 了。

Python IDE

集成开发环境(IDE)可以帮助你编写、编译和执行你的代码。有 几个免费的 Python 集成开发环境 —— 如 PyCharm、Eclipse、Eric 等,你可以使用。但那将是另一篇关于其优点和缺点的文章。

如果你从官方 python.org 网站下载 Python,Python 还带着一个叫做 IDLE 的默认开发环境。IDLE 适合于起步,之后你可以决定选择任何一个最好的免费 Python IDE。

在 Ubuntu 和 Fedora 中,IDLE 并没有和 Python 一起被默认包含,你必须手动安装它。从终端运行下面的命令来手动安装 IDLE:

Ubuntu:

sudo apt install idle

Fedora:

sudo dnf install python-tools

安装后,你可以从命令行空闲启动 IDLE 或从应用程序中搜索。

IDLE

现在,你可以使用 IDLE 开始你的开发。大部分的基本选项你可以在 IDLE 的文件菜单中找到。

我希望这篇指南解释了你在开始 Python 开发之前应该知道的东西。 尽管本指南主要是针对 Ubuntu 和 Fedora 的,但你仍然可以在所有基于 Ubuntu 和 Fedora 的发行版上参考它。如果你在 Python 环境设置方面遇到问题,请在下面的评论区告诉我。


via: https://www.debugpoint.com/setup-python-environment-ubuntu-fedora/

作者:Arindam 选题:lkxed 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

谷歌希望 RISC-V 成为 “一级” 安卓架构

谷歌在 RISC-V 峰会上说,希望 RISC-V 被看作安卓的 “一级平台”,这将使它与 Arm 并驾齐驱。在 RISC-V 上实现优化的安卓构建需要大量的工作,可能需要“几年”才能实现。AOSP 早在去年 9 月就开始发布了官方的 RISC-V 补丁,但目前你最多只能得到一个命令行。谷歌承诺,在 2023 年初提供初始的模拟器支持,并在第一季度为 Java 工作负载提供安卓运行时(ART)支持。一旦谷歌真的让安卓系统在 RISC-V 上运行起来,安卓应用生态系统的很大一部分都会随之而来。

消息来源:Ars Technica
老王点评:RISC-V 俨然已经成为“全村人”的希望。

智能电视机的隐藏获利方式

智能电视机比其它电子产品便宜的主要原因可能是它能从它收集的数据中获利。这些智能电视都能播放在线服务的内容,能安装各种应用,它们免费为我们服务,代价是对我们进行监控,然后将收集的数据出售给广告商。智能电视收集了用户的观影内容、时长等信息,然后打包出售。电视机厂商将这一模式称为购买后货币化,意味着它们可以以接近成本的价格出售硬件,通过分享客户的观影数据长期获利。

消息来源:The Atlantic
老王点评:就如一句老话,免费服务的代价就是你自己。

Debian 移除 Python 2

Debian 从 FTP 服务器上移除了 Python 2 软件包。Python 2 已经在 2020 年结束支持,Python 开发者在 2020 年 4 月发布了 Python 2.7 分支的最后一个版本:Python 2.7.18。这标志着大部分 Linux 发行版开始着手移除 Python 2 包。

消息来源:Debian
老王点评:想要淘汰 Python 2 可真不容易啊。

使用 C 扩展为 Python 提供特定功能。

在前一篇文章中,我介绍了 六个 Python 解释器。在大多数系统上,CPython 是默认的解释器,而且根据民意调查显示,它还是最流行的解释器。Cpython 的独有功能是使用扩展 API 用 C 语言编写 Python 模块。用 C 语言编写 Python 模块允许你将计算密集型代码转移到 C,同时保留 Python 的易用性。

在本文中,我将向你展示如何编写一个 C++ 扩展模块。使用 C++ 而不是 C,因为大多数编译器通常都能理解这两种语言。我必须提前说明缺点:以这种方式构建的 Python 模块不能移植到其他解释器中。它们只与 CPython 解释器配合工作。因此,如果你正在寻找一种可移植性更好的与 C 语言模块交互的方式,考虑下使用 ctypes 模块。

源代码

和往常一样,你可以在 GitHub 上找到相关的源代码。仓库中的 C++ 文件有以下用途:

  • my_py_module.cpp: Python 模块 MyModule 的定义
  • my_cpp_class.h: 一个头文件 - 只有一个暴露给 Python 的 C++ 类
  • my_class_py_type.h/cpp: Python 形式的 C++ 类
  • pydbg.cpp: 用于调试的单独应用程序

本文构建的 Python 模块不会有任何实际用途,但它是一个很好的示例。

构建模块

在查看源代码之前,你可以检查它是否能在你的系统上编译。我使用 CMake 来创建构建的配置信息,因此你的系统上必须安装 CMake。为了配置和构建这个模块,可以让 Python 去执行这个过程:

$ python3 setup.py build

或者手动执行:

$ cmake -B build
$ cmake --build build

之后,在 /build 子目录下你会有一个名为 MyModule. so 的文件。

定义扩展模块

首先,看一下 my_py_module.cpp 文件,尤其是 PyInit_MyModule 函数:

PyMODINIT_FUNC
PyInit_MyModule(void) {
    PyObject* module = PyModule_Create(&my_module);
    
    PyObject *myclass = PyType_FromSpec(&spec_myclass);
    if (myclass == NULL){
        return NULL;
    }
    Py_INCREF(myclass);
    
    if(PyModule_AddObject(module, "MyClass", myclass) < 0){
        Py_DECREF(myclass);
        Py_DECREF(module);
        return NULL;
    }
    return module;
}

这是本例中最重要的代码,因为它是 CPython 的入口点。一般来说,当一个 Python C 扩展被编译并作为共享对象二进制文件提供时,CPython 会在同名二进制文件中(<ModuleName>.so)搜索 PyInit_<ModuleName> 函数,并在试图导入时执行它。

无论是声明还是实例,所有 Python 类型都是 PyObject 的一个指针。在此函数的第一部分中,module 通过 PyModule_Create(...) 创建的。正如你在 module 详述(my_py_module,同名文件)中看到的,它没有任何特殊的功能。

之后,调用 PyType\_FromSpec 为自定义类型 MyClass 创建一个 Python 堆类型 定义。一个堆类型对应于一个 Python 类,然后将它赋值给 MyModule 模块。

注意,如果其中一个函数返回失败,则必须减少以前创建的复制对象的引用计数,以便解释器删除它们。

指定 Python 类型

MyClass 详述在 my\_class\_py\_type.h 中可以找到,它作为 PyType\_Spec 的一个实例:

static PyType_Spec spec_myclass = {
    "MyClass",                                  // name
    sizeof(MyClassObject) + sizeof(MyClass),    // basicsize
    0,                                          // itemsize
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   // flags
    MyClass_slots                               // slots
};

它定义了一些基本类型信息,它的大小包括 Python 表示的大小(MyClassObject)和普通 C++ 类的大小(MyClass)。MyClassObject 定义如下:

typedef struct {
    PyObject_HEAD
    int         m_value;
    MyClass*    m_myclass;
} MyClassObject;

Python 表示的话就是 PyObject 类型,由 PyObject_HEAD 宏和其他一些成员定义。成员 m_value 视为普通类成员,而成员 m_myclass 只能在 C++ 代码内部访问。

PyType\_Slot 定义了一些其他功能:

static PyType_Slot MyClass_slots[] = {
    {Py_tp_new,     (void*)MyClass_new},
    {Py_tp_init,    (void*)MyClass_init},
    {Py_tp_dealloc, (void*)MyClass_Dealloc},
    {Py_tp_members, MyClass_members},
    {Py_tp_methods, MyClass_methods},
    {0, 0} /* Sentinel */
};

在这里,设置了一些初始化和析构函数的跳转,还有普通的类方法和成员,还可以设置其他功能,如分配初始属性字典,但这是可选的。这些定义通常以一个哨兵结束,包含 NULL 值。

要完成类型详述,还包括下面的方法和成员表:

static PyMethodDef MyClass_methods[] = {
    {"addOne", (PyCFunction)MyClass_addOne, METH_NOARGS,  PyDoc_STR("Return an incrmented integer")},
    {NULL, NULL} /* Sentinel */
};

static struct PyMemberDef MyClass_members[] = {
    {"value", T_INT, offsetof(MyClassObject, m_value)},
    {NULL} /* Sentinel */
};

在方法表中,定义了 Python 方法 addOne,它指向相关的 C++ 函数 MyClass_addOne。它充当了一个包装器,它在 C++ 类中调用 addOne() 方法。

在成员表中,只有一个为演示目的而定义的成员。不幸的是,在 PyMemberDef 中使用的 offsetof 不允许添加 C++ 类型到 MyClassObject。如果你试图放置一些 C++ 类型的容器(如 std::optional),编译器会抱怨一些内存布局相关的警告。

初始化和析构

MyClass_new 方法只为 MyClassObject 提供一些初始值,并为其类型分配内存:

PyObject *MyClass_new(PyTypeObject *type, PyObject *args, PyObject *kwds){
    std::cout << "MtClass_new() called!" << std::endl;

    MyClassObject *self;
    self = (MyClassObject*) type->tp_alloc(type, 0);
    if(self != NULL){ // -> 分配成功
        // 赋初始值
        self->m_value   = 0;
        self->m_myclass = NULL; 
    }
    return (PyObject*) self;
}

实际的初始化发生在 MyClass_init 中,它对应于 Python 中的 \_\_init\_\_() 方法:

int MyClass_init(PyObject *self, PyObject *args, PyObject *kwds){
    
    ((MyClassObject *)self)->m_value = 123;
    
    MyClassObject* m = (MyClassObject*)self;
    m->m_myclass = (MyClass*)PyObject_Malloc(sizeof(MyClass));

    if(!m->m_myclass){
        PyErr_SetString(PyExc_RuntimeError, "Memory allocation failed");
        return -1;
    }

    try {
        new (m->m_myclass) MyClass();
    } catch (const std::exception& ex) {
        PyObject_Free(m->m_myclass);
        m->m_myclass = NULL;
        m->m_value   = 0;
        PyErr_SetString(PyExc_RuntimeError, ex.what());
        return -1;
    } catch(...) {
        PyObject_Free(m->m_myclass);
        m->m_myclass = NULL;
        m->m_value   = 0;
        PyErr_SetString(PyExc_RuntimeError, "Initialization failed");
        return -1;
    }

    return 0;
}

如果你想在初始化过程中传递参数,必须在此时调用 PyArg\_ParseTuple。简单起见,本例将忽略初始化过程中传递的所有参数。在函数的第一部分中,PyObject 指针(self)被强转为 MyClassObject 类型的指针,以便访问其他成员。此外,还分配了 C++ 类的内存,并执行了构造函数。

注意,为了防止内存泄漏,必须仔细执行异常处理和内存分配(还有释放)。当引用计数将为零时,MyClass_dealloc 函数负责释放所有相关的堆内存。在文档中有一个章节专门讲述关于 C 和 C++ 扩展的内存管理。

包装方法

从 Python 类中调用相关的 C++ 类方法很简单:

PyObject* MyClass_addOne(PyObject *self, PyObject *args){
    assert(self);

    MyClassObject* _self = reinterpret_cast<MyClassObject*>(self);
    unsigned long val = _self->m_myclass->addOne();
    return PyLong_FromUnsignedLong(val);
}

同样,PyObject 参数(self)被强转为 MyClassObject 类型以便访问 m_myclass,它指向 C++ 对应类实例的指针。有了这些信息,调用 addOne() 类方法,并且结果以 Python 整数对象 返回。

3 种方法调试

出于调试目的,在调试配置中编译 CPython 解释器是很有价值的。详细描述参阅 官方文档。只要下载了预安装的解释器的其他调试符号,就可以按照下面的步骤进行操作。

GNU 调试器

当然,老式的 GNU 调试器(GDB) 也可以派上用场。源码中包含了一个 gdbinit 文件,定义了一些选项和断点,另外还有一个 gdb.sh 脚本,它会创建一个调试构建并启动一个 GDB 会话:

Gnu 调试器(GDB)对于 Python C 和 C++ 扩展非常有用

GDB 使用脚本文件 main.py 调用 CPython 解释器,它允许你轻松定义你想要使用 Python 扩展模块执行的所有操作。

C++ 应用

另一种方法是将 CPython 解释器嵌入到一个单独的 C++ 应用程序中。可以在仓库的 pydbg.cpp 文件中找到:

int main(int argc, char *argv[], char *envp[])
{
    Py_SetProgramName(L"DbgPythonCppExtension");
    Py_Initialize();

    PyObject *pmodule = PyImport_ImportModule("MyModule");
    if (!pmodule) {
        PyErr_Print();
        std::cerr << "Failed to import module MyModule" << std::endl;
        return -1;
    }

    PyObject *myClassType = PyObject_GetAttrString(pmodule, "MyClass");
    if (!myClassType) {
        std::cerr << "Unable to get type MyClass from MyModule" << std::endl;
        return -1;
    }

    PyObject *myClassInstance = PyObject_CallObject(myClassType, NULL);

    if (!myClassInstance) {
        std::cerr << "Instantioation of MyClass failed" << std::endl;
        return -1;
    }

    Py_DecRef(myClassInstance); // invoke deallocation
    return 0;
}

使用 高级接口,可以导入扩展模块并对其执行操作。它允许你在本地 IDE 环境中进行调试,还能让你更好地控制传递或来自扩展模块的变量。

缺点是创建一个额外的应用程序的成本很高。

VSCode 和 VSCodium LLDB 扩展

使用像 CodeLLDB 这样的调试器扩展可能是最方便的调试选项。仓库包含了一些 VSCode/VSCodium 的配置文件,用于构建扩展,如 task.jsonCMake Tools 和调用调试器(launch.json)。这种方法结合了前面几种方法的优点:在图形 IDE 中调试,在 Python 脚本文件中定义操作,甚至在解释器提示符中动态定义操作。

VSCodium 有一个集成的调试器。

用 C++ 扩展 Python

Python 的所有功能也可以从 C 或 C++ 扩展中获得。虽然用 Python 写代码通常认为是一件容易的事情,但用 C 或 C++ 扩展 Python 代码是一件痛苦的事情。另一方面,虽然原生 Python 代码比 C++ 慢,但 C 或 C++ 扩展可以将计算密集型任务提升到原生机器码的速度。

你还必须考虑 ABI 的使用。稳定的 ABI 提供了一种方法来保持旧版本 CPython 的向后兼容性,如 文档 所述。

最后,你必须自己权衡利弊。如果你决定使用 C 语言来扩展 Python 中的一些功能,你已经看到了如何实现它。


via: https://opensource.com/article/22/11/extend-c-python

作者:Stephan Avenwedde 选题:lkxed 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我们列出了 2022 年适用于 Linux 和 Windows 的六个最佳 Python 代码编辑器。

如今,Python 无处不在,它可以说是现代版的 C 语言编程语言。从网站、应用程序、数据科学项目、人工智能到物联网设备,你可以发现 Python 无处不在。因此,作为这十年来流行的编程语言,了解 Python 的开发环境是很有必要的,开发人员用它创建应用程序,特别是如果你是刚刚开始学习 Python 编程,更需要了解 Python 开发环境。

许多 Python 开发环境都提供了可以满足你需求的功能和工具。其中有些环境对学习 Python 的初学者很有用,而另外一些用户则适用于重型 Python 开发和复杂的设置。在这里,在这篇文章中,我将谈一谈其中最好的几个,这将有助于你根据自己的需要和使用情况选择一个。

最好的 Python 编码编辑器

这个榜单上有以下几个编辑器:

  1. Visual Studio Code
  2. Eclipse
  3. PyCharm
  4. Spyder
  5. Sublime Text
  6. Thonny

1、Visual Studio Code

Visual Studio Code

尽管它是微软创造的,但 Visual Studio Code 是最好的代码编辑器之一。不仅是 Python,对于所有流行和趋势的编程语言都是。

它具有语法高亮、代码补完、调试、代码片段、内置 Git 等诸如此类的功能。对于新手来说,它有点复杂,但也只需几个小时就能学会。

然而,它是用 Electron 框架构建的,可能会感觉稍微慢一些。但在高端的开发硬件下这不是问题。它是一个自由开源的应用程序,适用于 Linux、macOS 和 Windows。

以下是适用于 Ubuntu、Fedora 和相关发行版的单个 deb 和 RPM 包:

下载 VS Code

你也可以为 Flatpak 设置你的系统,并从终端运行以下命令,在所有 Linux 发行版上安装它。

flatpak install flathub com.visualstudio.code

2、带有 PyDev 的 Eclipse

Eclipse 编辑器

Eclipse 是一个由 IBM 开发的自由开源的 IDE。这个完备的 IDE 可用于 Java 和 Android 开发。然而,它也支持许多其他编程语言,包括 Python。你可以将 Eclipse 与流行的 PyDev 插件一起使用,它可以将 Eclipse 转换成一个完整的 Python 开发环境。通过将 PyDev 集成在 Eclipse 中,你可以进行编译、代码分析、实时调试、交互式控制台访问,以及更多的功能。

优势:

  • 丰富的功能和完整的 Python 开发 IDE。

劣势:

  • 对系统性能有很大影响。
  • 针对高级用户。

安装和更多信息:

3、PyCharm 编辑器

PyCharm 编辑器

由 JetBrains 开发的 PyCharm 提供了智能代码补完、代码检查、即时错误高亮、快速修复、自动代码重构和丰富的导航功能。

PyCharm 开箱即用的大量工具包括:集成的调试器和测试运行器;Python 剖析器;内置终端;与主要版本控制系统和内置数据库工具的集成;借助远程解释器提供的远程开发能力;集成 SSH 终端;以及与 Docker 和 Vagrant 的集成。

除了 Python,PyCharm 还为各种 Python 网页开发框架、特定模板语言、JavaScript、CoffeeScript、TypeScript、HTML/CSS、AngularJS、Node.js 等提供了一流的支持。

PyCharm 有两个版本的安装程序:专业版和社区版。社区版是自由开源的。专业版不是免费的,因为它带有专业工具和广泛的支持。专业版有一个不到 10 美元的月度订阅版本,供个人使用。

然而,如果你是一个初学者,你可以从 PyCharm 免费的社区版开始。

它适用于科学和网页 Python 开发。具有 HTML、JS 和 SQL 支持。

优势:

  • 为专业人士提供先进的现代编辑功能,有助于快速开发。

劣势:

  • 大多数专业工具都在付费版本中提供(个人使用时每月约 8 至 10 美元)。

安装和其他信息:

4、Spyder 编辑器

Spyder Editor

Spyder 是一个强大的 Python 编辑器,是用 Python 编写的。它是为科学家、工程师和数据科学家所设计的。它将综合开发工具的高级编辑、分析、调试和剖析功能与科学软件包的数据探索、交互式执行、深度检查和漂亮的可视化功能独特地结合起来。

优势:

  • 轻量级和免费

劣势:

  • 你必须把它作为 Anaconda 软件包的一部分来下载。没有独立的安装程序。

安装和其他说明:

5、Sublime Text

Sublime Text

Sublime Text 是一个支持 Python 编程的复杂的代码编辑器。它是一个跨平台的工具,原生支持许多编程语言。你可以使用插件来扩展其特性和功能。Sublime Text 带有提高生产力的功能,如 “Goto anything”,可以同时对文件的多个部分进行修改。

优点:

  • 轻量级、免费、可用于 Windows、Mac 和 Linux。

缺点:

  • 它是免费评估的,但你必须购买一个许可证来进行高级使用。(LCTT 译注:但可以一直免费评估,而不限制时间,只是会时不时提醒)

其他信息和安装:

6、Thonny Python 编辑器

Thonny 编辑器

Thonny 是一个面向初学者的 Python IDE,使用起来很简单。它内置了最新的 Python(截至本文撰写时为 3.7+),所以你不需要在你的操作系统中单独安装 Python。用户界面毫不杂乱,对初学者来说没有任何干扰。Thonny 的其他一些显著特点包括:变量视图、简单调试器、单步调试和语法错误。

优点:

  • 轻量级、免费,可用于 Windows、Mac 和 Linux。
  • 非常适合 Python 的绝对初学者(甚至是编码的初学者)。

缺点:

  • 由于它是一个初学者的 IDE,所以只有基本的功能。

安装和其他信息:


有很多 Python 编辑器可用,这些是用于编码的六个最好的 Python 编辑器。你可以尝试其他值得注意的 Python 编辑器:VIM、IDLE(默认 Python 自带)、Cloud 9 和 Emacs。

?️ 你最喜欢哪个编辑器?请在下面的评论区告诉我们。


via: https://www.debugpoint.com/5-best-python-ide-code-editor/

作者:Arindam 选题:lkxed 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出