本文主要介绍Python的基本类型和变量,正式了解Python的语法特性,现在先介绍下Python中的标准输入输出。
标准输入输出
前文举过TwoSum问题的例子,但是没有讲到标准输入输出的处理,因为那部分leetcode平台帮我们处理了。但实际上标准输入输出是非常重要的,是我们编写任何代码都必须先了解的语法,这里以C#做对比,介绍Python的标注输入方法input和标准输出方法print。
![e8c426a370a80be5aa1ad0f10cbf32d8.png](https://i-blog.csdnimg.cn/blog_migrate/ede5efdee957016219a95c4d5a4f4279.png)
input方法在Python中的作用和Console.ReadLine一致,可以从电脑获得用户的输入数据,称之为标准输入。在Python 2中标注输入分为input和raw_input两个方法,其中input只能接受明确格式的输入,要么输入字符串要么数字,混合在一起会报错。这一点在Python 3中得到了改进,统一合并为input方法。因此从功能上,input和C#的标准输入功能一致,都允许用户输入任何内容,并以字符串的形式读取。
![e9cf8aaa9a068350c61e57254564a4f6.png](https://i-blog.csdnimg.cn/blog_migrate/d5b65db24bf6c3c79920a8d4e1c02f3e.png)
print方法作为Python的标准输出方法,可以将任何对象输出为字符串。但这里值得注意的是,Python并不支持字符串和不同值类型的直接相加,这会导致异常抛出。而C#支持此特性,如下:
![5d078b306dd16c402b4bd1e96ab7ffb6.png](https://i-blog.csdnimg.cn/blog_migrate/4165ffdde675e7759ea868443d57dae0.png)
![58199e51c271ad4388a25fcb296ef2d3.png](https://i-blog.csdnimg.cn/blog_migrate/519df221c8cb8dff9ab6eb71e5e67cca.png)
因此在Python中需要将其他类型先转换为字符串才可以直接字符串变量相加,如下:
![b908fb86479782fc0f8b03fe988d57cc.png](https://i-blog.csdnimg.cn/blog_migrate/9e5a07d5c2d603d9f637bfb95fe6d73b.png)
基本类型
基本类型是数据操作的起步,前面的内容已经出现过字符串和数值之类的操作。Python的基本类型主要分为整形(int),浮点数(float),复数(complex),字符串(string)和布尔值(bool).
- 整形(int)
Python的整形几乎没有长度限制,可以输入任意大小的数值。这取决于系统内存的限制,基本想要多大值就可以多大。这点和C#极为不一样,C#中即使是long,它的取值范围也都是有限的,最大也就是2^63 - 1。
![99e05780404d979850b81f88cb7ada4b.png](https://i-blog.csdnimg.cn/blog_migrate/183f86d737cc06f08d663ef5ae92628d.png)
![c01fa006c7723b4b16ea1894ef3c3fb5.png](https://i-blog.csdnimg.cn/blog_migrate/b75250a44a1b2a78ea7248914f5605ef.png)
此外,对于其他进制的数值表现形式Python也是不一样的,主要区别在于不同进制数值的前缀,如下:
![d6a6bb22d0404f8616d41170a50ef1e0.png](https://i-blog.csdnimg.cn/blog_migrate/e9d56d60b877e9bde1cc79dd9653512c.png)
![ebdcffb5c9a7f09aad6a4082a6265e9c.png](https://i-blog.csdnimg.cn/blog_migrate/2475e7d6c34733ed642f49200c881295.png)
- 浮点数(float)
Python中浮点数没有float和double之分,全部都是双精度浮点数,统一使用float表示。同时也支持使用科学计数法表示,如下:
![c8e6064df3fc811c821edbb0254db25b.png](https://i-blog.csdnimg.cn/blog_migrate/a082c9a2782a5f60612dacc4f1b2a288.png)
虽然Python对float的取值范围没有明确限制,但是大多数平台上会被实现为双精度64位浮点数,大部分情况下最大值大约为1.8 ⨉ 10^308,超过这个值就会被显示为inf.
![b6d5d36749f8b713771459e3609e9e4a.png](https://i-blog.csdnimg.cn/blog_migrate/63ef63539d634ae6509c9fff1f28733c.png)
- 复数(complex)
复数是由一个实数和一个虚数组合构成,表示为:real+imagej,其中 real 是实数部分,image是虚数部分。然而C#中没有复数的概念,只能自己封装构造。
![80e39b3d1b03204370bde88c974259b6.png](https://i-blog.csdnimg.cn/blog_migrate/426eee8fa5c1292bd87c5cf0d449c141.png)
老实讲,复数这块目前我还没实际使用到,对于其作用并没有太多的认知。
- 字符串(string)
字符串在Python中被表示为str,可以用单引号或者双引号包括一段内容来表示。大部分情况下单引号和双引号是没有去别的,但是当他们混用时,包括在字符串内的单引号或者双引号只会被当成普通符号。
![a7ed6c8afbe49f6b8cf79c90d202cb1f.png](https://i-blog.csdnimg.cn/blog_migrate/5342a379da30ef7b9cc064d6136e46fc.png)
转义符同样是受支持的,包括",n和t之类的常用转义,甚至还包括u表示任意Unicode字符。
![c2da4f8c921d8cf8b5b5f8b9502bccc6.png](https://i-blog.csdnimg.cn/blog_migrate/e577762c6dc61b22cfa5d007a7a889c5.png)
关于字符串的格式化,Python中的 str.format('{0}',arg) 和从 3.7开始支持的 '{0}'.format(arg) 语法和C#中的 string.Format("{0}",arg) 的写法非常像。
![be7fb966e63592392a622d9fc6acd821.png](https://i-blog.csdnimg.cn/blog_migrate/f0a1311774cbfe359dd554d10a0ec697.png)
![8afc21995b26098dcf96f29061a9eeef.png](https://i-blog.csdnimg.cn/blog_migrate/ebce98c0021032f30bbcd0dea4be769a.png)
- 布尔值(bool)
布尔值对于Python而言,和C#基本一致,只是Python中首字母大写而已,分别是True和False。对应的整形数字也都为1和0。
![5a61907cd877f037c576149b7a396ae2.png](https://i-blog.csdnimg.cn/blog_migrate/4155d6ec96d5df6c99dc44351cb46d5f.png)
此外还要提一下空值,在Python中表示为 None ,而在C#中为 null 。使用起来没有太大区别
关于类型转换,在Python中整形、浮点数、复数、字符串和布尔值分别对应的方法为 int(),float(),complex(),str(),和bool() ,他们默认都支持了从其他类型强制转换的操作,如下:
![0485a87b90166e46e5013919d99bc511.png](https://i-blog.csdnimg.cn/blog_migrate/c020f1c202f05f1e3304465cd2538833.png)
但是对于C#而言,默认进行强制转换时,是不可以直接从字符串转换为对应值的,必须使用例如int.Parse()等方法显式转换才行。
![16098e6f59ec825942c13867d932169a.png](https://i-blog.csdnimg.cn/blog_migrate/b168a0ff92a93f42ee7e1df466c34db9.png)
变量
变量可以是任意的数据类型,在代码中使用一个变量名表示。变量名必须是大小写英文、数字和下划线(_)的组合,且不能由数字开头。虽然中文汉字也支持,但是一般不用中文作为变量名。这一点对Python和C#都适用,最大的不同在Python声明变量不需要指定变量类型,直接赋值就可以了。
![35a14cdaa1fdbd78f6691891c8eade6b.png](https://i-blog.csdnimg.cn/blog_migrate/ab7c214518cc94df7b7c0235ee9ec64e.png)
![3b07bd4796b925ded6e75660bf0ca97a.png](https://i-blog.csdnimg.cn/blog_migrate/2f25919c27120febe7461c28d670cd00.png)
Python解释器在赋值的时候,会干两件事情(以a='ABC‘举例):
- 在内存里创建变量内容,这里是字符串'ABC’
- 在创建一个名为a的变量,并将它指向‘ABC'的地址
![a04a3fc5c47add8999de7100d6e02429.png](https://i-blog.csdnimg.cn/blog_migrate/03f9cbde8c7abb1ea06aef48ee18e233.png)
这点和C#中的引用类型分配内存是类似的,变量会指向引用内容。
总结
关于Python的基础类型就介绍到这里,实际上使用基础类型时还会牵扯到一些内置的函数,比如abs,max,min,hex,oct,chr等。这些方便我们类型转换或者运算的内置方法推荐大家有空扫一下。