没想到吧,Python print函数也能玩出花!

news2024/9/24 13:14:50

目录

1、基础打印技巧🚀

1.1 print()函数入门

1.2 格式化字符串输出

使用f-string

使用str.format()

2、高级格式化选项🎨

2.1 f-string动态插入变量

2.2 使用format方法

3、控制台颜色输出🌈

3.1 利用ANSI转义码

3.2 使用第三方库colorama

4、文件输出📝

4.1 将输出重定向到文件

4.2 使用with语句安全写入

5、多线程打印技巧🧵

5.1 线程安全的打印

5.2 使用队列管理输出

6、总结及最佳实践🌟



1、基础打印技巧🚀

1.1 print()函数入门

在Python中,print()是最基本的显示数据的方法。它能够将括号内的任意数量的参数转换成字符串并输出到标准输出设备(通常是屏幕)。print()函数在Python 3中作为内置函数存在,使用起来非常直观。

示例代码:

# 打印简单的文本
print("Hello, Universe!")

# 打印多个参数,参数间会自动添加空格
print("Hello,", "Universe!", "How are you?")

输出:

Hello, Universe!
Hello, Universe! How are you?

1.2 格式化字符串输出

当需要更复杂的输出格式时 ,print()函数可以结合字符串格式化功能使用。Python提供了几种不同的方式来格式化字符串 ,包括传统的%操作符以及较新的f-string(格式化字符串字面量)。

使用f-string

从Python 3.6开始 ,f-string成为了一种非常流行的字符串格式化方法。它允许直接在字符串中嵌入表达式 ,通过在字符串前加上fF即可启用这种格式化方式。

示例代码:

name = "Ada"
age = 25
print(f"{name} is {age} years old.")

输出:

Ada is 25 years old.
使用str.format()

str.format()是另一种常用的字符串格式化方法,它使用大括号{}作为占位符 ,并通过传递给format()方法的参数来填充这些占位符。

示例代码:

name = "Ada"
age = 25
print("{} is {} years old.".format(name, age))

输出:

Ada is 25 years old.

掌握print()函数的基本用法和进阶技巧,不仅能让代码更加整洁易读,还能提升代码的执行效率。在实际开发中灵活运用这些知识,将有助于创建出更加专业和用户友好的应用程序。

2、高级格式化选项🎨

2.1 f-string动态插入变量

f-string,即格式化字符串字面量,是从Python 3.6开始引入的一种强大特性,用于在字符串中直接插入变量或表达式的值。它不仅简化了代码 ,还提高了可读性。使用f-string,你只需在字符串前加上fF,然后在字符串内部使用花括号{}包含变量名或表达式即可。

示例代码:

first_name = "Ada"
last_name = "Lovelace"
year_of_birth = 1815

# 使用f-string插入变量
print(f"{first_name} {last_name} was born in {year_of_birth}.")

输出:

Ada Lovelace was born in 1815.

f-string还支持格式化选项,如指定宽度、精度等,使输出更加精确。

示例代码:

pi = 3.141592653589793

# 使用f-string格式化浮点数
print(f"The value of pi is approximately {pi:.2f}.")

输出:

The value of pi is approximately 3.14.

2.2 使用format方法

虽然f-string在许多场景下非常实用 ,但str.format()方法仍然是处理复杂字符串格式化的有力工具。str.format()方法使用大括号{}作为占位符,可以通过位置或关键字参数将变量插入字符串。

示例代码:

# 使用str.format()按位置插入变量
print("{} was born in {}.".format(first_name, year_of_birth))

# 使用str.format()按关键字插入变量
print("{name} was born in {year}.".format(name=first_name, year=year_of_birth))

输出:

Ada was born in 1815.
Ada was born in 1815.

str.format()方法同样支持各种格式化选项,如对齐方式、填充字符等,这使得它在处理复杂的字符串格式化需求时显得尤为强大。

3、控制台颜色输出🌈

3.1 利用ANSI转义码

在控制台上添加颜色可以使输出更加醒目和易于区分。大多数现代终端都支持ANSI转义码,这是一种用于改变文本颜色、背景色、文本样式(如加粗、斜体)的编码方案。在Python中 ,只需简单地将这些转义码插入到你的字符串中即可。

示例代码:

