最近在看python需要掌握的知识,发现这四个概念都非常陌生,于是开始自学。四个部分,列表推导式,三元表达式,断言,with-as
列表推导式,就是快速建立一个列表,用到的比较多的是range。
举个例子:
a=[]
for i in range(1,5,1):
print(i)
a.append(i)
print(a)
1
2
3
4
[1, 2, 3, 4]
range(开始,结束,间隔)
搞个帅气一点的:
a=[i for i in range(1,10,2)]
print(a)
#[1, 3, 5, 7, 9]
循环体里面,变量要一致。列表推导式就是把循环,range函数放在一行,使代码实现了简洁性。
a=[i for i in range(0,50,3) if i % 2 == 0]
print(a)
#[0, 6, 12, 18, 24, 30, 36, 42, 48]
我们把代码拆开来看:
a=[]#创建一个空列表
for i in range(0, 50, 3):#从0开始,到50结束,50=取不到,间隔3
if i % 2 == 0:#如果i除以2等于零
a.append(i)#把i添加到a这个列表里面
print(a)#打印a
#结果:[0, 6, 12, 18, 24, 30, 36, 42, 48]
你会发现使用列表推导式的方便,但是代码的可读性也很重要,我觉得第二种读起来舒服。
我们继续看例子:
a=[i * 10 for i in 'qwq']
print(a)
#['qqqqqqqqqq', 'wwwwwwwwww', 'qqqqqqqqqq']
这次是从遍历数组,变成遍历字符串了。
在列表推导式里面还可以进行双循环。我们再看一个例子:
a=[(i*3, a*a) for i in range(1, 3) for a in range(1, 10, 3)]
print(a)
#[(3, 1), (3, 16), (3, 49), (6, 1), (6, 16), (6, 49)]
result = []
for i in range(1, 3): # 外层循环
for a in range(1, 10, 3): # 内层循环
result.append((i*3, a*a))
a = result
print(a)
上面的双循环,下面的进行了拆分。个人觉得都可以写,但是一定要知道列表推导式的概念和形式,不然和我一样,遇到了还以为是新东西,其实就是range函数。
三元表达式是什么:在Python中,三元表达式是一种简洁的表达式,用于根据一个条件表达式的结果返回两个可能值中的一个。其语法如下:
value_if_true if condition else value_if_false
如果条件表达式为真,则返回value_if_true
;否则返回value_if_false
。
下面是一个使用三元表达式的示例:
x = 5
result = "x 大于 3" if x > 3 else "x 小于等于 3"
print(result) # 输出 "x 大于 3"
在上面的示例中,如果变量x
的值大于3,则将返回字符串"x 大于 3";否则将返回字符串"x 小于等于 3"。在这个例子中,因为x
的值是5,所以返回了"x 大于 3"。
在Python中,断言(assert)是一个用于测试程序中的某个条件是否为真的语句。如果条件为真,则断言通过;如果条件为假,则触发一个AssertionError
异常。
断言的语法如下:
assert condition, "error message"
其中,condition
是要测试的条件,"error message"
是当条件为假时显示的错误消息。
下面是一个使用断言的示例:
x = 5
assert x > 0, "x必须大于0"
print("断言通过")
#断言通过
我们改变参数看一下:
x = 5
assert x > 8, "x必须大于0"
print("断言通过")
结果:
Traceback (most recent call last):
File "d:\project5\demo1\demo4.py", line 2, in <module>
assert x > 8, "x必须大于0"
AssertionError: x必须大于0
在这个例子中,断言测试了变量x
是否大于0。由于x
的值是5,所以断言通过,程序将输出"断言通过"。
如果将x
的值改为小于或等于0的数,例如x = -1
,则断言将失败,程序将触发一个AssertionError
异常,并显示错误消息"x必须大于0"。
需要注意的是,断言主要用于调试和测试目的。在生产代码中,不应该使用断言来处理程序的正常逻辑。
Python中的with as
语句主要用于管理资源,确保在访问资源时无论是否发生异常都能执行必要的“清理”操作,释放资源。常见于文件处理、数据库连接和网络连接等场景。
with as
语句的基本语法格式为:
with expression [as target] :
code_block
其中,expression
是一个需要执行的表达式,target
是一个变量或元组,用于存储expression
执行后的结果。如果省略as target
部分,with as
语句会执行expression
并自动执行相应的清理操作,但不会将结果存储在任何变量中。
使用with as
语句可以简化代码,同时确保在异常发生时能够正确地清理资源。通过这种方式,可以在语句开始时创建资源,并在语句执行完毕时自动释放资源,从而确保程序在最短的时间内完成操作。
举个例子,假设我们要打开一个文件并逐行读取内容,我们可以使用以下代码:
with open('file.txt', 'r') as f:
for line in f:
print(line)
在这个例子中,open('file.txt', 'r')
返回一个文件对象,并将其存储在变量f
中。在with as
语句的代码块中,我们使用for line in f
逐行读取文件内容并打印出来。当代码块执行完毕时,文件对象会自动关闭,释放资源。
需要注意的是,被求值对象必须实现__enter__()
和__exit__()
这两个方法才能被用于with as
语句。这两个方法分别在语句开始时和执行完毕时被自动调用,以确保资源的正确创建和释放。
总之,Python中的with as
语句提供了一种方便、安全的方式来管理资源,确保资源的正确使用和释放。通过使用with as
语句,我们可以编写更加简洁、易读的代码,同时避免因资源泄漏而导致的问题。