Update 01. 变量、运算符与数据类型.md

This commit is contained in:
LSGOMYP
2020-07-16 14:53:33 +08:00
parent a4d6c5b0eb
commit e2c976521a

View File

@@ -1,5 +1,15 @@
[toc]
---
【关键词】print();
---
# 变量、运算符与数据类型
## 1. 注释
- 在 Python 中,`#` 表示注释,作用于整行。
@@ -44,19 +54,22 @@ print("hello china")
操作符 | 名称 | 示例
:---:|:---:|:---:
`+` | 加 | `1+1`
`-` | 减 | `2-1`
`*` | 乘 | `3*4`
`/` | 除 | `3/4`
`//`| 整除(地板除)| `3//4`
`%` | 取余| `3%4`
`**`| 幂 | `2**3`
`+` | 加 | `1 + 1`
`-` | 减 | `2 - 1`
`*` | 乘 | `3 * 4`
`/` | 除 | `3 / 4`
`//`| 整除(地板除)| `3 // 4`
`%` | 取余| `3 % 4`
`**`| 幂 | `2 ** 3`
【例子】
```python
print(3 % 2) # 1
print(11 / 3) # 3.6666666666666665
print(11 // 3) # 3
print(1 + 1) # 2
print(2 - 1) # 1
print(3 * 4) # 12
print(3 / 4) # 0.75
print(3 // 4) # 0
print(3 % 4) # 3
print(2 ** 3) # 8
```
@@ -65,109 +78,65 @@ print(2 ** 3) # 8
操作符 | 名称 | 示例
:---:|:---:|:---:
`>` |大于| `2>1`
`>=`|大于等于| `4>=2`
`<` |小于| `1>2`
`<=`|小于等于| `2<=5`
`==`|等于| `3==3`
`!=`|不等于| `3!=5`
`>` |大于| `2 > 1`
`>=`|大于等于| `2 >= 4`
`<` |小于| `1 < 2`
`<=`|小于等于| `5 <= 2`
`==`|等于| `3 == 4`
`!=`|不等于| `3 != 5`
【例子】
```python
print(1 > 3) # False
print(2 < 3) # True
print(1 == 1) # True
print(1 != 1) # False
print(2 > 1) # True
print(2 >= 4) # False
print(1 < 2) # True
print(5 <= 2) # False
print(3 == 4) # False
print(3 != 5) # True
```
<b>逻辑运算符</b>
操作符 | 名称 | 示例
:---:|:---:|:---:
`and`|与| `(2>1) and (3>7)`
`or` |或| `(1>3) or (2<9)`
`not`|非| `not(2>1)`
`and`|与| `(3 > 2) and (3 < 5)`
`or` |或| `(1 > 3) or (9 < 2)`
`not`|非| `not (2 > 1)`
【例子】
```python
print((3 > 2) and (3 < 5)) # True
print((1 > 3) and (2 < 1)) # False
print((1 > 3) or (3 < 5)) # True
print((1 > 3) or (9 < 2)) # False
print(not (2 > 1)) # False
```
<b>位运算符</b>
操作符 | 名称 | 示例
:---:|:---:|:---:
`~` |按位取反|~4
`&` |按位与 |4 & 5
`~` |按位取反|`~4`
`&` |按位与 |`4 & 5`
`|` |按位或 |`4 | 5`
`^` |按位异或|4 ^ 5
`<<`|左移 |4 << 2,表示整数 4 按位左移 2 位
`>>`|右移 |4 >> 2,表示整数 4 按位右移 2 位
<u>按位非操作 ~</u>
`^` |按位异或|`4 ^ 5`
`<<`|左移 |`4 << 2`
`>>`|右移 |`4 >> 2`
【例子】有关二进制的运算,参见“位运算”部分的讲解。
```python
~ 1 = 0
~ 0 = 1
print(bin(4)) # 0b100
print(bin(5)) # 0b101
print(bin(~4), ~4) # -0b101 -5
print(bin(4 & 5), 4 & 5) # 0b100 4
print(bin(4 | 5), 4 | 5) # 0b101 5
print(bin(4 ^ 5), 4 ^ 5) # 0b1 1
print(bin(4 << 2), 4 << 2) # 0b10000 16
print(bin(4 >> 2), 4 >> 2) # 0b1 1
```
<u>按位与操作 &</u>
```python
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
```
<u>按位或操作 |</u>
```python
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
```
<u>按位异或操作 ^</u>
```python
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
```
<u>按位左移操作 << </u>
【例子】`num << i``num`的二进制表示向左移动`i`位所得的值。
```c
00 00 10 11 -> 11
11 << 3
---
01 01 10 00 -> 88
```
<u>按位右移操作 >> </u>
【例子】`num >> i``num`的二进制表示向右移动`i`位所得的值。
```c
00 00 10 11 -> 11
11 >> 2
---
00 00 00 10 -> 2
```
<b>三元运算符</b>
【例子】
```python
x, y = 4, 5
if x < y:
@@ -178,7 +147,7 @@ else:
print(small) # 4
```
有了这个三元操作符的条件表达式,你可以使用一条语句来完成以的条件判断和赋值操作。
有了这个三元操作符的条件表达式,你可以使用一条语句来完成以的条件判断和赋值操作。
【例子】
```python
@@ -190,14 +159,15 @@ print(small) # 4
<b>其他运算符</b>
操作符 | 名称 | 示例
:---:|:---:|:---:
`is`|是|'hello' is 'hello'
`not is`|不是|3 is not 5
`in`|存在| 5 in [1, 2, 3, 4, 5]
`not in`|不存在|2 not in [1, 2, 3, 4, 5]
`in`|存在| `'A' in ['A', 'B', 'C']`
`not in`|不存在|`'h' not in ['A', 'B', 'C']`
`is`|是| `"hello" is "hello"`
`not is`|不是|`"hello" is not "hello"`
【例子】
```python
letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
letters = ['A', 'B', 'C']
if 'A' in letters:
print('A' + ' exists')
if 'h' not in letters:
@@ -207,46 +177,45 @@ if 'h' not in letters:
# h not exists
```
【例子】比较的两个变量均指向不可变类型
【例子】比较的两个变量均指向不可变类型
```python
a = "hello"
b = "hello"
print(a is b, a == b)
# True True
print(a is b, a == b) # True True
print(a is not b, a != b) # False False
```
【例子】比较的两个变量均指向可变类型
【例子】比较的两个变量均指向可变类型
```python
a = ["hello"]
b = ["hello"]
print(a is b, a == b)
# False True
print(a is b, a == b) # False True
print(a is not b, a != b) # True False
```
注意:
- is, is not 对比的是两个变量的内存地址
- ==, != 对比的是两个变量的值
即:
- 假如比较的两个变量指向的都是地址不可变的类型str等那么isis not 和 === 是完全等价的。
- 假如对比的两个变量指向的是地址可变的类型listdicttuple等则两者是有区别的。
- 比较的两个变量指向的都是地址不可变的类型str等那么isis not 和 === 是完全等价的。
- 对比的两个变量指向的是地址可变的类型listdicttuple等则两者是有区别的。
<b>运算符的优先级</b>
- 一元运算符优于二元运算符。如正负号
- 先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7
- 逻辑运算最后结合
- 一元运算符优于二元运算符。例如`3 ** -2`等价于`3 ** (-2)`
- 先算术运算,后移位运算,最后位运算。例如 `1 << 3 + 2 & 7`等价于 `1 << (3 + 2)) & 7`
- 逻辑运算最后结合。例如`3 < 4 and 4 < 5`等价于`(3 < 4) and (4 < 5)`
【例子】
```python
print(-3 ** 2) # -9
print(3 ** -2) # 0.1111111111111111
print(1 << 3 + 2 & 7) # 0
print(-3 * 2 + 5 / -2 - 4) # -12.5
print(3 < 4 and 4 < 5) # True
```
---
## 3. 变量和赋值
- 在使用变量之前,需要对其先赋值。
@@ -255,8 +224,6 @@ print(3 < 4 and 4 < 5) # True
【例子】
```python
teacher = "小马的程序人生"
print(teacher) # 小马的程序人生
teacher = "老马的程序人生"
print(teacher) # 老马的程序人生
```
@@ -273,35 +240,35 @@ print(third) # 5
```python
myTeacher = "老马的程序人生"
yourTeacher = "小马的程序人生"
ourTeacher = myTeacher + yourTeacher
print(ourTeacher) # 老马的程序人生小马的程序人生
ourTeacher = myTeacher + ',' + yourTeacher
print(ourTeacher) # 老马的程序人生,小马的程序人生
```
---
## 4. 数据类型与转换
类型 | 名称 | 示例
:---:|:---:|:---:
int | 整型 | -876, 10
float | 浮点型| 3.149, 11.11
bool | 布尔型 | True, False
int | 整型 `<class 'int'>`| `-876, 10`
float | 浮点型`<class 'float'>`| `3.149, 11.11`
bool | 布尔型`<class 'bool'>` | `True, False`
<b>整型`<class 'int'>`</b>
<b>整型</b>
【例子】
【例子】通过 `print()` 可看出 `a` 的值,以及类 (class) 是`int`
```python
a = 1031
print(a, type(a))
# 1031 <class 'int'>
```
通过 `print` 可看出 `a` 的值,以及类 (class) 是`int`
Python 里面万物皆对象object整型也不例外只要是对象就有相应的属性 attributes 和方法methods
【例子】
```python
b = dir(int)
print(b)
@@ -322,7 +289,7 @@ print(b)
# 'numerator', 'real', 'to_bytes']
```
对它们有个大概印象就可以了,具体怎么用,需要哪些参数 argument还需要查文档。看个`bit_length`的例子。
对它们有个大概印象就可以了,具体怎么用,需要哪些参数 argument还需要查文档。看个`bit_length()`的例子。
【例子】找到一个整数的二进制表示,再返回其长度。
@@ -333,7 +300,7 @@ print(a.bit_length()) # 11
```
<b>浮点型`<class 'float'>`</b>
<b>浮点型</b>
【例子】
```python
@@ -355,15 +322,19 @@ import decimal
from decimal import Decimal
```
Python 里面有很多用途广泛的包 (package),用什么你就引进 (import) 什么。包也是对象,也可以用上面提到的`dir(decimal)` 来看其属性和方法。比如 `getcontext()` 显示了 `Decimal` 对象的默认精度值是 28 位 (`prec=28`),展示如下:
Python 里面有很多用途广泛的包 (package),用什么你就引进 (import) 什么。包也是对象,也可以用上面提到的`dir(decimal)` 来看其属性和方法。
【例子】`getcontext()` 显示了 `Decimal` 对象的默认精度值是 28 位 (`prec=28`)。
```python
a = decimal.getcontext()
print(a)
# Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
# Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
# capitals=1, clamp=0, flags=[],
# traps=[InvalidOperation, DivisionByZero, Overflow])
```
让我们看看 1/3 的保留 28 位长什么样?
```python
b = Decimal(1) / Decimal(3)
@@ -372,7 +343,7 @@ print(b)
# 0.3333333333333333333333333333
```
保留 4 位呢?`getcontext().prec` 来调整精度。
【例子】使 1/3 保留 4 位`getcontext().prec` 来调整精度。
```python
decimal.getcontext().prec = 4
@@ -382,9 +353,9 @@ print(c)
# 0.3333
```
<b>布尔型`<class 'bool'>`</b>
<b>布尔型</b>
布尔 (boolean) 型变量只能取两个值,`True``False`。当把布尔变量用在数字运算中,用 `1``0` 代表 `True``False`
布尔 (boolean) 型变量只能取两个值,`True``False`。当把布尔变量用在数字运算中,用 `1``0` 代表 `True``False`
【例子】
```python
@@ -398,7 +369,7 @@ print(True * False) # 0
除了直接给变量赋值 `True``False`,还可以用 `bool(X)` 来创建变量,其中 `X` 可以是
- 基本类型:整型、浮点型、布尔型
- 容器类型:字符、元组、列表、字典和集合
- 容器类型:字符、元组、列表、字典和集合
【例子】`bool` 作用在基本类型变量:`X` 只要不是整型 `0`、浮点型 `0.0``bool(X)` 就是 `True`,其余就是 `False`
```python
@@ -485,7 +456,7 @@ print(str(10 + 10)) # 20
print(str(10.1 + 5.2)) # 15.3
```
---
## 5. print() 函数
```python