惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
P
Proofpoint News Feed
Simon Willison's Weblog
Simon Willison's Weblog
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
腾讯CDC
月光博客
月光博客
A
Arctic Wolf
T
Threatpost
Jina AI
Jina AI
博客园 - 聂微东
美团技术团队
V
V2EX
云风的 BLOG
云风的 BLOG
宝玉的分享
宝玉的分享
Recent Commits to openclaw:main
Recent Commits to openclaw:main
M
MIT News - Artificial intelligence
S
Secure Thoughts
Martin Fowler
Martin Fowler
Webroot Blog
Webroot Blog
V
Vulnerabilities – Threatpost
爱范儿
爱范儿
人人都是产品经理
人人都是产品经理
Help Net Security
Help Net Security
Google Online Security Blog
Google Online Security Blog
博客园 - Franky
The Last Watchdog
The Last Watchdog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
S
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Know Your Adversary
Know Your Adversary
Latest news
Latest news
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Y
Y Combinator Blog
G
Google Developers Blog
NISL@THU
NISL@THU
H
Heimdal Security Blog
L
LangChain Blog
T
Troy Hunt's Blog
I
InfoQ
U
Unit 42
C
Check Point Blog
Engineering at Meta
Engineering at Meta

卷卷

今日说法 节目汇总笔记 《斯坦福大学人生设计课》读书笔记 我的书单📖 H-worm (VBS蠕虫) 感染事件溯源分析报告 AMOS (Atomic Stealer) 恶意软件深度分析 银狐26年全面复活,对抗强度或已超25年最高水平 Atomic Stealer (AMOS) 回归:ClickFix、伪装加密货币应用与新型 macOS 持久化机制 关于xt.exe的分析报告 仿真钓鱼页面窃取用户凭证 GitHub Pages配置Cloudflare CDN踩坑之路 推荐RSS热力图和Github热力图使用指南 学习逆向工程相关概念 zabbix快速上手 学习云计算基本理论学习笔记 学习Docker-Compose命令及镜像构建与推送 ATT &CK 框架实践阅读笔记 rundll32.exe恶意加载DLL文件外联 《悉达多》读书笔记 《稀缺》读书笔记 《认知觉醒》读书笔记 《营养学》读书笔记 《心理学》读书笔记 热💖生活 C++开发环境配置与程序运行笔记 IDA Free调试Hello World笔记 逆向免杀 Admin.canway账号命名方式 BAS - Breach and Attack Simulation Windows核心系统进程链与svchost深度解析 企业测试环境的弱口令需要整改吗 AI对话笔记-模板 网络安全行业招聘需求与技术能力分析 银狐木马技术原理分析与检测技术 SIEM-安全信息和事件管理 AI笔记 转载 专业备考⏳ 其他杂项🧶 Markdown 原生图片 知道创宇技能表 Prompt越狱手册 deepseek使用指南 清华大学 deepseek提问方法 markdown基本语法 数据湖:它们是什么?为什么您的组织需要一个? GitHub Codespaces velociraptor(迅猛龙)快速上手 学习windows快捷命令 学习常用 150 个Linux命令 软考中的一些概念 学习ssh基本使用 Linux系统换源输入法和包管理器 DC-8靶机 Metasploitable3下载与安装 信息收集方法及流程 防守之道 开发运维 免责声明 密码喷射攻击:防范攻击你需要知道的事项 密码学中的哈希解释:它的工作原理、算法和实际用途 应急响应术语 各种报错积累 漏洞挖掘思路 收藏夹 RDP和360星图使用 windows入侵排查 Linux入侵排查 Redis日志分析 Linux安全加固 windows安全加固 windows日志ID速查 中间件加固 数据库安全加固 windows系统提权 MySQL注入复盘 学习git版本控制工具的概念与命令 学习Web Shell 学习Linux命令 java环境配置 学习python基础语法特性解题笔记 学习Mysql基础知识 windows权限维持 学习网络及安全的一些术语 PHP代码审计 Linux系统提权 MSSQL注入复盘 Linux权限维持 命令执行和反序列化 逻辑漏洞 upload-labs 框架漏洞 学习PHP语法特性 XXE&SSRF CSRF 文件上传 Google Hacking XSS-lab XSS实验 学习URL请求后的通信过程 FOFA
学习python高级语法特性例题笔记
卷卷 · 2026-01-03 · via 卷卷

1.面向对象

from types import new_class


