前言
我们知道 python 是一种非常强大的解释性语言,它有非常强大的语言特性和库。
一、Python 特点
- 简单易学
- 高动态性
- 开源免费
- 可移植
- 胶水语言,可与其他语言交互
二、与 C++ 对比
- 简单、易上手
- 语法简洁优雅,表达能力强,开发效率高
- 脚本语言,可以动态更新
三、Python的缺点
- 运行速度慢
- 内存消耗高
- 可控性差
- 多线程鸡肋
- 不支持多个虚拟机
四、Pythonic 代码实践
让我们一起来学习下如何写出 Pythonic 的代码,你就会感受到 Python 的便捷、强大之处了。
1. 数组遍历
NonPythonic
arr1 = [1, 2, 3]
for index in range(len(arr1))
print(arr1[index])
Pythonic
arr1 = [1, 2, 3]
for num in arr1:
print(num)
2. 数组遍历
NonPythonic
arr1 = [1, 2, 3]
for index in range(len(arr1))
print(index, arr1[index])
Pythonic
arr1 = [1, 2, 3]
for index, num in enumerate(arr1):
print(index, num)
3. 数组遍历
NonPythonic
arr1 = [1, 2, 3]
arr2 = [4, 5, 6]
for index in range(len(arr1))
print(arr1[index], arr2[index])
Pythonic
arr1 = [1, 2, 3]
arr2 = [4, 5, 6]
for num1, num2 in zip(arr1, arr2)
print(num1, num2)
4. 属性判断
NonPythonic
flag = False
obj = None
if flag == True:
do_sth()
if flag == False:
do_sth()
if obj is not None:
do_sth()
if obj is None:
do_sth()
Pythonic
flag = False
obj = None
if flag:
do_sth()
if not flag:
do_sth
if obj:
do_sth()
if not obj:
do_sth
5. 值交换
NonPythonic
temp = a
a = b
b = temp
Pythonic
a, b = b, a
6. 三元符
NonPythonic
if x > 100:
flag = 'big num'
else:
flag = 'small num'
Pythonic
flag = 'big num' if x > 100 else 'small num'
7. for else
NonPythonic
find = False
for x in arr:
if x == 100:
find = True
print('find 100')
break
if not find:
print('not find')
Pythonic
for x in arr:
if x == 100:
print('find 100')
break
else:
print('not find')
8. 列表生成
NonPythonic
arr = []
for i in range(10):
arr.append(i * i)
Pythonic
arr = [ i * i for in range(10)]
9. 列表生成
NonPythonic
arr = [1, 3, 5, 6, 9]
filter_arr = []
for i in range(10):
if i > 5:
filter_arr.append(i)
Pythonic
arr = [1, 3, 5, 6, 9]
filter_arr = [i for i in arr if arr > 5]
10. 列表生成
NonPythonic
square_dct = {
}
for i in range(10):
square_dct[i] = i * i
Pythonic
square_dct={
i : i * i for i in range(10)}
11. 字符串拼接
NonPythonic
arr = ['my', 'name', 'is', 'XXX']
result = ''
for word in arr:
result += word
result += ' '
Pythonic
arr = ['my', 'name', 'is', 'XXX']
result = ' '.join(arr)
12. Tuple unpack
NonPythonic
arr = ('iPhone', 5000, False)
name = arr[0]
price = arr[1]
sell = arr[2]
Pythonic
arr = ('iPhone', 5000, False)
name, price, sell = arr
13. 切片
NonPythonic
def get_lst_range(arr, start, end):
range_lst = []
for i in range(start, end):
range_lst.append(arr[start])
return range_lst
Pythonic
arr[start : end]