“Life is short, You need Python” – Bruce Eckel
Environment
Python 采用缩进(缩进量为 4 个字符)和冒号表示语句之间的逻辑,代码简洁。其允许行的最大长度为 79。这里做一点儿个人的Python学习笔记,本文内容包括 Python 的基本结构控制语句,包括 if
条件分支、for
迭代、while
循环、break
和 continue
、else
的使用和异常处理语句。
条件判断用于分支结构和循环结构中的条件测试
a, b = 1, 2
print(a > b, a == b, a < b, a!= b) # False False True True
empty_list = []
if empty_list:
print("This way")
else:
print("That way")
# 打印 That way
Tip: 遇到复杂的条件判断时,考虑定义并调用函数进行
# 判断是否时闰年
def leap_year(year):
return year % 4 == 0 and year % 100 != 0 or year % 400 == 0
if leap_year(2020):
print('Yes')
else:
print('No')
优先级:非 > 与 > 或
flag, another_flag = True, False
print(flag and another_flag) # False
flag, another_flag = True, False
print(flag or another_flag) # True
flag, another_flag = True, False
print(not flag, not another_flag) # Flase True
成员资格运算符 in
members = ['one', 'two', 'four']
print('three' in members) # False
print('two' in members) # True
注意,Python 不允许在条件判断中进行赋值操作。
if
实现if 条件:
条件为 True 时执行的操作
例
x = 1
if x:
print('Yes')
# Yes
if-else
实现if 条件:
条件为 True 时执行的操作
else:
上述条件为 False 时执行的操作
例
x = 0
if x:
print('Yes')
else:
print('No')
# No
if-elif-elif-...-else
实现if 条件:
条件为 True 时执行的操作
elif 条件:
条件为 True 时执行的操作
elif 条件:
条件为 True 时执行的操作
elif ...:
...
else:
上述各条件均为 False 时执行的操作
例
# 判断一个年份是否为闰年
year = 2020
if (year % 4 == 0) and (year % 100 != 0):
print('Yes')
elif (year % 400 == 0):
print('Yes')
else:
print('No')
# 输出 'Yes'
Tip:避免过多分支嵌套
条件表达式是 Python 中唯一的三目运算符,使 if 分支结构更即爱简洁,其语法为
expression1 if condition else expression2
例 leaky_relu 函数
def leaky_relu(x, a=0.01):
"""
计算 LeakyReLU
Params:
x, float
input
a, float, default 0.01
slope for the negative axis
"""
return x if x >= 0 else a * x
语法为
for 元素 in 可迭代对象:
执行的操作
例 对元组进行迭代
# 对 0 到 4 的整数求和
out = 0
for i in (0, 1, 2, 3, 4):
out += 1
print(out) # 10
例 对字典进行迭代
dictionary = {1: 'one', 2: 'two', 3: 'three'}
# 直接迭代得到键
for elem in dictionary:
print(elem)
print()
# 与上面等价
for elem in dictionary.keys():
print(elem)
# 对值迭代
print()
for elem in dictionary.values():
print(elem)
# 对 键-值 迭代
print()
for elem in dictionary.items():
print(elem)
例 对数字序列迭代
# 对 0 到 4 的整数之和
res = 0
for i in range(5):
res += i
print(res) # 10
例 列表的 remove 方法一次只能够删除一个元素,那么如何删除重复的元素呢?
如,删除一个列表 [1, 1, 1, 1, 0, 0, 1]
中所有的 1
# 法一:使用 while 循环,可以实现,但不够简洁
while True:
if 1 in ls:
ls.remove(1)
else:
break
print(ls)
# [0, 0]
# 法二:尝试 for 迭代,无法完成
# 搞清楚迭代的每一步就明白了为什么
for elem in ls:
if elem == 1:
ls.remove(1)
print(ls)
# [1, 0, 0, 1]
# 法三:for 迭代结合反向索引,可以实现
for i in range(-len(ls), 0):
if ls[i] == 1:
ls.remove(1)
print(ls)
# [0, 0]
break
语句,结束迭代res = 0
for i in range(1, 10):
if i % 5 == 0:
break
res += i
print(res) # 10
continue
语句,结束本轮迭代,进入下轮迭代res = 0
for i in range(1, 10):
if i % 5 == 0:
continue
res += i
print(res) # 40
for-else
,顺利完成了迭代,即没有被 break
语句中止迭代,那么执行 else
语句中的内容
res = 0
for i in range(5):
res += i
else:
print('iterationn done!')
# iterationn done!
使用 while
实现
while 条件:
条件为 True 时执行的操作
例
# 猜数字,正确答案为 666
answer = 666
flag = True
while flag:
number = int(input("Input a number:"))
if number == answer:
print('Damn right')
flag = False
else:
print('Wrong guess')
与 for
迭代相同
break
语句,结束循环answer = 666
while True:
number = int(input("Input a number:"))
if number == answer:
print('Damn right')
break
else:
print('Wrong guess')
continue
语句,结束本轮循环,进入下轮循环# 计算 1 到 5 之间奇数之和
i = 0
res = 0
while i <= 5:
i += 1
if i % 2 == 0:
continue
res += i
print(res) # 9
while-else
,若因不满足循环条件退出循环,即非 break
退出,则执行 else
中的内容
例
def showMaxFactor(num):
count = num // 2
while count > 1:
if num % count == 0:
print('The max factor of %d is %d.' % (num, count))
break
count -= 1
else:
print('%d is a prime.' % num)
showMaxFactor(19) # 输出 '19 is a prime.'
Tip:小心死循环
```python
# 计算 1 到 5 之间奇数之和
i = 0
res = 0
while i <= 5:
# i += 1 # 这句干掉,就变成死循环了
if i % 2 == 0:
continue
res += i
print(res) # 9
try-exception[-else][-finally]
见Python异常处理。