Python从入门到放弃——深入研究Print函数

深入浅出Print函数

第一个代码“Hello World”

在正常配置了PyCharm或者Thonny等编辑器之后,我们开始写第一个代码。正常的情况下学习一门编程语言,一般第一个代码都是输出Hello World。那么如何打印Hello World呢?

print("Hello World")

然后我们运行程序就可以看到交互窗中弹出了一行字:

Hello World

当然也可能有几种其他的情况,也就是代码写错了。下面我们来一一举例说明原因。

1.下面的报错,很有可能就是你的双引号不完整,你只有前双引,没有后双引导致的。

Traceback (most recent call last):
  File "<string>", line 1
    print("Hello world)
                      ^
SyntaxError: EOL while scanning string literal

2.下面的报错很有可能是print的拼写出现了错误导致的。

Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'prit' is not defined

3.下面的报错很有可能是因为括号或者双引号使用了中文输入法(全角符)导致的。

Traceback (most recent call last):
  File "<string>", line 1
    print("Hello world")
         ^
SyntaxError: invalid character in identifier

输出函数print()

现在我们学习一下输出函数print()。首先在学习一个函数前,我们要养成一个好的习惯,既然学了这个知识点,那我们就要把它绝大多数的知识点都了解一下,争取可以全都掌握。

def print(self, *args, sep=' ', end='\n', file=None, flush=False)

首先我们先忽略掉开头的def,这个我们暂时可以理解为定义print这个函数的功能的一个标志。然后print后面括号中的self,我们也优先忽略掉。

*args:这是一个接受参数的标志,他可以接收无数个参数。而我们也就自然而然可以联想到刚刚的"Hello World"就是一个参数。各个值之间分割方式,默认空格,可以自定义,例如

print("Hello", 1, 2, "World")

运行结果如下:

Hello 1 2 World

sep:这是一个表示相邻两个传入的参数之间,在输出的时候用什么隔开。我们不难看到,print在设计的时候默认了sep是一个空格,所以我们不妨去尝试一下后面的代码。

print("hello", "world", "!")
print("hello", "world", "!", sep="")

运行效果如下所示。

hello world !
helloworld!

运行之后我们看到的效果中,第一行的文本是hello world !,而第二行的文本是helloworld!。那么这样是不是就方便理解了。

end:这个参数是表示在print将所有参数都输出完毕之后,要自行输出的文本。在print设计的时候,默认end的参数是\n。\n又叫做转义字符串。它代表着换行的意思。那么我们如何去验证呢?可以尝试去编写一下下面的代码。

print("hello")
print("world")
print("hello", end="")
print("world")

运行效果如下:

hello
world
helloworld

那么在运行上面的代码的时候,我们可以看到第一组hello world是两行输出的,但是第二组则是在一行输出。这个就是我们的end参数的效果。

file:这个参数的意思是设置输出设备,以及要把print中的值打印到什么地方,默认输出到终端Terminal,同时也可以设置file= 文件储存对象,把内容存到该文件中,但是要先记得在代码中open文件哦!刚开始的宝子们可以先不学习这个参数。

MyFile = open(r'1.txt', 'w')  # 打开文件
print('Hello World', file=MyFile)  # 输出到文件中
MyFile.close()  # 关闭文件

运行前我们要确保已经存在了1.txt文件。然后在运行代码之后我们可以在文件中看到Hello World已经存储到txt中了。如下图所示。

flush:这个参数的意义主要是刷新终端,参数的默认值是False,也就是不刷新,当参数数值设定为True时,就可以开始刷新了。新手目前可以暂时不去care这个细节。
正常情况下print到MyFile中的内容会优先存储到内存中,当文件对象关闭时才把内容打印到1.txt中,当flush=True时它会立即把内容刷新存到1.txt中。

Print中的拼接

在print函数中其实还有很多其他的玩法,例如我们可以用逗号隔开我们的文字,其实也可以尝试使用加号。代码如下:

print("hello" + "world" + "三木地")

代码运行后可以看到效果如下:

helloworld三木地

不难看出使用+进行连接的时候,每一段字之间时不会自动产生空格的,所以我们需要手动写出空格。这样才可以实现之前的效果。

但是一定要注意,千万不要直接用加号连接一个数字,因为在Python中数字就是另外一种类型,Python不支持直接用数字和字符进行连接,会产生报错。报错大概效果如下所示。

Traceback (most recent call last):
  File "/Users/loadingcreate/Desktop/LearnPython/L1.py", line 22, in <module>
    print("hello" + "world" + 1)
          ~~~~~~~~~~~~~~~~~~^~~
TypeError: can only concatenate str (not "int") to str

Print中的数学计算

在print函数中其实还可以实现数学计算。我们可以直接看代码。

print(1+1)
print(1-10)
print(1*10)
print(3/2)

运行结果如下所示

2
-9
10
1.5

深入研究

在Python中,print 函数是用于输出文本或变量值到控制台的标准库函数。虽然它本身并不是Python语言的核心构造(比如if, for, while等控制结构),但它是Python标准库中的一个重要部分,且对于日常编程和调试非常有用。

当我们深入print函数的内部机制时,会发现其背后并没有像某些编程语言中那样的复杂构造原理,因为Python的设计哲学之一就是简单明了。但是,我们可以从几个方面来理解print函数是如何工作的:

  • 输出流(Output Stream):
    在Python中,print函数默认将数据发送到标准输出流(通常是终端或控制台)。这个流是一个文件对象,可以被重定向到文件或其他设备。
    你可以通过修改sys.stdout来更改print的输出目的地。
  • 字符串格式化:
    print函数可以接受多个参数,并将它们以空格分隔的方式连接起来。这些参数可以是字符串、数字或其他可转换为字符串的对象。
    Python 3.x中引入了f-string(格式化字符串字面量),使得字符串格式化更加简洁和强大。
  • 换行符:
    默认情况下,print函数在输出后会添加一个换行符(\n),使得下一次输出从新的一行开始。
    你可以通过end参数来自定义结束符,比如print(“Hello”, end=“”)将不会在新的一行开始输出。
  • 分隔符:
    当你使用多个参数调用print函数时,它们之间默认用空格分隔。
    你可以通过sep参数来自定义分隔符。
  • 文件对象:
    虽然print函数通常用于控制台输出,但它也可以接受一个文件对象作为file参数,将数据写入该文件而不是控制台。
  • flush参数:
    在某些情况下,你可能希望立即将输出发送到其目标(例如,在编写一个需要实时更新的GUI应用程序时)。flush参数控制输出是否立即被刷新到目标。
  • 内部实现:
    虽然Python的C实现细节对于普通用户来说是透明的,但print函数的内部实现大致上涉及到将参数转换为字符串(如果需要),然后写入到指定的输出流(默认为sys.stdout)。
  • 可定制性:
    由于print函数是基于Python语言的,因此它是可定制的。你可以通过覆盖内置的print函数(虽然通常不推荐这样做)或编写自己的包装函数来改变其行为。
  • 错误处理:
    虽然print函数本身不直接处理错误(比如I/O错误),但它依赖于底层的文件对象(如sys.stdout)来处理这些错误。如果输出流在写入时遇到问题,可能会引发异常。
  • 国际化(i18n)和本地化(l10n):
    print函数与Python的国际化和本地化功能相兼容,允许你根据用户的语言和文化习惯来格式化输出。
    虽然这些点涵盖了print函数的许多方面,但真正的“深层”知识可能涉及到Python解释器的内部实现和C语言的底层细节,这些对于大多数Python程序员来说是不必要的。理解上述概念应该足以让你在日常编程中有效地使用print函数。

异常情况

在Python中,print 函数通常不会直接引发异常,因为它主要用于输出信息到标准输出(通常是屏幕)。然而,在特定的情况下,如果print函数中使用的数据或格式化字符串有误,可能会间接导致异常,比如类型错误(TypeError)或值错误(ValueError)。

尽管print本身不常需要异常处理,但了解如何处理其可能引发的异常仍然是一个很好的练习。下面我们看看如何在尝试打印一个可能引发异常的对象时处理异常:

def safe_print(obj):  
    try:  
        # 尝试打印对象  
        print(obj)  
    except TypeError as e:  
        # 如果打印过程中发生了TypeError,捕获它并处理  
        print(f"在尝试打印时发生TypeError: {e}")  
    except ValueError as e:  
        # 如果打印过程中发生了ValueError,捕获它并处理  
        # 注意:标准的print函数很少会因为ValueError而失败,但自定义对象可能在__str__或__repr__中抛出  
        print(f"在尝试打印时发生ValueError: {e}")  
    except Exception as e:  
        # 捕获所有其他类型的异常  
        print(f"在尝试打印时发生未知异常: {e}")  
  
# 测试  
safe_print("Hello, world!")  # 正常打印  
safe_print(123)              # 正常打印  
  
# 尝试打印一个可能会引发TypeError的对象(例如,一个无法转换为字符串的对象)  
class BadObject:  
    def __str__(self):  
        # 故意引发TypeError  
        raise TypeError("BadObject can't be converted to string")  
  
safe_print(BadObject())  # 捕获并处理TypeError  
  
# 尝试打印一个可能会引发ValueError的对象(较少见,但可能通过自定义__str__或__repr__方法发生)  
class AnotherBadObject:  
    def __str__(self):  
        # 故意引发ValueError  
        raise ValueError("AnotherBadObject encountered a value error")  
  
safe_print(AnotherBadObject())  # 捕获并处理ValueError

在这个例子中,我们定义了一个safe_print函数,它尝试打印传入的对象。我们使用了try…except块来捕获并处理可能发生的TypeError、ValueError和所有其他类型的异常。虽然print函数本身在标准使用中很少引发异常,但这种方法展示了如何在调用可能引发异常的函数时处理异常。

结尾语

以上便是Python知识中Print函数的绝大多数内容了!如果文章中存在问题欢迎大家指出。谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第六十八回 东平府误陷九纹龙 宋公明义释双枪将-文心大模型ernie-speed免费使用方法

宋江和卢俊义抓阄儿&#xff0c;宋江打东平府&#xff0c;卢俊义打东昌府&#xff0c;谁先打下谁做梁山泊主。宋江带领林冲、花荣、刘唐等二十八人&#xff0c;卢俊义带领吴用、公孙胜、关胜等二十八人。 宋江等人到了东平府外安山镇&#xff0c;郁保四和王定六自告奋勇去下战…

io流 多线程

目录 一、io流 1.什么是io流 2.流的方向 i.输入流 ii.输出流 3.操作文件的类型 i.字节流 1.拷贝 ii.字符流 ​3.字符流输出流出数据 4.字节流和字符流的使用场景 5.练习 6.缓冲流 1.字节缓冲流拷贝文件 2.字符缓冲流特有的方法 1.方法 2.总结 7.转换流基本用法…

掌握MySQL基础命令:数据更新操作详细操作(数据的增删改)

MySQL数据修改是指使用SQL语句&#xff08;如UPDATE、INSERT、DELETE&#xff09;对数据库表中的数据进行更改、添加或删除的操作&#xff0c;常见的操作包括更新表中的记录、插入新记录以及删除现有记录 。 一、数据插入 1插入完整的数据记录 2插入非完整的数据记录 3插入多…

Vulkan 学习(1)---- Vulkan 基本概念和发展历史

目录 Vulkan及其演化史Vulkan 基本概念基本术语 Vulkan 的原理Vulkan应用程序Vulkan的编程模型硬件初始化窗口展示表面资源设置流水线设置描述符和描述符缓冲池基于SPIR-V的着色器流水线管理指令的记录队列的提交 Vulkan及其演化史 目前主流的图形渲染API有OpenGL、OpenGL ES、…

应急响应--网站(web)入侵篡改指南

免责声明:本文... 目录 被入侵常见现象: 首要任务&#xff1a; 分析思路&#xff1a; 演示案例: IIS&.NET-注入-基于时间配合日志分析 Apache&PHP-漏洞-基于漏洞配合日志分析 Tomcat&JSP-弱口令-基于后门配合日志分析 (推荐) Webshell 查杀-常规后门&…

ThinkPHP定时任务是怎样实现的?

接到一个需求&#xff1a;定时检查设备信息&#xff0c;2分钟没有心跳的机器&#xff0c;推送消息给相关人员&#xff0c;用thinkphp5框架&#xff0c;利用框架自带的任务功能与crontab配合来完成定时任务。 第一步&#xff1a;分析需求 先写获取设备信息&#xff0c;2分钟之…

Winform中使用HttpClient实现调用http的post接口并设置传参content-type为application/json示例

场景 Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类&#xff1a; Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类_winform解析json-CSDN博客 上面使用HttpClient调用post接口时使用的HttpCon…

卷积神经网络基础篇

文章目录 1、卷积层1.1、激活函数1.3、sigmoid1.4、Tanh1.5、ReLU1.6、Leaky ReLU1.7、误差计算 2、池化层3、全连接层4、CNN训练 参考链接1 参考链接2 1、卷积层 卷积层&#xff08;Convolutional layer&#xff09;&#xff0c;这一层就是卷积神经网络最重要的一个层次&…

spRAG框架学习小结

spRAG是什么 spRAG是一个针对非结构化数据的检索引擎。它特别擅长处理对密集文本的复杂查询&#xff0c;比如财务报告、法律文件和学术论文。有两种关键方法用于提高性能&#xff0c;超越了普通的RAG系统&#xff1a; 自动上下文&#xff08;AutoContext&#xff09;&#xff…

几款电脑端能够运行的AI大模型聊天客户端

Ollama Ollama 是一个用于在本地运行和管理大型语言模型的工具。它支持多种流行模型的下载和本地运行&#xff0c;包括 LLaMA-2、CodeLLaMA、Falcon 和 Mistral 。Ollama 提供了一个简单、轻量级和可扩展的解决方案&#xff0c;使得用户可以以最简单快速的方式在本地运行大模型…

中霖教育:二级建造师未注册还需要继续教育吗?

关键词&#xff1a;中霖教育怎么样&#xff0c;中霖教育口碑 如果通过了二级建造师考试但是没有注册&#xff0c;还用继续教育吗? 1. 未注册的二级建造师 二级建造师在其证书获取后三年内没有进行注册时&#xff0c;在申请初始注册之前必须完成规定的本专业继续教育课程。 …

计算样本之间的相似度

文章目录 前言一、距离度量1.1 欧几里得距离&#xff08;Euclidean Distance&#xff09;1.2 曼哈顿距离&#xff08;Manhattan Distance&#xff09;1.3 切比雪夫距离&#xff08;Chebyshev Distance&#xff09;1.4 闵可夫斯基距离&#xff08;Minkowski Distance&#xff09…

Java里的Arrary详解

DK 中提供了一个专门用于操作数组的工具类&#xff0c;即Arrays 类&#xff0c;位于java.util 包中。该类提供了一些列方法来操作数组&#xff0c;如排序、复制、比较、填充等&#xff0c;用户直接调用这些方法即可不需要自己编码实现&#xff0c;降低了开发难度。 java.util.…

时序预测 | Matlab实现TCN-Transformer的时间序列预测

时序预测 | Matlab实现TCN-Transformer的时间序列预测 目录 时序预测 | Matlab实现TCN-Transformer的时间序列预测效果一览基本介绍程序设计 效果一览 基本介绍 基于TCN-Transformer模型的时间序列预测&#xff0c;可以用于做光伏发电功率预测&#xff0c;风速预测&#xff0c;…

XSS平台的搭建

第一步&#xff1a;安装MySQL 数据库 因为xss平台涉及到使用mysql 数据库&#xff0c;在安装之前&#xff0c;先使用docker 安装mysql 数据库。 docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD123 -d -i -p 3309:3306 mysql:5.6 第二步&#xff1a;安装xssplatform…

机械键盘如何挑选

机械键盘的选择是一个关键的决策&#xff0c;因为它直接影响到我们每天的打字体验。在选择机械键盘时&#xff0c;有几个关键因素需要考虑。首先是键盘的键轴类型。常见的键轴类型包括蓝轴、红轴、茶轴和黑轴等。不同的键轴类型具有不同的触发力、触发点和声音。蓝轴通常具有明…

「多模态大模型」解读 | 突破单一文本模态局限

编者按&#xff1a;理想状况下&#xff0c;世界上的万事万物都能以文字的形式呈现&#xff0c;如此一来&#xff0c;我们似乎仅凭大语言模型&#xff08;LLMs&#xff09;就能完成所有任务。然而&#xff0c;理想很丰满&#xff0c;现实很骨感——数据形态远不止文字一种&#…

2024年06月CCF-GESP编程能力等级认证Python编程二级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证…

GESP C++一级真题

PDF图片1-7 点赞❤️关注&#x1f60d;收藏⭐️ 互粉必回&#x1f64f;&#x1f64f;&#x1f64f;

【Linux】打包命令——tar

打包和压缩 虽然打包和压缩都涉及将多个文件组合成单个实体&#xff0c;但它们之间存在重要差异。 打包和压缩的区别&#xff1a; 打包是将多个文件或目录组合在一起&#xff0c;但不对其进行压缩。这意味着打包后的文件大小可能与原始文件相同或更大。此外&#xff0c;打包…