# ANSI转义码定义
RED = "\033[31m"
RESET = "\033[0m"

# 使用ANSI转义码设置文本颜色为红色
print(f"{RED}This text will appear in red.{RESET}")

输出:

\033[31mThis text will appear in red.\033[0m

请注意 ,实际输出在支持ANSI转义码的终端上会显示为红色文本。若在不支持的环境中运行,则会看到原始的转义码字符串。

3.2 使用第三方库colorama

虽然ANSI转义码在多数情况下有效,但在Windows操作系统上,尤其是在早期版本的命令行界面中 ,它们可能不会正常工作。这时,可以借助于colorama库 ,它能确保在各种平台上都能正确解析和显示ANSI转义码。

首先,需要安装colorama库,可以通过pip轻松完成:

pip install colorama

然后,在你的脚本中导入并初始化colorama,这样就能在所有平台(包括Windows)上使用ANSI转义码了。

示例代码:

from colorama import init, Fore, Back, Style
init(autoreset=True)

# 使用colorama设置文本颜色
print(Fore.RED + "This text will be red too!")

输出:

This text will be red too!

在支持彩色输出的终端中 ,上述代码将输出红色的文本。colorama还提供了更多选项,如背景色和文本样式 ,具体可参考其官方文档。

4、文件输出📝

4.1 将输出重定向到文件

在开发过程中,有时候需要将程序的输出保存到文件中以便日后分析或记录。Python中的print()函数默认是将内容输出到标准输出流(通常是屏幕),但我们可以轻松地将其重定向到文件。

示例代码:

# 打开一个文件用于写入
with open('output.txt', 'w') as file:
    # 将标准输出重定向到这个文件
    print("This line will be written to the file.", file=file)

输出:

由于输出直接写入到了文件中,这里不会有直接的控制台输出。检查output.txt文件 ,你将看到以下内容:

This line will be written to the file.

4.2 使用with语句安全写入

在处理文件时,使用with语句是一种最佳实践。它确保文件在操作完成后被正确关闭,即使在文件操作过程中发生了异常。这避免了资源泄漏和潜在的文件损坏。

示例代码:

data = [
    "First line of data.",
    "Second line of data.",
    "Third line of data."
]

# 使用with语句打开文件并写入多行数据
with open('data.txt', 'w') as file:
    for line in data:
        print(line, file=file)

再次,输出不会直接显示在控制台上 ,而是写入到data.txt文件中。打开该文件 ,你将看到:

First line of data.
Second line of data.
Third line of data.

利用print()函数的file参数 ,你可以轻松地将输出重定向到任何可写的文件对象。这对于日志记录、数据分析或任何需要将输出持久化至磁盘的场景都非常有用。通过掌握这些技巧 ,你能够在Python中更有效地管理和控制数据流 ,无论是在开发测试环境还是生产环境中。

5、多线程打印技巧🧵

5.1 线程安全的打印

在多线程环境下,多个线程可能同时尝试访问和修改共享资源 ,如控制台输出。如果不采取适当的同步措施,可能会导致输出混乱,例如线程A和B可能交错打印字符,使得最终的输出难以理解。为了防止这种情况发生,可以使用锁(Lock)机制来确保线程安全的打印。

示例代码:

import threading

# 创建一个锁对象
output_lock = threading.Lock()

def print_thread_safe(message):
    with output_lock:
        print(message)

# 创建并启动两个线程
thread1 = threading.Thread(target=print_thread_safe, args=("Thread 1 message",))
thread2 = threading.Thread(target=print_thread_safe, args=("Thread 2 message",))
thread1.start()
thread2.start()
thread1.join()
thread2.join()

由于输出依赖于线程调度,具体的顺序可能因运行环境而异,但每个线程的消息将完整地打印出来,不会出现交错现象。

5.2 使用队列管理输出

另一种处理多线程输出的方式是使用队列(Queue)。队列可以作为线程之间的通信通道,允许线程将要打印的信息放入队列,再由专门的“输出管理器”线程负责从队列中取出并打印这些信息。这种方法不仅保证了输出的线程安全性 ,还提供了一种更灵活的控制输出顺序和格式的方式。

示例代码:

import threading
import queue

# 创建一个队列
output_queue = queue.Queue()

def worker():
    while True:
        item = output_queue.get()
        if item is None:
            break
        print(item)
        output_queue.task_done()

# 启动输出管理器线程
output_thread = threading.Thread(target=worker)
output_thread.start()

# 其他线程可以将消息放入队列
output_queue.put("Message from Thread A")
output_queue.put("Message from Thread B")

# 等待所有任务完成
output_queue.join()

# 告诉输出管理器线程停止工作
output_queue.put(None)
output_thread.join()

这个例子中,worker函数从队列中取出消息并打印,直到接收到一个特殊值None才停止。其他线程则通过调用output_queue.put()方法将消息放入队列。通过这种方式,可以确保所有消息按顺序打印,而且即使在高并发的场景下也能保持输出的清晰和有序。

6、总结及最佳实践🌟

在探索Python打印艺术的旅程中,我们深入挖掘了从基础技巧到高级选项的全方位知识。掌握了print()函数的巧妙运用,从格式化字符串到控制台色彩管理 ,再到文件安全输出与多线程环境下的稳健实践。每一步都旨在提升输出的精准度与用户体验 ,让信息传达更加直观、有序。记住,无论是追求代码的美学还是功能的极致,灵活运用这些技巧,都将使你在项目开发中游刃有余,创造出既实用又富有魅力的应用成果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1915205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

结束休刊博客真·vlog | 顺便说一下500粉的事

啊,首先是信 ♥亲爱的读者们, 在这个充满数字韵律与代码奇迹的时空里,我满怀激动与感激的心情,提笔写下这封信,宣布一个令人振奋的消息——经过一段时间的休整与充电,我终于要结束这段宝贵的休刊时光&…

Errno2:No such file or directory,在当前文件确实没有该图片,怎么解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

测试和使用Pogo-DroneCAN CANUART串口扩展模块

关键词:Ardupilot,Pixhawk,DroneCAN,CANUART,Serial over DroneCAN,DroneCANUART,UAVCAN,MAVlink,Px4 Keywords:Ardupilot,Pixhawk,D…

c语言数据结构--图综合应用实验——校院导航

实验内容: 面向学校,构建一个校院导游软件。用无向图表示所在学校的校院景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中边表示景点之间的道路,存放路径距离等信息。该软件具有以…

dledger原理源码分析(四)-日志

简介 dledger是openmessaging的一个组件, raft算法实现,用于分布式日志,本系列分析dledger如何实现raft概念,以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的日志,包括写入,复制…

软件架构之架构风格

软件架构之架构风格 9.3 软件架构风格9.3.1 软件架构风格分类9.3.2 数据流风格9.3.3 调用/返回风格9.3.4 独立构件风格9.3.5 虚拟机风格9.3.6 仓库风格 9.4 层次系统架构风格9.4.1 二层及三层 C/S 架构风格9.4.2 B/S 架构风格9.4.3 MVC 架构风格9.4.4 MVP 架构风格 9.5 面向服务…

力扣 双指针基础

class Solution {public void moveZeroes(int[] nums) {int l 0;//慢指针但先走for (int r 0; r < nums.length; r) {//快指针&#xff0c;遍历次数if (nums[r] 0) continue;//l比r先到&#xff0c;在此处定住l&#xff0c;r继续移动int t nums[l];nums[l] nums[r];num…

上交发布MG-LLaVA,基于多粒度指令调整,横扫视觉大模型榜单

近年来多模态大语言模型(MLLMs)在视觉理解任务中取得了长足进步。然而&#xff0c;大多数模型仍局限于处理低分辨率图像&#xff0c;这限制了它们在需要详细视觉信息的任务中的表现。针对这一问题&#xff0c;上海交通大学的研究团队推出了MG-LLaVA&#xff08;Multi-Granulari…

Animate软件基础:重命名图层或文件夹

默认情况下&#xff0c;Animate 会按照创建顺序向新图层分配名称&#xff1a;图层 1、图层 2&#xff0c;依此类推。为了更好地反映图层的内容&#xff0c;可以对图层进行重命名。 如果需要对图层或图层文件夹进行重命名&#xff0c;请执行下列操作之一&#xff1a; 双击时间轴…

二叉平衡树(左单旋,右单旋,左右双旋、右左双旋)

一、AVL树&#xff08;二叉平衡树&#xff1a;高度平衡的二叉搜索树&#xff09; 0、二叉平衡树 左右子树高度差不超过1的二叉搜索树。 public class AVLTree{static class AVLTreeNode {public TreeNode left null; // 节点的左孩子public TreeNode right null; // 节点的…

MySQL之基本查询(上)-表的增删查改

目录 Create(创建) 案例建表 插入 单行数据 指定列插入 单行数据 全列插入 多行数据 全列插入 插入是否更新 插入时更新 替换 Retrieve(读取) 建表插入 select列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 where条件 比较运算符 逻辑运…

【UE5.1 角色练习】16-枪械射击——瞄准

目录 效果 步骤 一、瞄准时拉近摄像机位置 二、瞄准偏移 三、向指定方向射击 四、连发 效果 步骤 一、瞄准时拉近摄像机位置 打开角色蓝图&#xff0c;在事件图表中添加如下节点&#xff0c;当进入射击状态时设置目标臂长度为300&#xff0c;从而拉近视角。 但是这样切…

数学建模中常用的数据处理方法

常用的数据处理方法 本文参考 B站西电数模协会的讲解视频 &#xff0c;只作笔记提纲&#xff0c;想要详细学习具体内容请观看 up 的学习视频。国赛的 C 题一般数据量比较大。 这里介绍以下两种方法&#xff1a; 数据预处理方法 数据分析方法 数据预处理方法 1. 数据清洗 为…

【后端开发实习】用MongoDB实现仓库管理的出库入库实战

用MongoDB实现仓库管理的出库入库 MongoDB什么是MongoDBMongoDB安装以及开始运行配置启动以及mongoshmongodb的基础使用命令启动和使用MongoDB服务数据库操作集合操作文档操作 项目部署在数据库中创建一张商品信息表提供信息表的增删改查操作接口 MongoDB 什么是MongoDB Mong…

德语中含“Augen”的惯用语表达-柯桥小语种学习德语考级

在我们的德语学习过程中&#xff0c;除了词汇的记忆&#xff0c;另一项重要的记忆任务就是惯用语的背诵啦。要知道&#xff0c;德语中有大量的Redewendung&#xff0c;他们以其言简意赅的表达&#xff0c;在日常用语中备受青睐。上一期我们已经学习了部分含有“Hand”的惯用语&…

每日一题~abc356(对于一串连续数字 找规律)

添加链接描述 题意&#xff1a;对于给定的n,m 。计算0~n 每一个数和m & 之后&#xff0c;得到的数 的二进制中 1的个数的和。 一位一位的算。最多是60位。 我们只需要计算 在 1-n这些数上&#xff0c;有多少个数 第i位 为1. 因为是连续的自然数&#xff0c;每一位上1 的…

ARM学习(29)NXP 双coreMCU IMX1160学习----NorFlash 启动引脚选择

ARM学习&#xff08;28&#xff09;NXP 双coreMCU IMX1160学习----NorFlash 启动引脚选择 1、多种启动方式介绍 IMX1166 支持多组flexSPI 引脚启动&#xff0c;FlexSPI1以及FlexSPI2&#xff0c;通过boot cfg可以切换FlexSPI得实例。 每个实例又支持多组引脚&#xff0c;总共…

Let‘s Encrypt性价比最高的申请SSL证书

SSL/TLS证书作为确保网站数据传输安全性的重要手段&#xff0c;受到了广大网站运营者的青睐。然而&#xff0c;高昂的证书费用往往成为许多小型网站和个人博客的负担。 申请Lets Encrypt免费泛域名SSL证书步骤 1. 登录来此加密网站&#xff0c;输入域名&#xff0c;可以勾选泛…

食物链之带权并查集解法

直接看题&#xff1a;https://www.acwing.com/problem/content/description/242/ 下面就是代码的实现了&#xff0c;因为自己与自己肯定是同类我们初始化为0. 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int n,k; int fk,x,y; int fa[10001…

染色法判定二分图

什么是二分图&#xff1f; 二分图&#xff0c;也称作二部图&#xff0c;是图论中的一种特殊模型。在一个无向图G(V,E) 中&#xff0c;如果顶点集合 V 可以被分割成两个互不相交的子集 A 和 B&#xff0c;并且图中的每条边 (i,j) 关联的两个顶点 i 和 j 分别属于这两个不同的顶…