python中使用什么注释语句和运算_Python入门(一)

Python是一种通用编程语言,在科学计算和机器学习领域有着广泛的应用。

变量、运算符与数据类型

1、注释

-在Python中,‘#’表示注释,作用于整行

-''' '''或者""" """表示区间注释,在三引号之间的所有内容被注释

2、运算符

算术运算符

操作符 | 名称 | 示例

:---:|:---:|:---:

`+` | 加 | `1 + 1`

`-` | 减 | `2 - 1`

`*` | 乘 | `3 * 4`

`/` | 除 | `3 / 4`

`//`| 整除(地板除)| `3 // 4`

`%` | 取余| `3 % 4`

`**`| 幂 | `2 ** 3`

比较运算符

操作符 | 名称 | 示例

:---:|:---:|:---:

`>` |大于| `2 > 1`

`>=`|大于等于| `2 >= 4`

`

`<=`|小于等于| `5 <= 2`

`==`|等于| `3 == 4`

`!=`|不等于| `3 != 5`

逻辑运算符

操作符 | 名称 | 示例

:---:|:---:|:---:

`and`|与| `(3 > 2) and (3 < 5)`

`or` |或| `(1 > 3) or (9 < 2)`

`not`|非| `not (2 > 1)`

位运算符

操作符 | 名称 | 示例

:---:|:---:|:---:

`~` |按位取反|`~4`

`&` |按位与 |`4 & 5`

`|` |按位或 |`4 | 5`

`^` |按位异或|`4 ^ 5`

`<

`>>`|右移 |`4 >> 2`

其他运算符

操作符 | 名称 | 示例

:---:|:---:|:---:

`in`|存在| `'A' in ['A', 'B', 'C']`

`not in`|不存在|`'h' not in ['A', 'B', 'C']`

`is`|是| `"hello" is "hello"`

`not is`|不是|`"hello" is not "hello"`

注意:

- is, is not 对比的是两个变量的内存地址

- ==, != 对比的是两个变量的值

- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。

- 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。

运算符的优先级

- 一元运算符优于二元运算符。例如`3 ** -2`等价于`3 ** (-2)`。

- 先算术运算,后移位运算,最后位运算。例如 `1 << 3 + 2 & 7`等价于 `(1 << (3 + 2)) & 7`。

- 逻辑运算最后结合。例如`3 < 4 and 4 < 5`等价于`(3 < 4) and (4 < 5)`。

3、变量与赋值

-在使用变量之前,需要先对其赋值

-变量名可以包括字母、数字、下划线、但变量名不能以数字开头

-Python变量名是大小写敏感的,foo != Foo

4、数据类型与转换

类型 | 名称 | 示例

:---:|:---:|:---:

int | 整型 ``| `-876, 10`

float | 浮点型``| `3.149, 11.11`

bool | 布尔型`` | `True, False`

有时候我们想保留浮点型的小数点后n位,可以用decimal包里的Decimal对象和getcontext()来实现(Python里有很多包可以使用,用什么就引进(import)什么,包也是对象,可以通过dir(decimal)来看其属性和方法)

import decimal

from decimal import Decimal

a = decimal.getcontext()

print(a)

布尔型:布尔(boolean)型变量只能取两个值,True和False。当把布尔型变量用在数字运算中,用1和0代表True和False。

print(True + True)# 2

print(True + False)# 1

print(True * False)# 0

除了直接给变量赋值,True和False,还可以用bool(x)来创建变量,其中x可以是

- 基本类型:整型、浮点型、布尔型

- 容器类型:字符串、元组、列表、字典和集合

确定`bool(X)` 的值是 `True` 还是 `False`,就看 `X` 是不是空,空的话就是 `False`,不空的话就是 `True`。

- 对于数值变量,`0`, `0.0` 都可认为是空的。

- 对于容器变量,里面没元素就是空的。

获取类型信息

- 获取类型信息 `type(object)`

- `type()` :不会认为子类是一种父类类型,不考虑继承关系。

- `isinstance()` :会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 `isinstance()`。

类型转换

- 转换为整型 `int(x, base=10)`

- 转换为字符串 `str(object='')`

- 转换为浮点型 `float(x)`

5、print()函数

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

- 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按`str()`方式进行转换为字符串输出;

- 关键字参数`sep`是实现分隔符,比如多个参数输出时想要输出中间的分隔字符;

- 关键字参数`end`是输出结束时的字符,默认是换行符`\n`;