class Student:
    student_num = 0  # 在类下面定义的变量为类变量

    def __init__(self,name,sex):  #构造方法,也就是构造函数,是用来初始化对象的。在构造函数中定义的变量,通常指的是在构造函数内部声明的变量
        self.name = name
        self.sex = sex
        # self.student_num += 1
        Student.student_num += 1 #通过类名来访问,每创建一个学生,学生数量+1

    @classmethod #类方法使用使用装饰器classmethod
    def add_student(cls,add_num):  # 类方法的第一个参数需要类本身,可以访问到类方法类变量
        cls.student_num += add_num

    @classmethod
    def from_string(cls,info):  # 使用类方法代替构造方法是一种常用的方法
        name,sex = info.split(' ')
        return cls(name,sex)

    @staticmethod # 静态方法 寄宿在类里不能访问类里的内容,但需要在类里面
    def name_len(name):
        return len(name)

s1 =  Student('Qiqi','Female')
s2 = Student.from_string('Qiqi Female')
print(f'Student.student_num:{Student.student_num}')
print(f's1.student_num:{s1.student_num}')
print(f's2.name:{s2.name},s2.name.len:{Student.name_len(s2.name)}')
Student.student_num:2
s1.student_num:2
s2.name:Qiqi,s2.name.len:4

局部变量的特性:

作用域:仅在该构造方法内部有效,无法被类中的其他方法访问。
生命周期:随着构造方法的调用而创建,方法执行结束后自动销毁。
存储位置:存放在栈内存中。

与成员变量的核心区别:

成员变量在类中声明(类体内部、方法外部),作用域覆盖整个类。
局部变量在方法(含构造方法)内部声明,仅限方法内使用。

2.推导式

是一种简洁的语法结构,用于快速创建列表、字典、集合等数据结构。推导式通过一行代码即可生成新的序列,避免了显式的循环和条件判断,使代码更加简洁易读。

# 例一:常规方法复制一个列表
nums = [1,2,3,4,5,6,7,8,9]
my_list = []
for i in nums:
    my_list.append(i)
print(my_list)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
# 例一:推导式复制一个列表
my_list = [i for i in nums]
print(my_list)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
# 例二:常规方法计算一个列表
nums = [1,2,3,4,5,6,7,8,9]
my_list = []
for i in nums:
    my_list.append(i**2)
print(my_list)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
# 例二:推导式计算一个列表
my_list = [i**2 for i in nums]
print(my_list)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
# 例三:常规方法计算一个列表偶数的平方
nums = [1,2,3,4,5,6,7,8,9]
my_list = []
for i in nums:
    if i % 2 == 0:
        my_list.append(i**2)
print(my_list)
[4, 16, 36, 64]
# 例三:推导式计算一个列表偶数的平方
my_list = [i**2 for i in nums if i % 2 == 0]  # 这里是先 for 后 条件
print(my_list)
[4, 16, 36, 64]
# 例四:常规方法计算一个列表偶数的平方奇数的立方
nums = [1,2,3,4,5,6,7,8,9]
my_list = []
for i in nums:
    if i % 2 == 0:
        my_list.append(i**2)
    else:
        my_list.append(i**3)
print(my_list)
[1, 4, 27, 16, 125, 36, 343, 64, 729]
# 例四:推导式计算一个列表偶数的平方奇数的立方
my_list = [i**2 if i % 2 == 0 else i**3 for i in nums]  # 注意:这里变成了先条件后for
print(my_list)
[1, 4, 27, 16, 125, 36, 343, 64, 729]
# 例五:常规方法创建字典
nums = [1,2,3,4,5,6,7,8,9]
letters = ['a','b','c','d','e','f','g','h','i']

my_dict = {}
for i,j in zip(nums,letters):  # zip 函数将 nums 和 letters 中的元素一一配对,生成一个可迭代的 zip 对象。
    # 例如,zip(nums, letters) 的结果类似于 [(1, 'a'), (2, 'b'), (3, 'c'), ...]。
    # 使用 for 循环遍历 zip 对象,每次取出一个元组 (i, j),其中 i 是 nums 中的元素,j 是 letters 中的元素。
    my_dict[i] = j  # 将 i 作为键,j 作为值,存入字典 my_dict 中。
print(my_dict)
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i'}
# 例五:推导式法创建字典
my_dict = {i:j for i,j in zip(nums,letters)}
print(my_dict)
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i'}
# 例六:常规方法创建集合
l = [1,2,3,4,5,6,7,8,9]
my_set = set()  #创建一个空集合
for i in l:
    my_set.add(i)  #将元素 i 添加到集合 my_set 中。如果元素已经存在,集合不会重复添加(因为集合中的元素是唯一的)。
