avatar
Hespethorn
HespethornのBlog
GitHub
Recent Posts
Website Info
Article Count :
505
Runtime :
Total Word Count :
844.1k
Last Update :
:高阶函数与“回调”机制的深度解析">Python函数式编程入门:高阶函数与“回调”机制的深度解析
...
Python @property高级应用技巧
一、数据校验与约束这是@property最常见的用途。当你需要确保某个属性的值符合特定规则时(例如,年龄不能为负数),可以使用它: 传统方式:需要显式调用set_age()方法 使用@property:可以像给普通属性赋值一样obj.age = 25,但赋值操作会触发你预设的校验逻辑 1234567891011121314151617181920class Person: def __init__(self, name, age): self.name = name self._age = age # 使用单下划线表示这是一个内部属性 @property def age(self): """获取年龄""" return self._age @age.setter def age(self, value): """设置年龄,并进行校验""" ...
技术笔记:Python与C++函数参数传递机制差异
技术笔记:Python与C++函数参数传递机制差异在跨语言开发中,函数参数处理是一个常见的痛点。当函数拥有多个默认参数时,如何优雅地调用它?这是本文要探讨的核心问题。 一、Python的关键字参数机制Python的关键字参数机制允许开发者通过参数名直接指定值,而不必严格按照函数定义的顺序传递参数: 12345678def configure_connection(host="localhost", port=8080, timeout=30, retry=False, ssl=True): print(f"Configuring connection: host={host}, port={port}, timeout={timeout}, retry={retry}, ssl={ssl}")# 只修改timeout参数configure_connection(timeout=60)#...
Python self与cls的区别深度解析
一、核心区别对比 特性 self (实例方法) cls (类方法 @classmethod) 代表对象 实例对象 (具体的某一个) 类对象 (整个类别/图纸) 第一个参数 接收调用该方法的实例 接收调用该方法的类 访问权限 访问实例属性(self.name) 和类属性 只能访问类属性(cls.count) 主要职责 处理具体业务逻辑,修改个体状态 修改全局状态、工厂模式创建实例 调用方式 通常通过 实例.方法() 调用 通常通过 类.方法() 调用 二、形象类比:汽车工厂为了更直观地理解,我们可以把类想象成一个汽车工厂,把实例想象成造出来的汽车: 1. self (实例方法) — 针对具体的车 场景:给车喷漆、踩油门、换轮胎 逻辑:你必须先有一辆车(实例),才能做这些操作。你不能对着空气踩油门 代码体现:self.color = "Red"(把这一辆车喷红,不影响别的车) 2. cls (类方法) —...
Python @property装饰器核心机制解析
引言"明明定义了@property,为什么在init里给它赋值却提示can't set attribute?"——这是无数Python初学者踩过的坑。今天,我们从这个报错出发,彻底搞懂@property的底层逻辑。 一、错误现场:一个"只读"的陷阱先看这段看似合理的代码: 1234567class Student: def __init__(self, name): self.name = name # 这里会报错! @property def name(self): return self._name 运行后抛出AttributeError: can't set...
Python sorted函数key参数深度解析
在Python中,sorted函数是一个强大的排序工具,而其中的key参数更是其最核心、最灵活的功能之一。本文将深入解析key参数的工作原理和使用技巧,帮助你在各种场景下优雅地实现排序需求。 一、key参数的基本原理key参数接收一个函数,这个函数会被应用到列表中的每一个元素上。sorted不会直接比较元素本身,而是比较这个函数处理元素后返回的"结果"。你可以把它想象成给每个元素贴一个"标签",排序是根据"标签"的内容来排,而不是根据元素本身。 二、key参数的三种传参方式1. 使用lambda表达式(最常用)当你需要快速定义一个简单的规则(比如按字典的某个键、按对象的某个属性)时,lambda是最方便的。 1234567891011users = [ {"name": "Alice", "age": 25}, {"name": "Bob", "age":...
Python @classmethod 本质上就是C++ 的静态成员?
一、引言:一个跨语言的困惑当Python 中看到@classmethod 和cls 参数时,C++ 程序员的第一反应是“这有什么用?不就是个普通函数吗?”。但实际上,@classmethod 的存在是为了解决“类级别”的数据共享和操作,这与 C++ 的static 不谋而合。 二、 相同点:都属于“类”而非“对象”无论是Python 的@classmethod 还是 C++ 的static 函数,它们的核心特征都是一致的: 调用方式:都可以不创建实例,直接通过类名来调用 职责范围:它们处理的是与整个类相关的事务,而不是某个具体对象的私有数据 Python 的实现(@classmethod)12345678910111213141516171819202122232425class Person: # 类变量,所有实例共享 count = 0 def __init__(self, name): self.name = name # 每创建一个实例,就调用类方法来增加计数 ...
Python函数:平方函数的完整实现
Python函数:平方函数的完整实现在Python中,函数是代码组织的基本单位。本文将介绍一个完整的Python平方函数实现,包括参数验证、异常处理和类型注解。 一、函数定义12345678910111213def square(n: int) -> int: """ 计算一个整数的平方 :param n: 输入整数 :type n: int :return: 输入整数的平方 :rtype: int :raise: ValueError """ if not isinstance(n, int): raise ValueError("Input must be an integer") return n * n 二、函数分析1. 函数签名1def square(n: int) -> int: 函数名:square,直观表示函数功能 参数:n,类型注解为int,表示接受一个整数 返回类型:->...
Python库与模块解析
哈佛CS50P课程的第四周专注于"资源库(Libraries)"主题,教授如何利用Python标准库和第三方包来提高开发效率。本文将详细介绍这一周的核心内容。 一、核心理念:代码复用1. 为什么要使用资源库David Malan教授指出:编程不应该总是从零开始。资源库是别人(或自己)编写的代码文件,旨在通过模块化(Modules)鼓励代码复用,避免机械的复制粘贴。 12345678# 不推荐:重复造轮子def calculate_circle_area(radius): import math return math.pi * radius ** 2# 推荐:使用已有的模块import matharea = math.pi * 5 ** 2 2. 模块化的优势 代码复用:避免重复编写相同的代码 维护性好:集中管理,便于更新 可读性高:代码结构清晰,易于理解 协作方便:团队成员可以共享使用 二、导入的艺术:import vs from1. import模块123456# 导入整个模块import random#...
Python测试框架:pytest与assert断言
Python提供了多种测试工具,其中pytest是最流行的单元测试框架之一。本文将介绍Python中的assert语句以及pytest框架的基本用法。 一、assert语句1. 基本用法1234567# assert 条件x = 10assert x > 0 # 条件为True,无输出# assert 条件, 错误信息x = -5assert x > 0, "x必须大于0" # 抛出AssertionError 2. 常见用途12345678910def divide(a, b): assert b != 0, "除数不能为零" return a / bdef validate_age(age): assert 0 <= age <= 150, "年龄必须在0到150之间" return ageprint(validate_age(25)) # 正常# validate_age(-5) # 抛出AssertionError 二、pytest框架1....
Python引用机制:无指针设计与内存管理
Python是一种高级编程语言,其设计理念之一就是让开发者无需关心底层的内存管理。因此,Python中没有像C或C++那样的指针概念。本文将介绍Python的引用机制以及它与指针的区别。 一、Python的引用机制1. 变量即引用在Python中,变量更像是标签或引用,而不是存储数据的容器: 1234567891011# 创建变量x = 10y = xprint(x) # 10print(y) # 10# x和y指向同一个对象y = 20print(x) # 10(x不受影响)print(y) # 20 2. 对象与引用Python中的每个对象都有: 身份(id):对象的唯一标识 类型(type):对象的类型 值(value):对象的值 123456x = [1, 2, 3]y = xprint(id(x)) # 对象身份print(id(y)) # 相同身份print(x is y) # True:x和y指向同一对象 二、可变对象与不可变对象1. 不可变对象不可变对象包括:整数、浮点数、字符串、元组等 1234567# 不可变对象x = 10y = xy...
Python IO操作:文件读写与标准输入输出
Python的IO(输入/输出)操作是编程中非常基础且重要的部分,它允许程序与外部世界进行交互。本文将详细介绍Python中的文件读写操作、标准输入输出以及相关的最佳实践。 一、文件读写操作1. 打开和关闭文件在Python中,使用open()函数打开文件,使用close()方法关闭文件。 123456789# 打开文件file = open('example.txt', 'r')# 操作文件content = file.read()print(content)# 关闭文件file.close() 2. 文件打开模式 模式 描述 r 只读模式(默认) w 写入模式,会覆盖现有文件 a 追加模式,在文件末尾添加内容 x 独占创建模式,如果文件已存在则报错 b 二进制模式 t 文本模式(默认) + 读写模式 12345678# 二进制模式打开with open('image.jpg', 'rb') as f: data = f.read()#...
Python数据结构:列表与字典操作
Python中的列表(List)和字典(Dictionary)是两种最常用的数据结构。列表类似于数组,字典是一种键值对数据结构。本文将详细介绍这两种数据结构的用法。 一、列表(List)1. 基本操作123456789101112# 创建列表fruits = ["apple", "banana", "cherry"]numbers = [1, 2, 3, 4, 5]mixed = [1, "hello", 3.14, True]# 访问元素print(fruits[0]) # appleprint(fruits[-1]) # cherry# 修改元素fruits[0] = "orange"print(fruits) # ['orange', 'banana', 'cherry'] 2. 列表方法12345678910111213141516# 添加元素fruits = ["apple",...
Python循环结构:while与for迭代器详解
Python提供了两种主要的循环结构:while循环和for循环。本文将详细介绍这两种循环的使用方法,以及range()迭代器的使用。 一、while循环1. 基本语法12345count = 0while count < 5: print(count) count += 1# 输出:0, 1, 2, 3, 4 2. while-else结构123456count = 0while count < 5: print(count) count += 1else: print("循环正常结束") # 循环正常结束时执行 3. 无限循环12345while True: user_input = input("输入 'quit' 退出: ") if user_input == "quit": break print(f"你输入了: {user_input}") 二、for循环1....
Python匹配语句:match-case与switch对比
Python 3.10引入了match语句,这是一种强大的模式匹配机制,类似于其他语言中的switch语句,但功能更加强大。本文将详细介绍Python中match语句的用法。 一、match语句的基本用法1. 基本语法1234567891011121314def http_status(status): match status: case 200: return "OK" case 404: return "Not Found" case 500: return "Internal Server Error" case _: return "Unknown"print(http_status(200)) # 输出:OKprint(http_status(404)) # 输出:Not Foundprint(http_status(999)) ...
Python异常处理:try-except-finally-else机制
Python的异常处理机制是一种强大的错误处理方式,使用try、except、finally和else关键字来捕获和处理程序运行过程中的错误。本文将详细介绍Python异常处理的各种用法。 一、基本语法1. try-except结构123456try: # 可能引发异常的代码 result = 10 / 0except ZeroDivisionError: # 处理特定异常 print("不能除以零") 2. 捕获异常信息12345try: result = 10 / 0except ZeroDivisionError as e: print(f"错误类型: {type(e).__name__}") print(f"错误信息: {e}") 3. 多个except子句1234567try: value = int("abc") result = 10 / 0except ValueError: ...
Python条件表达式:链式比较与短路求值
Python支持一种独特的语法特性:条件表达式可以连写。这种链式比较(Chained Comparisons)可以让代码更加简洁和易读。本文将详细介绍Python中条件表达式连写的用法。 一、链式比较的基本用法1. 数学风格比较123456789# 传统写法x = 5if x > 0 and x < 10: print("x在0到10之间")# Python连写写法x = 5if 0 < x < 10: print("x在0到10之间") 2. 更多示例1234567891011121314# 判断是否在某个范围内age = 25if 18 <= age <= 65: print("工作年龄") # 输出:工作年龄# 链式不等式x = 0.5if 0 < x < 1: print("x是0到1之间的分数") # 输出:x是0到1之间的分数# 多个比较a, b, c = 3, 5, 7if a < b < c: ...
Python条件语句:if-elif-else分支结构
Python的条件语句用于根据不同的条件执行不同的代码块。本文将详细介绍Python中if、elif、else条件语句的使用方法。 一、基本语法1. 简单的if语句1234x = 10if x > 5: print("x大于5") # 输出:x大于5 2. if-else语句123456x = 3if x > 5: print("x大于5")else: print("x不大于5") # 输出:x不大于5 3. if-elif-else语句12345678910score = 85if score >= 90: print("优秀")elif score >= 80: print("良好") # 输出:良好elif score >= 70: print("中等")else: print("及格") 二、Python与C++的对比1....
Python全局变量:作用域与global关键字
在Python编程中,全局变量和局部变量的作用域是一个重要的概念。本文将详细介绍Python中全局变量的使用,以及如何通过global关键字在函数内部修改全局变量。 一、全局变量和局部变量1. 基本概念123456789101112# 全局变量global_var = 10def func(): # 局部变量 local_var = 20 print(f"Inside function: global_var = {global_var}") print(f"Inside function: local_var = {local_var}")func()print(f"Outside function: global_var = {global_var}")# print(local_var) # NameError: name 'local_var' is not defined 2....
Python函数副作用:返回值与状态变更
在Python编程中,理解函数副作用(Side Effects)是非常重要的。副作用是指函数在执行过程中,除了返回值之外,对外部状态产生的任何改变。理解副作用有助于编写更清晰、更安全的代码。 一、什么是函数副作用1. 基本定义副作用包括但不限于: 修改全局变量 修改传入的参数 输入/输出操作(打印、读取文件、网络通信等) 修改数据结构 抛出异常 2. 无副作用函数示例1234567# 无副作用:纯函数def add(a, b): return a + bresult = add(3, 5)print(result) # 输出:8# 函数外部没有任何改变 3. 有副作用函数示例12345678910# 有副作用:修改全局变量counter = 0def increment(): global counter counter += 1 return counterprint(increment()) # 输出:1print(counter) # 输出:1(全局变量被修改) 二、常见的副作用场景1....
Python函数定义:def关键字与缩进规则
Python的函数定义使用def关键字,与C++等语言不同,Python不使用大括号来标记函数体,而是依靠缩进来区分代码块。本文将详细介绍Python函数定义的方式和特点。 一、Python函数定义的基本语法1. 基本结构123456# Python函数定义def greet(): print("Hello, World!")# 调用函数greet() # 输出:Hello, World! 2. 带参数的函数123456789101112# 带参数的函数def greet(name): print(f"Hello, {name}!")greet("Alice") # 输出:Hello, Alice!# 多个参数def add(a, b): return a + bresult = add(3, 5)print(result) # 输出:8 3. 默认参数值123456789# 默认参数def greet(name, greeting="Hello"):...
Python数值处理:round()函数四舍五入机制
Python的round()函数是处理浮点数四舍五入的重要工具。本文将详细介绍round()函数的使用方法以及常见的精度问题。 一、round()函数的基本用法1. 基本语法1round(number, ndigits) number:要四舍五入的数字 ndigits:保留的小数位数(可选,默认为0) 2. 基本示例12345# 基本四舍五入print(round(3.14159)) # 输出:3print(round(3.5)) # 输出:4print(round(3.14159, 2)) # 输出:3.14print(round(3.14159, 4)) # 输出:3.1416 3. 负数四舍五入1234567# 负数四舍五入到整数print(round(-3.5)) # 输出:-4print(round(-3.4)) # 输出:-3# 负数四舍五入到小数位print(round(-3.14159, 2)) # 输出:-3.14print(round(-3.14159, 3)) #...
Python类型转换机制及与C++对比
Python和C++在类型转换方面有着显著的不同。Python是一种动态类型语言,类型转换通常发生在运行时;而C++是一种静态类型语言,类型转换需要在编译时明确指定。本文将详细介绍Python中的类型转换方式及其与C++的区别。 一、Python类型转换的基本方式1. 隐式类型转换Python在某些情况下会自动进行类型转换: 12345678910# 整数和浮点数运算时,整数自动转换为浮点数result = 10 + 3.5print(result) # 输出:13.5print(type(result)) # 输出:<class 'float'># 布尔值与整数运算result = True + 5print(result) # 输出:6result = False + 10print(result) # 输出:10 2. 显式类型转换(强制类型转换)Python使用构造函数进行显式类型转换: 123456789101112# 转换为整数print(int(3.7)) # 输出:3print(int("42"))...
Python交互式编程环境使用指南
Python的交互式编程是学习和实验Python代码的强大工具。通过Python的交互式解释器(REPL),开发者可以逐行执行代码、即时查看结果,非常适合初学者入门和快速原型开发。 一、Python交互式解释器1. 启动交互式解释器在终端或命令行中直接输入python或python3即可启动: 1234$ pythonPython 3.11.0 (default, ...)Type "help" for more information.>>> 2. 基本操作12345678910111213# 直接计算>>> 2 + 24# 变量赋值>>> x = 10>>> y = 20>>> x + y30# 调用函数>>> print("Hello, World!")Hello, World! 3. 退出交互式解释器1234>>> exit()# 或者>>> quit()# 或者按...
Python字符串处理:strip()方法与链式调用
Python的字符串方法是非常强大的工具,其中strip()系列方法是处理用户输入和字符串清洗时最常用的函数之一。本文将详细介绍Python字符串的strip()方法以及其他常用的字符串处理方法。 一、strip()方法详解1. 基本用法strip()方法用于移除字符串首尾两端的空白字符: 1234567891011# 基本用法text = " Hello, World! "print(f"'{text.strip()}'") # 输出:'Hello, World!'# 移除换行符text = "\nHello\n"print(f"'{text.strip()}'") # 输出:'Hello'# 移除制表符text = "\tHello\t"print(f"'{text.strip()}'") ...
Python格式化字符串:f-string用法详解
Python的f-string是一种强大的字符串格式化方式,它允许在字符串中直接嵌入表达式。本文将详细介绍f-string的用法和特点。 一、f-string的基本用法1. 基本语法12345# f-string基本用法name = "Alice"age = 25print(f"My name is {name}, and I am {age} years old.")# 输出:My name is Alice, and I am 25 years old. 2. 表达式求值123456789101112# f-string中的表达式x = 10y = 20print(f"The sum of {x} and {y} is {x + y}.")# 输出:The sum of 10 and 20 is 30.# 调用函数def get_greeting(): return...
Python基础:print输出、input输入与注释语法
Python是一种简单易学的编程语言,其基础语法非常直观。本文将详细介绍Python中的print函数使用、input函数输入以及注释的使用方法。 一、print函数的使用1. 基本用法print()函数用于在控制台输出信息,是Python中最常用的函数之一。 123456789# 输出字符串print("Hello, World!")# 输出数字print(42)# 输出变量name = "Python"print(name) 2. 使用+连接输出使用+运算符可以连接多个字符串或变量进行输出: 12345678910# 连接字符串print("Hello, " + "World!")# 连接字符串和变量name = "Python"print("Hello, " + name + "!")# 注意:+运算符要求两边类型一致# 错误示例:print("The answer is " + 42) # 会报错#...
avatar
Hespethorn
HespethornのBlog
GitHub
Recent Posts
Website Info
Article Count :
505
Runtime :
Total Word Count :
844.1k
Last Update :