- 关键字参数`file`是定义流输出的文件,可以是标准的系统输出`sys.stdout`,也可以重定义为别的文件;

- 关键字参数`flush`是立即把内容输出到流文件,不作缓存。

print每次输出结束都用end设置的参数&结尾,并没有默认换行

item与‘another string’两个值之间用sep设置的参数&分割,由于end参数没有设置,因此默认是输出解释后换行,即end参数的默认值为\n。

位运算

1、原码、反码和补码

二进制与三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。

原码:就是其二进制表示(要注意:有一位符号位)

反码:正数的反码就是原码。负数的反码是符号位不变,其余位取反(对应正数按位取反)

补码:正数的补码就是原码,负数的补码是反码+1

符号位:最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算

2、按位运算

按位非操作

'''

~1 = 0

~0 = 1

'''

`~` 把`num`的补码中的 0 和 1 全部取反(0 变为 1,1 变为 0)有符号整数的符号位在 `~` 运算中同样会取反。

```python

00 00 01 01 -> 5

~

---

11 11 10 10 -> -6

11 11 10 11 -> -5

~

---

00 00 01 00 -> 4

```

按位与操作&

```python

1 & 1 = 1

1 & 0 = 0

0 & 1 = 0

0 & 0 = 0

```

只有两个对应位都为1时才为1

按位或操作 |

```python

1 | 1 = 1

1 | 0 = 1

0 | 1 = 1

0 | 0 = 0

```

只要两个对应位中有一个 1 时就为 1

```python

00 00 01 01 -> 5

|

00 00 01 10 -> 6

---

00 00 01 11 -> 7

```

按位异或操作 ^

```python

1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0

```

只有两个对应位不同时才为 1

```python

00 00 01 01 -> 5

^

00 00 01 10 -> 6

---

00 00 00 11 -> 3

```

异或操作的性质:满足交换律和结合律

```python

A: 00 00 11 00

B: 00 00 01 11

A^B: 00 00 10 11

B^A: 00 00 10 11

A^A: 00 00 00 00

A^0: 00 00 11 00

A^B^A: = A^A^B = B = 00 00 01 11

```

- 按位左移操作 <<

`num << i` 将`num`的二进制表示向左移动`i`位所得的值。

```python

00 00 10 11 -> 11

11 << 3

---

01 01 10 00 -> 88

```

- 按位右移操作 >>

`num >> i` 将`num`的二进制表示向右移动`i`位所得的值。

```python

00 00 10 11 -> 11

11 >> 2

---

00 00 00 10 -> 2

```

3、利用位运算实现快速计算

通过 `<>` 快速计算2的倍数问题。

```python

n << 1 -> 计算 n*2

n >> 1 -> 计算 n/2,负奇数的运算不可用

n << m -> 计算 n*(2^m),即乘以 2 的 m 次方

n >> m -> 计算 n/(2^m),即除以 2 的 m 次方

1 << n -> 2^n

```

通过 `^` 快速交换两个整数。

通过 `^` 快速交换两个整数。

```python

a ^= b

b ^= a

a ^= b

```

通过 `a & (-a)` 快速获取`a`的最后为 1 位置的整数。

```python

00 00 01 01 -> 5

&

11 11 10 11 -> -5

---

00 00 00 01 -> 1

00 00 11 10 -> 14

&

11 11 00 10 -> -14

---

00 00 00 10 -> 2

```

4、利用位运算实现整数集合

一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)。

比如集合 `{1, 3, 4, 8}`,可以表示成 `01 00 01 10 10` 而对应的位运算也就可以看作是对集合进行的操作。

元素与集合的操作:

```python

a | (1< 把 i 插入到集合中

a & ~(1< 把 i 从集合中删除

a & (1< 判断 i 是否属于该集合(零不属于,非零属于)

```

集合之间的操作:

```python

a 补 -> ~a

a 交 b -> a & b

a 并 b -> a | b

a 差 b -> a & (~b)

```

注意:整数在内存中是以补码的形式存在的,输出自然也是按照补码输出。

Python中bin一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号,老坑了。

Python中的整型是补码形式存储的

Python中整型是不限制长度的不会超范围溢出的。

因此为了获得负数(十进制表示)的补码,需要手动将其和十六进制数0xffffffff进行按位与操作,再交给bin()进行输出,得到的才是负数的补码表示。

条件语句

1、if语句

```python

if expression:

expr_true_suite

```

- if 语句的 `expr_true_suite` 代码块只有当条件表达式 `expression` 结果为真时才执行,否则将继续执行紧跟在该代码块后面的语句。

