![9baa6a3f72f105bc7cd6121fd53db704.png](https://i-blog.csdnimg.cn/blog_migrate/4b4032fd5b173792f5624d3e4df15db6.png)
前文从宏观的角度带你了解了 Python 的宇宙:
多多教Python:Python 基本功: 2. 学会调用库zhuanlan.zhihu.com![7d837f8494ab97e10554823b58f664af.png](https://i-blog.csdnimg.cn/blog_migrate/1053149204b57f4af7aace8bda29bb09.jpeg)
如果你浏览了一遍上文列举的一些非常流行的库,那你已经有一个大致的了解 Python 可以帮助你完成什么样的任务。而这篇文章,将反过来,从 Python 最细节的角度,也是你真正开始写 Python 最需要了解的知识:Python 自带的数据类型。
教程需求:
- Mac OS, Windows, Linux 都可以
- 安装了 Python 3.0 版本以上, Anaconda
鸭子就是数据类型,嗯
Python在数据处理能力上很强悍,而且还可以轻松的对接大数据平台 (Hadoop, Storm) 做大数据运算。幸运的是,不像其他编程语言 (C++, Java), Python 本身自带的数据种类不算多,而且非常容易调用,有的时候你甚至都不知道这个数据是哪一个类型,这个概念叫:
![9ac4e2b670f3226f7cbc0d52ed746a14.gif](https://i-blog.csdnimg.cn/blog_migrate/df7e3f912bf2cd3a038b8fc2cffa90a2.gif)
鸭子类型 (Duck Type):
当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。
重点是最后一句,当我们看到一段 Python 代码里的数据,或者变量,我们很有可能不知道,也不关心这个数据是什么类型的,但是我们关心的是这个数据的行为是什么样的。
整数 int, 浮点 float, 字符串 string
现在我们打开 Anaconda,可以跟着教程输入同样的代码:
In [1]:alibaba_stock_price = 120.5
In [2]:type(alibaba_stock_price)
Out[2]:float
In [3]:alibaba_shares = 300
In [4]:type(alibaba_shares)
Out[4]:int
In [5]:isinstance(alibaba_shares, int)
Out[5]:True
In [6]:alibaba_stock_value = alibaba_stock_price * alibaba_shares
alibaba_stock_value
Out[6]:36150.0
In [7]:type(alibaba_stock_value)
Out[7]:float
In [8]:alibaba_stock_value = int(alibaba_stock_value)
In [9]:type(alibaba_stock_value)
Out[9]:int
In [10]:alibaba_stock_value
Out[10]:36150
现在我们来一行一行分析:
- alibaba stock price 是 阿里巴巴股票价格,是一个 Python 变量,初始化到数值 120.5,这个时候我们不知道数据类型是什么。
- 我们调用了 Python 的 type() 方程,这是 Python 自带的可以查看数据类型的方程,你传入一个变量,他返回这个变量的类型。这里显示我们的阿里巴巴股票价格是 float。float 在 Python 里是一个比较通用的代表这个类型可以囊括任何带小数点的正负数。
- 我们定义了一个新的变量,alibaba shares, 指阿里巴巴的股票数量,这里给了300股。
- 因为这个数字不带小数点,所以当我们用 type() 查询的时候,Python 给出的是一个整数类 int。 如果一个数字后面没有小数点,你可以默认为是整数,除非这个数字是 300.0, 因为后面带了小数点,虽然小数点后面是0,Python 仍然默认是 float。
- isinstance() 是 Python 另外一个自带的查询数据类型的方程,但是这个方程可以帮你直接做比较,这里我传入了 阿里巴巴股票数量 和 整数类 (int),看是否这个变量是属于整数类,返回结果是 True, 也就是是的。
- 现在我们做一个数学乘法,把 阿里巴巴股票价格 和 阿里巴巴股票数量 相乘,得到的是持有的阿里巴巴股票价值。因为这里是 float 乘以 int, Python 会把返回的数据默认为 float 类型,我想大家应该能猜到,因为 float 囊括了 int。
- 这里确认了这是一个 float 类型。
- Python 允许你在部分数据类型之间强行转换,比如这里就是把 float 转换成 int ,我们得到了一个整数类型的 阿里巴巴股票价值。
- 确认了是整数类型。
- 最后我们看一下,这个整数类型的数字是 36150, 比 float 类型少了小数点和后面那个0,因为我们在转换数据类型的时候舍弃了数据的精准度,虽然在这里没有影响,但是在小数点后面不是0的时候就会产生误差,这也是在做数据比较经常出现的 BUG。
In
叫爸爸 x 300
11. 这里我们创建了一个新变量 alibaba ticker, 是阿里巴巴股票的英文字符,'BABA'。
12. 当我们用 阿里巴巴股票字符 乘以 阿里巴巴股票数量,会得到什么结果呢?
13. 结果就是 'BABA' 重复了 300遍,返回的是一个字符串 'BABA' x 300。
列表 List
列表是 Python 里非常常用的数据类型,非常灵活和有效,是一个可以存储不同种类数据的容器,并且支持 Indexing, Slicing, Mutating, Inferring, Broadcasting 这类的高级运作。因为这篇文章不是重点讲列表运算,我们就做一些简单的列表示范:
In [1]:price_list = [120.5, 130.0, 110.5, 140.5]
In [2]:ticker_list = ['BABA', 'AAPL', 'PDD']
In [3]:mixed_list = [120, 'BABA', 130.5]
In [4]:share_list = [5, 10, 20]
In [5]:value_list = [price*share for price,share in zip(price_list, share_list)]
In [6]:value_list
Out[7]:[600, 1300, 2200]
- 创建一个价格列表。
- 创建一个股票字符列表。
- 创建一个多种类列表。
- 创建一个股票数量列表。
- 创建一个股票价值列表,是价格列表的每一个元素 乘以 股票数量的每一个元素,这里用到了 推导 (Inferring) 和 元素打包方程 (Zip()),这两个概念在之后的教程会讲到。
- 输出股票价值列表。
元组 Tuple
元组也是 Python 里非常常用的数据类型,也是一个可以容纳不同种类的容器,虽然在功能性上和延展性上不如列表,但是创建简单,而且经常被用来容纳不同种类的数据 (列表往往会装载同样类型的数据)。
In [1]:stock_tuple = (100, 120.5, 'BABA')
In [2]:stock_tuple[0]
Out[2]:100
In [3]:stock_tuple[1]
Out[3]:120.5
In [4]:stock_tuple[2]
Out[4]:'BABA'
- 创建了一个股票的元组,第一个元素是股票数量,第二个元素是股票价格,第三个元素是股票的字符串。
- 获取元组的第一个元素,Python 里获取元素都是从0开始,并且基本上所有容器都支持索引 (运用 "[ ]" + 数字的组合 ),之后会讲到。
- 获取元组的第二个元素,价格。
- 获取元组的第三个元素,股票字符。
集合 Set
集合和列表很相似,一个很大的区别是集合里,就像数学定义的,元素都是独一无二的,所以我们可以尝试一下操作:
In [1]:price_list = [120.5, 130, 125, 120.5]
In [2]:price_set = set(price_list)
In [3]:price_set
Out[3]:{120.5, 125, 130}
- 创建一个价格列表,里面有一个重复的元素 120.5。
- 从列表种类转换成集合种类,运用了 set() 方程。
- 打印集合,显示去掉了其中一个重复元素
字典 Dict
字典是 Python 里非常重要的数据种类,也是大数据时代很常用的一个容器。我们知道字典是用来查询的,给你一个字,你去查询其含义,在 Python 中也是如此,只不过换了一种形式:
给你一个钥匙 Key, 去查询其值 Value
来看一段代码:
In [1]:price_dict = {'BABA': 120.5, 'PDD': 30}
In [2]:price_dict['BABA']
Out[2]:120.5
In [3]:price_dict['PDD']
Out[3]:30
In [4]:price_dict.keys()
Out[4]:dict_keys(['BABA', 'PDD'])
In [5]:price_dict.values()
Out[5]:dict_values([120.5, 30])
- 一个价格查询字典,里面有 ‘BABA’ 和 ‘PDD' (拼多多)的股票英文字符和股价,这里股票字符是钥匙,值是股价。
- 查询阿里巴巴股票价格。
- 查询拼多多股票价格。
- 查看字典里所有的钥匙。
- 查看字典里所有值。
小结
这篇文章介绍了 Python 自带的几种数据类型,你们会发现 Python 的数据类型虽然不算多,但是用法非常灵活,多样。这是符合 Pythonic 编程的一种思想,虽然数据本身是很严谨的,但是写 Python 的时候不需要给自己条条框框,语法放飞自我。同样的一行代码在其他的编程语言 C++/C, Java 可能需要十几行,这就是 Python 带来的强功能性+便捷性。
要详细的看每一个数据类型,这里是一个外部链接:
Python 3 数据教程www.runoob.com你可以打开 Anaconda 或者 PyCharm 很浅的玩玩试试手,在之后的教程中会挖掘出这些工具的潜能。