文章目录
Python 条件、循环及其它语句
重点理解 python 中的
条件语句
,循环语句以及列表推导,还有 pass,del 和 exec
导入重命名
from [somemodule] import [somefunction] as [aliasname]
多种导入方式
import somemodule
from some import somefunction
from somemodule import somefunction, anotherfunction, yetanotherfunction
from somemodule import *
赋值魔法
解构变量赋值
value = 1, 2, 3
x, y, z = value
可以通过星号运算符
*
来收集多余的值,这样无需确保值和变量的个数相同。带星号的变量最终包含的总是一个列表
a, b, *rest = [1, 2, 3, 4]
a, *b, c = "abc"
链式赋值
x = y = somefunction()
# 等价于
y = somefunction
x = y
增强赋值
可以让代码更紧凑、更简洁、同时可以增强可读性
x = 2
x += 1
代码块
python 默认使用 4 个空格来进行缩进
条件和条件语句
python 中,下面的值都被解释器视为
假
,而其他的都被视为真
False
# 布尔假值None
# 空值0
# 数字零''/ ""
# 空字符串()
# 空的元祖[]
# 空的列表{}
# 空的字典
if 语句和 if 条件表达式
if 语句较为平常,if 条件表达式,是 C 语言中三目运算符的 Python 版本
some_var = 'code' if 'foo' == 'bar' else 'lesser'
如果条件(紧跟在 if 后面)为真,则提供的第一个值(这里为 ‘bar’),否则为第二个值(这里为 ‘lesser’)
elif
是 else if 的缩写,由一个 if 子句和一个 else 子句组合而成,也就是包含条件的 else 子句
循环
while 循环
while condition_expr:
do_something
for 循环
for [item] in [iterable_object]:
do_something
并行迭代
使用 zip 函数
使用 zip 函数,将两个可迭代的函数
缝合
起来,并返回一个由元组组成的序列
a = ['a', 'b', 'c']
b = [1, 2, 3]
for one, two in zip(a, b):
print(one, two)
使用 enumerate 函数
可以为可迭代对象添加索引
strings = ['code', 'lesser']
for index, string in enumerate(strings):
if 'code' in string:
strings[index] = 'hello world'
跳出循环
- break
- continue
循环中的 else 子句
else 子句,它仅在没有调用 break 时才执行,也就是 for 循环执行完成,并且没有被 break 打断
from math import sqrt
for n in range(99, 81, -1):
root = sqrt(n)
if root == in(root):
print(n)
break
else:
print("Didn't find it!")
推导
列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。列表推导的工作原理非常简单,有点类似于 for 循环
[x * x for x in range(10)]
[x * x for in range(10) if x % 3 == 0]
pass
使用 pass 语句,表示什么都不做,因为在 python 中代码块不能为空。要修复这个问题,只需在中间的代码块中添加一条 pass 语句
del
不仅会删除到对象的引用,还会删除名称本身
foo = 'bar'
del foo
foo = ['code', 'lesser']
del foo[0]
exec & eval
exec
函数 exec 将字符串作为代码执行。还应该向它传递一个
命名空间
–用于防止变量名重复的地方;否则代码将污染你的命名空间
from math import sqrt
scope = {}
exec('sqrt = 1', scope)
print(scope['sqrt'])
print(sqrt(4))
如果尝试将 scope 打印出来,将发现它包含很多的内容,这是因为自动在其中添加了包含所有内置函数和值的字典 builtins
scope.keys() # ['sqrt', '__builtins__']
eval
exec 执行一系列 python 语句,而 eval 计算用字符串表示的 python 表达式的值,并返回结果(exec 什么都不返回,因为它本身是条语句)
同样可以向 eval 提供一个命名空间,虽然表达式通常不会向语句那样给变量重新赋值
result = eval('"foo" == "bar"')
print(result)