首页 > 编程语言 >Python 高阶内容:简化代码的终极技巧

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

时间:2024-09-21 15:22:37浏览次数:12  
标签:count 10 简写 Python 写法 range print 终极 高阶

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

标签:count,10,简写,Python,写法,range,print,终极,高阶
From: https://blog.csdn.net/u014394049/article/details/142410904

相关文章

  • 数据中台升级之旅:解析数据飞轮的本质与高阶变迁
    在当今数据驱动业务发展的新时代,很多组织都面临着如何高效利用数据以驱动增长和创新的问题。数据飞轮和数据中台作为核心的技术和架构概念,常常被提及。尽管两者都以数据为燃料,但它们在实施目标和运作模式上存在本质的不同。通过详细分析这些差异,我们可以更好地理解如何构建有效的数......
  • Python数论应用
    引言        在前面的课程中,我们已经学习了Python的基本输入输出、数据类型及其转换、顺序结构、分支结构、循环结构、循环控制语句、字符串类型、列表类型、元组类型、字典类型、集合类型、函数的定义与使用、函数调用与作用域、函数的高级应用、质数、倍数与余数......
  • 中国电子学会202406青少年软件编程(Python)等级考试试卷(四级)真题
    青少年软件编程(Python)等级考试试卷(四级)2024-6一、单选题(共25题,共50分)1.执行以下程序后所输出的结果是?()A   20   B   41   C   21   D   912.以下说法错误的是?()A  python中可以在不同的自定义函数中声明相同名字的变量,使用时不会造成数据混乱B......
  • 中国电子学会202403青少年软件编程(Python)等级考试试卷(四级)真题
    202403Python四级真题一、选择题1、运行如下代码,若输入整数3,则最终输出的结果为?()deff(x):    ifx==1:        s=1    else:        s=f(x-1)*x    returnsn=int(input("请输入一个大于1的整数:"))print(f(n)+f(n......
  • 基于python的opencv图像处理基本操作
    一、如何下载opencv包在Python中下载OpenCV包,最常用的方法是使用pip命令。pip是Python的包安装工具,可以方便地从Python包索引(PyPI)安装和管理包。以下是一些基本的步骤和命令,帮助你通过pip安装OpenCV。在命令行中输入以下命令来安装OpenCV:pipinstallopencv-python在国内使......
  • 在 Ubuntu 20.04 服务器上安装 Python 3 并设置编程环境的方法
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介Python编程语言越来越受到初学者和经验丰富的开发人员的青睐。Python灵活多变,在脚本编写、自动化、数据分析、机器学习和后端开发等方面具有优势。Python首次发布于......
  • python中函数式编程与高阶函数,装饰器与生成器,异常处理与日志记录以及项目实战
    函数式编程是Python强大且灵活的编程范式之一,与此同时,Python也为开发者提供了高阶函数、装饰器、生成器等工具,极大提高了代码的可读性和复用性。此外,异常处理与日志记录是编写可靠、可维护的Python代码的重要组成部分。最后,通过一个项目实战来整合这些概念。我们将从......
  • 计算机毕设设计推荐-基于python+Djanog大数据的电影数据可视化分析
    精彩专栏推荐订阅:在下方主页......
  • 如何使用 Python 的 sqlite3 模块操作 SQLite 数据库?
    如何使用Python的sqlite3模块操作SQLite数据库?SQLite是一种轻量级的数据库,它不需要服务器,数据库被存储在一个文件中,非常适合嵌入式系统或桌面应用程序。Python标准库中包含了一个名为sqlite3的模块,可以直接用于与SQLite数据库进行交互。本文将详细介绍如何使用......
  • Python 从入门到实战24(类的继承)
            我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。上篇文章我们讨论了类的定义、使用方法、@property的相关知识。今天我们将学习一下类的继承。1、继承的基本语法......