- 单个 if 语句中的 `expression` 条件表达式可以通过布尔操作符 `and`,`or`和`not` 实现多重条件判断。

2、if-else语句

```python

if expression:

expr_true_suite

else:

expr_false_suite

```

- Python 提供与 if 搭配使用的 else,如果 if 语句的条件表达式结果布尔值为假,那么程序将执行 else 语句后的代码。

if语句支持嵌套,即在一个if语句中可以嵌入另一个if语句,从而构成不同层次的选择结构。

3、if-elis-else语句

```python

if expression1:

expr1_true_suite

elif expression2:

expr2_true_suite

.

.

elif expressionN:

exprN_true_suite

else:

expr_false_suite

```

- elif 语句即为 else if,用来检查多个表达式是否为真,并在为真时执行特定代码块中的代码。

4、assert关键词

assert这个关键词我们称其为‘断言’,当这个关键词后边的条件为False时,程序自动崩溃并抛出AssertionError的异常

循环语句

1、while循环

`while`语句最基本的形式包括一个位于顶部的布尔表达式,一个或多个属于`while`代码块的缩进语句。

```python

while 布尔表达式:

代码块

```

`while`循环的代码块会一直循环执行,直到布尔表达式的值为布尔假。

如果布尔表达式不带有`、==、!=、in、not in`等运算符,仅仅给出数值之类的条件,也是可以的。当`while`后写入一个非零整数时,视为真值,执行循环体;写入`0`时,视为假值,不执行循环体。也可以写入`str、list`或任何序列,长度非零则视为真值,执行循环体;否则视为假值,不执行循环体。

2、while - else 循环

```python

while 布尔表达式:

代码块

else:

代码块

```

当`while`循环正常执行完的情况下,执行`else`输出,如果`while`循环中执行了跳出循环的语句,比如 `break`,将不执行`else`代码块的内容。

3、for循环

`for`循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如`str、list、tuple`等,也可以遍历任何可迭代对象,如`dict`。

```python

for 迭代变量 in 可迭代对象:

代码块

```

每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。

4、for - else 循环

```python

for 迭代变量 in 可迭代对象:

代码块

else:

代码块

```

当`for`循环正常执行完的情况下,执行`else`输出,如果`for`循环中执行了跳出循环的语句,比如 `break`,将不执行`else`代码块的内容,与`while - else`语句一样。

5、range()函数

```python

range([start,] stop[, step=1])

```

- 这个BIF(Built-in functions)有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。

- `step=1` 表示第三个参数的默认值是1。

- `range` 这个BIF的作用是生成一个从`start`参数的值开始到`stop`参数的值结束的数字序列,该序列包含`start`的值但不包含`stop`的值。

6、enumerate()函数

```python

enumerate(sequence, [start=0])

```

- sequence:一个序列、迭代器或其他支持迭代对象。

- start:下标起始位置。

- 返回 enumerate(枚举) 对象

`enumerate()`与 for 循环的结合使用。

```python

for i, a in enumerate(A)

do something with a

```

用 `enumerate(A)` 不仅返回了 `A` 中的元素,还顺便给该元素一个索引值 (默认从 0 开始)。此外,用 `enumerate(A, j)` 还可以确定索引起始值为 `j`。

7、break语句

break语句可以跳出当前所在层的循环

8、continue语句

continue终止本轮循环并开始下一轮循环

9、pass语句

`pass` 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 `pass` 语句就是用来解决这些问题的。

【例子】

```python

def a_func():

# SyntaxError: unexpected EOF while parsing

```

【例子】

```python

def a_func():

pass

```

`pass`是空语句,不做任何操作,只起到占位的作用,其作用是为了保持程序结构的完整性。尽管`pass`语句不做任何操作,但如果暂时不确定要在一个位置放上什么样的代码,可以先放置一个`pass`语句,让代码可以正常运行。

10、推导式

**列表推导式**

```python

[ expr for value in collection [if condition] ]

```

x = [-4, -2, 0, 2, 4]

y = [a * 2 for a in x]

print(y)

# [-8, -4, 0, 4, 8]

x = [(i, i ** 2) for i in range(6)]

print(x)

# [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

**元组推导式**

```python

( expr for value in collection [if condition] )

```

a = (x for x in range(10))

print(a)

# at 0x0000025BE511CC48>

print(tuple(a))

# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

**字典推导式**

```python

{ key_expr: value_expr for value in collection [if condition] }

```

b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}

print(b)

