自学内容网 自学内容网

Python 高阶内容:简化代码的终极技巧

Python 高阶内容:简化代码的终极技巧

在编写 Python 代码时,我们总是希望能用更少的代码完成更多的功能。本文将带你深入了解一些常用的 Python 高阶内容和“偷懒”用法。这些技巧不仅能让你的代码更加简洁易读,还能显著提升开发效率。我们会探讨 Lambda 表达式的简化函数写法,一行 for 循环的使用,if-else 的简写模式,以及 enumeratezip 让你优雅地遍历和处理数据。除此之外,文章还介绍了多种列表和字典的生成方式,并展示了如何用 reversereversed 快速翻转列表。通过这些技巧,你将学会如何在保持代码清晰的同时,快速解决复杂问题,从而更好地掌握 Python 的编程艺术。

主要涉及的功能

方法名写法1写法2
Lambdalambda 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]
enumeratefor i, item in enumerate(items)
zipfor n, s in zip(items, scores)
reverse & reversedlist.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]

九 源码地址

代码地址:

国内看 GiteePython的偷懒用法.py

国外看 GitHubPython的偷懒用法.py

引用 莫烦 Python


原文地址:https://blog.csdn.net/u014394049/article/details/142410904

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!