diff --git a/Python-Language/01. 变量、运算符与数据类型.md b/Python-Language/01. 变量、运算符与数据类型.md index 16c1a05..2641a6c 100644 --- a/Python-Language/01. 变量、运算符与数据类型.md +++ b/Python-Language/01. 变量、运算符与数据类型.md @@ -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 ``` 逻辑运算符 操作符 | 名称 | 示例 :---:|:---:|:---: -`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 ``` 位运算符 操作符 | 名称 | 示例 :---:|:---:|:---: -`~` |按位取反|~4 -`&` |按位与 |4 & 5 +`~` |按位取反|`~4` +`&` |按位与 |`4 & 5` `|` |按位或 |`4 | 5` -`^` |按位异或|4 ^ 5 -`<<`|左移 |4 << 2,表示整数 4 按位左移 2 位 -`>>`|右移 |4 >> 2,表示整数 4 按位右移 2 位 - -按位非操作 ~ +`^` |按位异或|`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 ``` -按位与操作 & - -```python -1 & 1 = 1 -1 & 0 = 0 -0 & 1 = 0 -0 & 0 = 0 -``` - -按位或操作 | - -```python -1 | 1 = 1 -1 | 0 = 1 -0 | 1 = 1 -0 | 0 = 0 -``` - -按位异或操作 ^ - -```python -1 ^ 1 = 0 -1 ^ 0 = 1 -0 ^ 1 = 1 -0 ^ 0 = 0 -``` - - - - -按位左移操作 << - -【例子】`num << i` 将`num`的二进制表示向左移动`i`位所得的值。 -```c -00 00 10 11 -> 11 -11 << 3 ---- -01 01 10 00 -> 88 -``` - -按位右移操作 >> - -【例子】`num >> i` 将`num`的二进制表示向右移动`i`位所得的值。 -```c -00 00 10 11 -> 11 -11 >> 2 ---- -00 00 00 10 -> 2 -``` - 三元运算符 - - +【例子】 ```python x, y = 4, 5 if x < y: @@ -178,7 +147,7 @@ else: print(small) # 4 ``` -有了这个三元操作符的条件表达式,你可以使用一条语句来完成以下的条件判断和赋值操作。 +有了这个三元操作符的条件表达式,你可以使用一条语句来完成以上的条件判断和赋值操作。 【例子】 ```python @@ -190,14 +159,15 @@ print(small) # 4 其他运算符 操作符 | 名称 | 示例 :---:|:---:|:---: -`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等),那么is,is not 和 ==,!= 是完全等价的。 -- 假如对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。 +- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。 +- 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。 运算符的优先级 -- 一元运算符优于二元运算符。如正负号。 -- 先算术运算,后移位运算,最后位运算。例如 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 | 整型 ``| `-876, 10` +float | 浮点型``| `3.149, 11.11` +bool | 布尔型`` | `True, False` -整型`` +整型 -【例子】 +【例子】通过 `print()` 可看出 `a` 的值,以及类 (class) 是`int`。 ```python a = 1031 print(a, type(a)) - # 1031 ``` -通过 `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 ``` -浮点型`` +浮点型 【例子】 ```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 ``` -布尔型`` +布尔型 -布尔 (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