print(my_set)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
# 例六:推导式方法创建集合
my_set = {i for i in l}
print(my_set)
{1, 2, 3, 4, 5, 6, 7, 8, 9}

3.生成器

生成器是一种特殊的迭代器,它通过 惰性计算 的方式生成值,而不是一次性将所有值存储在内存中。生成器使用 yield 关键字来返回值,并在每次调用时从上次暂停的地方继续执行。

  • 生成器适合处理大量数据,因为它不会一次性将所有数据加载到内存中。
  • 生成器是一次性的,遍历结束后无法再次使用。
  • 生成器不能通过索引访问元素,只能顺序遍历。
# 1.使用生成器函数
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()  # 生成器函数是一个包含 yield 关键字的函数。调用生成器函数时,它不会立即执行,而是返回一个生成器对象。
print(next(gen))  # 输出: 1
print(next(gen))  # 输出: 2
print(next(gen))  # 输出: 3
1
2
3
#2. 使用生成器推导式
gen = (x**2 for x in range(5))  #生成器表达式类似于列表推导式,但使用圆括号 () 而不是方括号 []。
print(gen)
print(next(gen))  # 输出: 0
print(next(gen))  # 输出: 1
print(next(gen))  # 输出: 4
<generator object <genexpr> at 0x00000230FC54F5E0>
0
1
4

生成器vs列表

特性生成器列表
内存占用小(按需生成值)大(一次性存储所有值)
计算方式惰性计算(按需生成)立即计算(一次性生成)
遍历次数只能遍历一次可以多次遍历
索引访问不支持支持
适用场景大数据集、无限序列、流式处理小数据集、需要多次访问的场景
def square_number(nums):
    result = []
    for i in nums:
        result.append(i**i)
    return result

my_nums = square_number([1,2,3,4,5,6])
print(my_nums)
[1, 4, 27, 256, 3125, 46656]
def square_number(nums):
    for i in nums:
        yield i**i

my_gen = square_number([1,2,3,4,5,6])
print(my_gen)  # 打印的是生成器对象在内存的值/地址
<generator object square_number at 0x00000230FC4EEC20>
my_gen = square_number([1,2,3,4,5,6])
print('first next function: ',next(my_gen))
print('Then runing for loop')
for num in my_gen:
    print(num)
first next function:  1
Then runing for loop
4
27
256
3125
46656
# 推导式生成列表
my_list = [i*i for i in [1,2,3,4,5,6]]
print(my_list)
[1, 4, 9, 16, 25, 36]
my_gen = (i*i for i in [1,2,3,4,5,6])
print(my_gen)
<generator object <genexpr> at 0x00000230FC4EEC20>

4.匿名函数/lambda函数

匿名函数(Anonymous Function)是一种没有名称的函数,使用 lambda 关键字定义。匿名函数通常用于简化代码,尤其是在需要传递简单函数作为参数的场景中。

lambda 参数1, 参数2, ... : 表达式

  • lambda 是定义匿名函数的关键字。
  • 参数可以有多个,用逗号分隔。
  • 表达式是函数的返回值,不需要写 return。
# 传统函数
def add(a,b):
    return a+b
print(add(1,2))
3
# lambda函数
add = lambda a,b: a+b
print(add(1,2))
3

lambda函数的一个重要作用是作为其他函数的参数使用

# 在map函数中
my_list = [1,2,3,4,5,6,7,8,9]
new_list = list(map(lambda x:x**2,my_list)) # 将my_list数组元素作为x传入计算x**2的结果返回
print(new_list)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

将lambda作为字典的value来处理多个分支,这样就不用写else if了

# eg. 对用户登陆进行判断等级后加相应积分
def user_logging(level):
    credits = 0
    if level == 1:
        credits += 2
    elif level == 2:
        credits += 5
    elif level == 3:
        credits += 10
    elif level == 4:
        credits += 15
    return credits
print(user_logging(3))
10
def user_logging(level, credits):
    # 定义等级与积分计算规则的映射
    level_credit_map = {
        1: lambda x: x + 2,
        2: lambda x: x + 5,
        3: lambda x: x + 10,
        4: lambda x: x + 15,
    }
    # 根据用户等级计算积分
    credits = level_credit_map[level](credits)
    return credits

# 示例调用
level = 2  # 用户等级
initial_credits = 100  # 初始积分
final_credits = user_logging(level, initial_credits)
print(final_credits)  # 输出: 105
105