assert语句

用法:
assert expression

assert也称之为断言,用来测试表示式,其返回值为假,就会触发异常。为真时,啥也不做。

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
>>> assert 1==1
>>> assert 1==0
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    assert 1==0
AssertionError
>>> assert True
>>> assert False
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    assert False
AssertionError
>>> assert 3<2
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    assert 3<2
AssertionError

assert断言语句添加异常参数

assert的异常参数,其实就是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题。格式如下:
assert expression [, arguments]

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
>>> assert 2==1,'2不等于1'
Traceback (most recent call last):
File "D:/Data/Python/helloworld/helloworld.py", line 1, in <module>
assert 2==1,'2不等于1'
AssertionError: 2不等于1
>>> assert 3>2,'3大于2'  #True时,不输出信息
>>> assert 3<2,'3小于2'
Traceback (most recent call last):
  File "/home/main.py", line 1, in <module>
    assert 3<2,'3小于2'
AssertionError: 3小于2

实际上,assert expression 相当于以下if语句。

1
2
if __debug__:
    if not expression: raise AssertionError

assert expression1, expression2 相当于以下if语句。

1
2
if __debug__:
    if not expression1: raise AssertionError(expression2)

其中debug是系统内置的常量,在Cpython实现中,内置变量debug在正常情况下为True,在请求优化时为False(命令行选项-O)。也就是说优化了的Cpython是不能使用断言的。

一般来说,开发环境中为了调试,能使用断言。生产环境中,为了系统的安全和效率优化,会关掉断言功能。启动Cpython解释器时,命令行选项-o,可关掉断言功能。

pass语句

pass是一个空操作。当它被执行时,没有任何反应。当语法需要语句但不需要执行任何代码时,它可用作占位符。

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 定义没有实现内容的空函数func
def func():
    pass  # 没有任何实现

# 定义没有实现内容的类C
class C:
    pass  # 没有任何实现

# 定义没有实现的语句块
while True:
    pass # 没有实现的while循环

if True:
    pass # 没有实现的if else
else:
    pass # 没有实现的if else

for i in list:
    pass # 没有实现的for循环

del语句

用法:
del target_list

del语句删除一些对象引用。注意不是把内存地址删了,你只是删除了绑定,它就变为了一个可回收的对象,内存会不定期回收。

删除是递归定义的,与定义赋值的方式非常相似。删除目标列表会从左到右递归删除每个目标。 del a, b, c 会先删除a,再删除b,最后删除c

删除名称将删除该名称与本地或全局名称空间的绑定。如果名称未绑定,则将引发NameError异常。

例如:

1
2
3
4
5
6
7
a = [1,2,3,4,5]
b = a
print("列表对象a的值:",a)   # 输出列表对象a
print("列表对象b的值:",b)   # 输出列表对象b
del a                      # 删除列表对象a,删除的是名称a和列表[1,2,3,4,5]之间的绑定
print("列表对象b的值:",b)  # 再一次输出列表对象b
print("列表对象a的值:",a)  # 再一次输出列表对象a

执行以上程序会输出如下结果:

1
2
3
4
5
6
7
列表对象a的值: [1, 2, 3, 4, 5]
列表对象b的值: [1, 2, 3, 4, 5]
列表对象b的值: [1, 2, 3, 4, 5]
Traceback (most recent call last):
  File "/home/main.py", line 7, in <module>
    print("列表对象a的值:",a)  # 再一次输出列表对象a
NameError: name 'a' is not defined

删除属性引用

例如:

1
2
3
4
5
6
7
8
class A:
    def __init__(self,name):
        self.name = name

a = A("instance a")
print("实例a的名字是:",a.name)
del a.name
print("实例a的名字是:",a.name)

执行以上程序会输出如下结果:

1
2
3
4
5
实例a的名字是: instance a
Traceback (most recent call last):
  File "/home/main.py", line 8, in <module>
    print("实例a的名字是:",a.name)
AttributeError: 'A' object has no attribute 'name'

删除索引对象

例如:

1
2
3
4
a = [1,2,3,4,5]
print("列表对象a的值:",a)  #输出列表对象a
del a[1]                   #删除索引对象a[1]
print("列表对象a的值:",a)  #再一次输出列表对象a

执行以上程序会输出如下结果:

1
2
列表对象a的值: [1, 2, 3, 4, 5]
列表对象a的值: [1, 3, 4, 5]

删除切片

例如:

1
2
3
4
a = [1,2,3,4,5]
print("列表对象a的值:",a)   # 输出列表对象a
del a[1:3]                 # 删除切片对象a[1:3]
print("列表对象a的值:",a)   # 再一次输出列表对象a

执行以上程序会输出如下结果:

1
2
列表对象a的值: [1, 2, 3, 4, 5]
列表对象a的值: [1, 4, 5]

with语句

Python2.6中出现的新语句。with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

要使用 with 语句,首先要明白上下文管理器这一概念。有了上下文管理器,with 语句才能工作。关于上下文管理器,将在以后介绍。

例如:

1
2
3
# 打开test.txt文件,读取所有内容并打印出来
with open('test.txt') as f:
   print(f.readlines())

转载请注明本网址。