# 1.基本数据类型

> Python 中的变量不需要声明。每个变量在使用前都必须赋值，变量赋值以后该变量才会被创建。在 Python 中，变量就是变量，它没有类型，我们所说的"类型"是变量所指的对象

## 标准数据类型

* Number(数字)
* String(字符串)
* List(列表)
* Tuple(元组)
* Set(集合)
* Dictionary(字典)

Number，String，Tuple为不可变的数据类型

List，Dictionary，Set 为可变的数据类型

## Number

> Python3支持int，float，bool，complex（Python只有int，没有long；只有float，没有double）

> 在 Python2 中是没有布尔型的，它用数字 0 表示 False，用 1 表示 True。到 Python3 中，把 True 和 False 定义成关键字了，但它们的值还是 1 和 0，它们可以和数字相加。

```python

5 + 4  # 加法

4.3 - 2 # 减法

3 * 7  # 乘法

2 / 4  # 除法，得到一个浮点数
0.5

2 // 4 # 除法，得到一个整数
0

17 % 3 # 取余 
2

2 ** 5 # 乘方
32

```

> 在混合计算时，Python会把整型转换成为浮点数

## String

> Python中的字符串用单引号 ' 或双引号 " 括起来，同时使用反斜杠 \ 转义特殊字符。

> 反斜杠可以用来转义，使用r可以让反斜杠不发生转义

> Python中没有字符类型，所有的字符都是长度为1的字符串

> python的索引值有两个方向，索引值以 0 为开始值，-1 为从末尾的开始位置

> 字符串截取语法`变量[头下标:尾下标]`

```python
str = 'Runoob'
 
print (str)          # 输出字符串
print (str[0:-1])    # 输出第一个到倒数第二个的所有字符
print (str[0])       # 输出字符串第一个字符
print (str[2:5])     # 输出从第三个开始到第五个的字符
print (str[2:])      # 输出从第三个开始的后的所有字符
print (str * 2)      # 输出字符串两次
print (str + "TEST") # 连接字符串
```

### Tip

* 反斜杠可以用来转义，使用r可以让反斜杠不发生转义。`r"asb\nb"`,其中r会让\n的转义不发生作用
* 字符串可以用+运算符连接在一起，用\*运算符重复。
* Python中的字符串有两种索引方式，从左往右以0开始，从右往左以-1开始。
* Python中的字符串不能改变。与 C 字符串不同的是，Python 字符串不能被改变。向一个索引位置赋值，比如word\[0] = 'm'会导致错误

## List

```python

#!/usr/bin/python3
 
list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
tinylist = [123, 'runoob']
 
print (list)            # 输出完整列表
print (list[0])         # 输出列表第一个元素
print (list[1:3])       # 从第二个开始输出到第三个元素
print (list[2:])        # 输出从第三个元素开始的所有元素
print (tinylist * 2)    # 输出两次列表
print (list + tinylist) # 连接列表

```

### Tip

* List写在方括号之间，元素用逗号隔开。
* 和字符串一样，list可以被索引和切片。
* List可以使用+操作符进行拼接。
* List中的元素是可以改变的。

## Tuple

> 元组（tuple）与列表类似，不同之处在于元组的元素不能修改。元组写在小括号 () 里，元素之间用逗号隔开。元组中的元素类型也可以不相同

```python

tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2  )
tinytuple = (123, 'runoob')
 
print (tuple)             # 输出完整元组
print (tuple[0])          # 输出元组的第一个元素
print (tuple[1:3])        # 输出从第二个元素开始到第三个元素
print (tuple[2:])         # 输出从第三个元素开始的所有元素
print (tinytuple * 2)     # 输出两次元组
print (tuple + tinytuple) # 连接元组

```

> 其实，可以把字符串看作一种特殊的元组。

```python

tup1 = ()           # 空元组
tup2 = (20,)        # 只有一个元素的元组

```

### Tip

* 与字符串一样，元组的元素不能修改。
* 元组也可以被索引和切片，方法一样。
* 注意构造包含 0 或 1 个元素的元组的特殊语法规则。
* 元组也可以使用+操作符进行拼接。

## Set

> 集合（set）是由一个或数个形态各异的大小整体组成的，构成集合的事物或对象称作元素或是成员。

> 可以使用大括号 { } 或者 set() 函数创建集合，注意：创建一个空集合必须用 set() 而不是 { }，因为 { } 是用来创建一个空字典

```python
student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}

set1 = set() #  创建空集合
dic = {}     #  这是一个空的字典
 
print(student)   # 输出集合，重复的元素被自动去掉
 
# 成员测试
if 'Rose' in student :
    print('Rose 在集合中')
else :
    print('Rose 不在集合中')
 
 
# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')
 
print(a)
 
print(a - b)     # a 和 b 的差集
 
print(a | b)     # a 和 b 的并集
 
print(a & b)     # a 和 b 的交集
 
print(a ^ b)     # a 和 b 中不同时存在的元素

```

### Tip

* set中的元素必须为不可变的对象

## Dictionary

> 字典（dictionary）是Python中另一个非常有用的内置数据类型。

> 列表是有序的对象集合，字典是无序的对象集合。两者之间的区别在于：字典当中的元素是通过键来存取的，而不是通过偏移存取。

> 字典是一种映射类型，字典用 { } 标识，它是一个无序的 键(key) : 值(value) 的集合。

> 键(key)必须使用不可变类型。在同一个字典中，键(key)必须是唯一的。

```python

dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2]     = "2 - 菜鸟工具"
 
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
 
 
print (dict['one'])       # 输出键为 'one' 的值
print (dict[2])           # 输出键为 2 的值
print (tinydict)          # 输出完整的字典
print (tinydict.keys())   # 输出所有键
print (tinydict.values()) # 输出所有值
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gitbook.existorlive.cn/kai-fa-yu-yan-xue-xi/python/1.-ji-ben-shu-ju-lei-xing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
