Python 高阶内容:简化代码的终极技巧
Python 高阶内容:简化代码的终极技巧
文章目录
在编写 Python 代码时,我们总是希望能用更少的代码完成更多的功能。本文将带你深入了解一些常用的 Python 高阶内容和“偷懒”用法。这些技巧不仅能让你的代码更加简洁易读,还能显著提升开发效率。我们会探讨 Lambda 表达式的简化函数写法,一行 for
循环的使用,if-else
的简写模式,以及 enumerate
和 zip
让你优雅地遍历和处理数据。除此之外,文章还介绍了多种列表和字典的生成方式,并展示了如何用 reverse
和 reversed
快速翻转列表。通过这些技巧,你将学会如何在保持代码清晰的同时,快速解决复杂问题,从而更好地掌握 Python 的编程艺术。
主要涉及的功能
方法名 | 写法1 | 写法2 |
---|---|---|
Lambda | lambda x: x+1 | |
for 的简写模式 | [i*2 for i in range(10)] | {"i"+str(i): i*2 for i in range(10)} |
if else 简写模式 | a = 1 if True else 2 | |
一行 for + if | [i*2 for i in range(10) if i%2==0] | |
enumerate | for i, item in enumerate(items) | |
zip | for n, s in zip(items, scores) | |
reverse & reversed | list.reverse() | for i in reversed(list) |
一 Lambda: 更直接的 Function
1 常规函数写法和调用
def add(a, b):
return a + b
print(add(1, 2))
2 lambda 写法
lambda 写法,不是正式功能,你要临时使用的时候可以用。
add01 = lambda a, b: a + b
print(add01(1, 2))
二 一行 for
能解决的事
1 常规写法
l01 = []
for i in range(10):
l01.append(i * 2)
print(l01)
2 简写
l02 = [i * 2 for i in range(10)]
print(l02)
3 简写创建字典
可以创建字典 ,比较简单的运算逻辑可以这样写。
d = {"index" + str(i): i * 2 for i in range(10)}
print(d)
三 一行 if-else 行天下
1 常规写法
done = False
if done:
a = 1
else:
a = 2
print(a)
2 简写
同样是比较简单的运算逻辑可以这样写,你要是不怕被揍复杂的你 写 试试!
done = False
a = 1 if done else 2
print(a)
四 一行 for +
判断
1 常规写法
# 常规写法
l = []
for i in range(10):
if i % 2 == 0:
l.append(i * 2)
print(l)
2 简写
List 和 dict 的写法
# List
l = [i * 2 for i in range(10) if i % 2 == 0]
print(l)
# dict
d = {"index" + str(i): i * 2 for i in range(10) if i % 2 == 0}
print(d)
五 enumerate 枚举
1 常规的计数写法
count = 0
l = [11, 22, 33, 44]
for data in l:
if count == 2:
data += 11
l[count] = data
# print(count)
count += 1
print(l, count)
2 使用 enumerate 枚举
# enumerate 自动加 index
# 使用 enumerate, 这里的 count01 记录的是索引
l = [11, 22, 33, 44]
for count01, data in enumerate(l):
if count01 == 2:
data += 11
l[count01] = data
# print(count01)
print(l, count01)
3 enumerate 枚举从指定的数值开始
l = [11, 22, 33, 44]
d = {}
# count 从 5 开始
for count, data in enumerate(l, start=5):
d[count] = data
# print(count)
print(d)
六 zip
让你同时迭代
同时处理两个列表,一个是姓名一个是分数,并把它们做成一个字典。
1 常规写法
name = ["a", "b", "c"]
score = [1, 2, 3]
d = {}
for i in range(3):
d[name[i]] = score[i]
print(d)
2 使用 zip
内置函数
# 处理字典数据
name = ["a", "b", "c"]
score = [1, 2, 3]
d = {}
for n, s in zip(name, score):
d[n] = s
print(d)
print()
# 数据多一点
name = ["a", "b", "c"]
score = [1, 2, 3]
bonus = [1, 0, 1]
d = {}
for n, s, b in zip(name, score, bonus):
d[n] = s + b
print(d)
七 reverse & reversed 逆转列表
翻转列表。
1 常规写法
# 常规写法
l = [1, 2, 3]
_l = []
for i in range(len(l)):
_l.append(l[-i - 1])
print(_l)
2 简写
# 简写
l = [1, 2, 3]
_l = [l[-i - 1] for i in range(len(l))]
print(_l)
3 语法糖一
# 语法糖 1
l = [1, 2, 3]
l.reverse()
print(l)
4 语法糖二
# 语法糖 2
l = [1, 2, 3]
for i in reversed(l):
print(i)
5 语法糖 三
# 语法糖 3
l = [1, 2, 3]
_l = l[::-1]
print(l)
print(_l)
这里使用了列表的切片操作 l[::-1]
,其含义是:
l[start:stop:step]
是列表的切片语法,其中:start
是起始索引(默认为列表的开头)。stop
是结束索引(默认为列表的结尾)。step
是步长(默认为1)。
- 当
step
为-1
时,表示以步长为1反向遍历列表。
因此,l[::-1]
会生成一个新列表,其元素顺序与原列表 l
相反。
八 完整代码示例
# This is a sample Python script.
from typing import Callable, Any
# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.
def print_hi(name):
# Use a breakpoint in the code line below to debug your script.
print(f'Hi, {name}') # Press ⌘F8 to toggle the breakpoint.
# Lambda: 更直接的 Function
# 常规函数写法和调用
print(add(1, 2))
# 你发现你的情况是:
# 我的功能很简单
# 调用次数不多(没那么正式的功能)
# lambda 写法,不是正式功能,你要临时使用的时候可以用。
add01 = lambda a, b: a + b
print(add01(1, 2))
# 一行for能解决的事,干嘛写那么多
# 有时候:
#
# 我想要出一个列表,
# 然后用 for 循环不断添加列表里的元素。
# 常规写法
l01 = []
for i in range(10):
l01.append(i * 2)
print(l01)
# 可以这样写 ,比较简单的运算逻辑可以这样写
l02 = [i * 2 for i in range(10)]
print(l02)
# 可以创建字典 ,比较简单的运算逻辑可以这样写
d = {"index" + str(i): i * 2 for i in range(10)}
print(d)
# 可以一行判断,何必多行
# 常规写法
done = False
if done:
a = 1
else:
a = 2
print(a)
# 简写 ,比较简单的运算逻辑可以这样写
done = False
a = 1 if done else 2
print(a)
# 一行for+判断也行
# 常规写法
l = []
for i in range(10):
if i % 2 == 0:
l.append(i * 2)
print(l)
# 简写
# List
l = [i * 2 for i in range(10) if i % 2 == 0]
print(l)
# dict
d = {"index" + str(i): i * 2 for i in range(10) if i % 2 == 0}
print(d)
# enumerate 自动加 index
# 常规的计数写法
count = 0
l = [11, 22, 33, 44]
for data in l:
if count == 2:
data += 11
l[count] = data
# print(count)
count += 1
print(l, count)
# 使用 enumerate, 这里的 count01 记录的是索引
l = [11, 22, 33, 44]
for count01, data in enumerate(l):
if count01 == 2:
data += 11
l[count01] = data
# print(count01)
print(l, count01)
print()
l = [11, 22, 33, 44]
d = {}
# count 从 5 开始
for count, data in enumerate(l, start=5):
d[count] = data
# print(count)
print(d)
# Zip让你同时迭代
# 同时处理两个列表,一个是姓名一个是分数,并把它们做成一个字典
name = ["a", "b", "c"]
score = [1, 2, 3]
d = {}
for i in range(3):
d[name[i]] = score[i]
print(d)
print()
name = ["a", "b", "c"]
score = [1, 2, 3]
d = {}
for n, s in zip(name, score):
d[n] = s
print(d)
print()
# 数据多一点
name = ["a", "b", "c"]
score = [1, 2, 3]
bonus = [1, 0, 1]
d = {}
for n, s, b in zip(name, score, bonus):
d[n] = s + b
print(d)
# reverse & reversed 逆转列表
# 常规写法
l = [1, 2, 3]
_l = []
for i in range(len(l)):
_l.append(l[-i - 1])
print(_l)
# 简写
l = [1, 2, 3]
_l = [l[-i - 1] for i in range(len(l))]
print(_l)
# 语法糖 1
l = [1, 2, 3]
l.reverse()
print(l)
# 语法糖 2
l = [1, 2, 3]
for i in reversed(l):
print(i)
# 语法糖 3
l = [1, 2, 3]
_l = l[::-1]
print(l)
print(_l)
def add(a, b):
return a + b
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
print_hi('Python的偷懒用法')
# See PyCharm help at https://www.jetbrains.com/help/pycharm/
复制粘贴并覆盖到你的 main.py 中运行,运行结果如下。
Hi, Python的偷懒用法
3
3
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
{'index0': 0, 'index1': 2, 'index2': 4, 'index3': 6, 'index4': 8, 'index5': 10, 'index6': 12, 'index7': 14, 'index8': 16, 'index9': 18}
2
2
[0, 4, 8, 12, 16]
[0, 4, 8, 12, 16]
{'index0': 0, 'index2': 4, 'index4': 8, 'index6': 12, 'index8': 16}
[11, 22, 44, 44] 4
[11, 22, 44, 44] 3
{5: 11, 6: 22, 7: 33, 8: 44}
{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2, 'c': 3}
{'a': 2, 'b': 2, 'c': 4}
[3, 2, 1]
[3, 2, 1]
[3, 2, 1]
3
2
1
[1, 2, 3]
[3, 2, 1]
九 源码地址
代码地址:
国内看 Gitee 之 Python的偷懒用法.py
国外看 GitHub 之 Python的偷懒用法.py
引用 莫烦 Python
原文地址:https://blog.csdn.net/u014394049/article/details/142410904
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!