# {0: True, 3: False, 6: True, 9: False}

**集合推导式**

```

{ expr for value in collection [if condition] }

```

c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}

print(c)

# {1, 2, 3, 4, 5, 6}

**其它**

- `next(iterator[, default])` Return the next item from the iterator. If default is given and the iterator is exhausted, it is returned instead of raising StopIteration.

e = (i for i in range(10))

print(e)

# at 0x0000007A0B8D01B0>

print(next(e)) # 0

print(next(e)) # 1

for each in e:

print(each, end=' ')

# 2 3 4 5 6 7 8 9

异常处理

异常就是运行期检测到的错误。计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序的正常运行。

1. Python 标准异常总结

- BaseException:所有异常的 **基类**

- Exception:常规异常的 **基类**

- StandardError:所有的内建标准异常的基类

- ArithmeticError:所有数值计算异常的基类

- FloatingPointError:浮点计算异常

- OverflowError:数值运算超出最大限制

- ZeroDivisionError:除数为零

- AssertionError:断言语句(assert)失败

- AttributeError:尝试访问未知的对象属性

- EOFError:没有内建输入,到达EOF标记

- EnvironmentError:操作系统异常的基类

- IOError:输入/输出操作失败

- OSError:操作系统产生的异常(例如打开一个不存在的文件)

- WindowsError:系统调用失败

- ImportError:导入模块失败的时候

- KeyboardInterrupt:用户中断执行

- LookupError:无效数据查询的基类

- IndexError:索引超出序列的范围

- KeyError:字典中查找一个不存在的关键字

- MemoryError:内存溢出(可通过删除对象释放内存)

- NameError:尝试访问一个不存在的变量

- UnboundLocalError:访问未初始化的本地变量

- ReferenceError:弱引用试图访问已经垃圾回收了的对象

- RuntimeError:一般的运行时异常

- NotImplementedError:尚未实现的方法

- SyntaxError:语法错误导致的异常

- IndentationError:缩进错误导致的异常

- TabError:Tab和空格混用

- SystemError:一般的解释器系统异常

- TypeError:不同类型间的无效操作

- ValueError:传入无效的参数

- UnicodeError:Unicode相关的异常

- UnicodeDecodeError:Unicode解码时的异常

- UnicodeEncodeError:Unicode编码错误导致的异常

- UnicodeTranslateError:Unicode转换错误导致的异常

2、Python标准警告总结

- Warning:警告的基类

- DeprecationWarning:关于被弃用的特征的警告

- FutureWarning:关于构造将来语义会有改变的警告

- UserWarning:用户代码生成的警告

- PendingDeprecationWarning:关于特性将会被废弃的警告

- RuntimeWarning:可疑的运行时行为(runtime behavior)的警告

- SyntaxWarning:可疑语法的警告

- ImportWarning:用于在导入模块过程中触发的警告

- UnicodeWarning:与Unicode相关的警告

- BytesWarning:与字节或字节码相关的警告

- ResourceWarning:与资源使用相关的警告

3、try - except语句

```python

try:

检测范围

except Exception[as reason]:

出现异常后的处理代码

```

try 语句按照如下方式工作:

- 首先,执行`try`子句(在关键字`try`和关键字`except`之间的语句)

- 如果没有异常发生,忽略`except`子句,`try`子句执行后结束。

- 如果在执行`try`子句的过程中发生了异常,那么`try`子句余下的部分将被忽略。如果异常的类型和`except`之后的名称相符,那么对应的`except`子句将被执行。最后执行`try - except`语句之后的代码。

- 如果一个异常没有与任何的`except`匹配,那么这个异常将会传递给上层的`try`中。

4、try - except - finally 语句

try:

检测范围

except Exception[as reason]:

出现异常后的处理代码

finally:

无论如何都会被执行的代码

不管`try`子句里面有没有发生异常,`finally`子句都会执行。

5、try - except - else语句

如果在`try`子句执行时没有发生异常,Python将执行`else`语句后的语句。

```python

try:

检测范围

except:

出现异常后的处理代码

else:

如果没有异常执行这块代码

```

使用`except`而不带任何异常类型,这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所有的异常。

try:

检测范围

except(Exception1[, Exception2[,...ExceptionN]]]):

发生以上多个异常中的一个,执行这块代码

else:

如果没有异常执行这块代码

6、raise 语句

Python使用raise语句抛出一个指定的异常

try:

raise NameError('HiThere')

except NameError:

print('An exception flew by!')

# An exception flew by!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值