第1章:Python基础:标准输入和输出

8abaf6375dd9f88148e8fb3f4582833d.jpeg

点击上方“Python学习开发”,选择“加为星标”

第一时间关注Python技术干货!

Python 3 是一种动态、解释型的高级编程语言,以其简洁明了的语法和强大的功能而广受欢迎。上一节介绍 Python 3 中的变量和表达式,以及它们在 CPython 实现中的工作方式。本文将介绍Python 3最新版中的标准输入输出(I操作,并深入探讨这些操作在CPython实现中的代码细节。

基本输入输出操作

1. 打印输出

在Python中,print()函数是最常用的输出方法。它允许你将信息打印到控制台。例如:

print("Hello, World!")

此外,print()函数还支持格式化输出,可以使用str.format()方法或者f-string(Python 3.6+):

name = "cxa"
print("Hello, {}!".format(name))
# 或者使用f-string
print(f"Hello, {name}!")

2. 输入操作

输入操作通常通过input()函数实现,它会暂停程序执行,等待用户输入。例如:

user_input = input("Please enter your name: ")
print(f"Hello, {user_input}!")

3.第三方打印模块rich

rich是一个Python库,它提供了一种在命令行中创建丰富、多彩的文本输出的方式。rich的目标是使命令行输出更加生动和信息丰富,同时保持代码的简洁性和易读性。它支持多种输出格式,包括文本、Markdown、JSON等,并且可以很容易地与Python的标准print()函数结合使用。

基本使用
from rich import print

print("[bold[red]Hello, World![/red][/bold]")

这将输出"Hello, World!",其中"Hello, World!"将以红色粗体显示。

支持的样式

rich支持多种文本样式,包括加粗、斜体、下划线、高亮等:

from rich import print

# 粗体
print("[bold]This is bold text[/bold]")

# 斜体
print("[italic]This is italic text[/italic]")

# 下划线
print("[underline]This is underlined text[/underline]")

# 高亮
print("[highlight]This is highlighted text[/highlight]")
颜色输出

rich还支持多种颜色的文本输出:

from rich import print

# 多种颜色的输出
print("[red]This is red[/red] [green]and this is green[/green]")
表格输出

rich可以很容易地创建表格输出:

from rich import print
from rich.table import Table

table = Table(show_header=True, header_style="bold magenta")
table.add_column("Column 1", style="cyan")
table.add_column("Column 2", style="yellow")
table.add_column("Column 3", style="green")

table.add_row("Item 1", "Item 2", "Item 3")
table.add_row("Item 4", "Item 5", "Item 6")

print(table)
进度条

rich还提供了进度条功能,可以用于显示长时间运行的任务的进度:

from rich import print
from rich.progress import track

for i in track(range(100), description="Processing"):
    # 模拟任务
    time.sleep(0.1)

CPython中的实现方式

print 函数的实现

在CPython中,print函数的实现主要位于Modules/builtins.c文件中。print函数的实现会涉及到多个步骤,包括参数的处理、格式化字符串的创建以及最终的输出。以下是print函数实现的一个简化版本:

static PyObject *
builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
{
    static char *kwlist[] = {"sep", "end", "file", "flush", NULL};
    PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
    
    // 解析参数和关键字参数
    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOOO:print", kwlist,
                                     &sep, &end, &file, &flush)) {
        return NULL;
    }

    // ... 参数处理逻辑 ...

    // 获取标准输出
    if (file == NULL || file == Py_None) {
        file = PySys_GetObject("stdout");
        // ...
    }

    // ... 单个或多个对象的输出逻辑 ...

    // 刷新输出
    if (PyObject_CallMethod(file, "flush", "") == NULL) {
        return NULL;
    }

    Py_RETURN_NONE;
}

在这个简化的例子中,builtin_print函数是print函数的底层实现。它接收可变数量的参数,并且有默认的分隔符和结束符。然后,它会创建一个格式化的输出字符串,并使用write方法将其写入到指定的文件对象中,通常是sys.stdout

input 函数的实现

input函数的实现则位于Modules/_io/_iotextio.c文件中。input函数会从标准输入读取一行文本,并返回一个字符串对象。以下是input函数实现的一个简化版本:

static PyObject *
builtin_input(PyObject *self, PyObject *args, PyObject *kwds)
{
    PyObject *result = NULL, *getline_func = NULL;
    PyObject *stdin = PySys_GetObject("stdin");

    // ... 参数处理逻辑 ...

    getline_func = PyObject_GetAttrString(stdin, "readline");
    if (getline_func == NULL) {
        return NULL;
    }

    result = PyObject_CallObject(getline_func, NULL);
    Py_DECREF(getline_func);

    if (result == NULL) {
        return NULL;
    }

    // 去除末尾的换行符
    if (PyBytes_Check(result)) {
        // ... 处理字节数据 ...
    } else if (PyUnicode_Check(result)) {
        Py_ssize_t length;
        length = PyUnicode_GET_LENGTH(result);
        if (length == 0) {
            Py_CLEAR(result);
        } else {
            // 去除\n或者\r\n
            PyObject *rstripped = PyUnicode_Substring(result, 0, length-1);
            if (rstripped == NULL || PyUnicode_READY(rstripped) == -1) {
                return NULL;
            }
            Py_SETREF(result, rstripped);
        }
    }

    return result;
}

在这个例子中,builtin_input函数是input函数的底层实现。如果提供了提示字符串,它会先将其写入标准输出。然后,它会从标准输入读取一行文本,并返回该行文本(不包括结尾的换行符)。

推荐阅读

第1章:Python基础-Python的语法和基本概念

第1章:Python基础-Python 3 数据类型详解:数字、字符串、布尔值

第1章:Python基础:变量与表达式的深度解析

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值