![](https://img-blog.csdnimg.cn/c7a72e5233af46faa13a2ce3d1e410b6.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Python
文章平均质量分 89
Python
Dontla
调包侠
展开
-
Python logging库(python日志库)Logger(记录器、收集器、采集器)、Handler(处理器)、Formatter(格式化器)、Log Level(日志级别)
Python的logging库是标准库的一部分,旨在为应用程序提供灵活的日志记录功能。它可以轻松地记录不同级别的日志信息,并可以将日志信息输出到不同的目标,比如控制台、文件、远程服务器等。logging库非常适合在开发和生产环境中使用,因为它不仅可以帮助开发人员追踪和调试代码,还可以帮助系统管理员监控应用程序的运行状态。在使用logging库时,首先需要创建一个记录器,然后可以通过这个记录器记录日志消息。# 创建一个记录器# 创建一个处理器# 创建一个格式化器并将其添加到处理器中。原创 2024-07-08 16:02:49 · 1356 阅读 · 0 评论 -
Python defaultdict(可以在访问字典中不存在的键时自动创建默认值)(默认字典、默认值字典)(应用:构建多级字典、模拟类对象动态设置和获取属性、实现图论图结构)(可变字典)
是 Python 标准库模块中的一个类,它扩展了普通字典(dict)的功能。通过使用,可以在尝试访问字典中不存在的键时自动创建默认值,这极大地简化了某些编程模式。# 使用自定义默认值# 输出: {'count': 1, 'total': 59.99}了解这些基本语法和概念之后,你就可以更好地理解的高级应用,并将其有效地应用在各种编程场景中。除了简单的类型如listint和set,可以定义更复杂的工厂函数来满足特定的需求。这些工厂函数可以是任何无参数的函数,它返回的值将用作字典的默认值。原创 2024-07-05 16:55:05 · 1311 阅读 · 0 评论 -
python类私有属性(python私有属性)私有属性是双下划线__开头(名称改写name mangling),单下划线_开头只是约定,标明属性是保护的(保护属性)
的属性:这是一种约定,用来指示该属性或方法主要用于内部使用,不是公开的API的一部分,不应从类外部直接访问。因此,可以说它们是“非公开的”或“受保护的”属性,而非严格意义上的“私有”。Python 中的名称改写或 “name mangling” 主要用途是在类定义中隐藏内部细节,防止属性在子类中被无意覆盖,以及减少从类外部直接访问私有属性的可能性。)开头的属性是一种约定,用来指示属性是保护的,即这个属性应该只在类及其子类中使用,不应该在类的外部直接访问,但是这只是一个约定,并不是Python强制的规则。原创 2024-07-04 17:46:45 · 592 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第3章:函数——26:用 functools.wraps 定义函数修饰器(lru_cache装饰器——数据缓存、字典缓存、计算缓存)
Python中有一种特殊的写法,可以用修饰器(decorator)来封装某个函数,从而让程序在执行这个函数之前与执行完这个函数之后,分别运行某些代码。这意味着,调用者传给函数的参数值、函数返回给调用者的值,以及函数抛出的异常,都可以由修饰器访问并修改。这是个很有用的机制,能够确保用户以正确的方式使用函数,也能够用来调试程序或实现函数注册功能,此外还有许多用途。原创 2024-07-03 13:35:26 · 1276 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第3章:函数——25:用强制关键字参数*—Keyword-only和强制位置参数/—Positional-only来设计清晰的参数列表
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-06-28 10:39:43 · 1039 阅读 · 0 评论 -
Python数学符号(浮点特殊值:-float(‘inf‘)、float(‘nan‘);复数;常数:math.pi;精确分数:fractions.Fraction;十进制数:Decimal模块)
这篇文章将详细探讨Python中几种常用的特殊数学表达和符号,包括浮点特殊值、复数、常数、精确分数和十进制数,以及它们的应用场景和示例代码。这对于金融计算尤其重要,其中精确的小数运算是必需的,因为浮点数可能因其二进制表示而导致精度损失。Python中的浮点数遵循IEEE 754标准,该标准定义了几种特殊的数值,用于表示超出常规浮点数范围的计算结果。模块,Python可以进行基于分数的精确数学计算,避免了浮点数的误差。(我的是0.1),而是有更多的小数位数,显示其内部表示的不精确性。原创 2024-06-27 15:13:27 · 845 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第3章:函数——24:用None和docstring来描述默认值会变的参数(函数默认参数值只在定义函数时计算)函数默认参数为None
有时,我们想把那种不能够提前固定的值,当作关键字参数的默认值。例如,记录日志消息时,默认的时间应该是触发事件的那一刻。所以,如果调用者没有明确指定时间那么就默认把调用函数的那一刻当成这条日志的记录时间。现在试试下面这种写法,假定它能让 when 参数的默认值随着这个函数每次的执行时间而发生变化。这样写不行。因为 datetime.now只执行了一次,所以每条日志的时间戳(timestamp)相同。原创 2024-06-27 13:51:00 · 1209 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第3章:函数——23:用关键字参数来传参(位置参数和关键字参数混合使用、默认参数值、万能形参**kwargs)强制关键字参数、可选参数
*kwargs**kwargs在大多数情况下,调用者只需要沿用这个值就好,但有时也可以明确指定自己想要传的值。这样能够减少重复代码,让程序看上去干净一些。例如,我们要计算液体流入容器的速率。如果这个容器带刻度,那么可以取前后两个时间点的刻度差(weight_diff),并把它跟这两个时间点的时间差(time_diff)相除,就可以算出流速了。一般来说,我们会用每秒的千克数表示流速。但有的时候,我们还想估算更长的时间段(例如几小时或几天)内的流速结果。原创 2024-06-20 17:53:27 · 1528 阅读 · 0 评论 -
Python默认参数陷阱(Dangerous default value [] as argument.)引用传递(建议列表、字典等使用None作为默认参数,不要使用空列表、空字典)
在Python中,对象通过引用传递,这意味着当将列表作为默认参数时,实际上是传递了对同一个列表的引用,而不是每次调用都创建一个新列表。Python中的函数默认值是在函数定义时评估并创建的,而不是在函数调用时。虽然默认参数非常有用,但在使用可变类型(如列表、字典等)作为默认参数时,可能会遇到一些问题。在Python中正确地使用默认参数,尤其是对于可变类型,需要理解其背后的工作原理。作为默认参数,并在函数内部检查其值,确保每次调用函数时都会创建一个新的列表。是在函数定义时创建的同一个列表,每次调用。原创 2024-06-20 14:11:50 · 913 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第3章:函数——22:用数量可变的位置参数给函数设计清晰的参数列表(可变参数*args)(这作者也太抓不住重点了)
让函数接受数量可变的位置参数(positional argument),可以把函数设计得更加清晰(这些位置参数通常简称 varargs,或者叫作star args,因为我们习惯用`*args`指代)。例如,假设我们要记录调试信息。如果采用参数数量固定的方案来设计,那么函数应该接受一个表示信息的message参数和一个values列表(这个列表用于存放需要填充到信息里的那些值)。原创 2024-06-19 17:54:53 · 712 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第3章:函数——21:了解如何在闭包里面使用外围作用域中的变量(nonlocal关键字)作用域bug(scoping bug)尽量少用
found = False # 初始化found变量为Falsedef helper(x): # 定义一个内部函数helper,用于sort方法的key参数found = True # 如果元素在组中,设置found为Truereturn (0, x) # 对组内的元素赋予高优先级return (1, x) # 对组外的元素赋予普通优先级numbers.sort(key=helper) # 使用helper函数作为key来排序numbers列表。原创 2024-06-18 15:13:00 · 830 阅读 · 0 评论 -
python __call__(实例化对象的时候返回一个函数,调用这个函数的时候会执行__call__)(将类实例用作回调函数)(类装饰器)
在Python中,__call__是一个特殊方法(也称为魔术方法),它可以定义在任何类中。当实例被当作函数调用时,__call__方法就会被触发。这使得实例的行为模仿函数,从而可以接收参数并返回值。self.n = nresult = add_five(3) # 调用__call__方法,输出8在上面的示例中,创建了一个名为Adder的类,它接受一个初始化参数n。__call__方法使得Adder类的实例能够直接被调用,并向其中传递一个参数x,返回n + x的结果。原创 2024-06-18 15:05:59 · 823 阅读 · 0 评论 -
Python类的优势及应用场景深度分析(代码封装与组织、继承与代码复用、多态与接口、状态管理与行为封装)(python class)
使用 Python 类相较于其他解决方案在多个方面展示出显著优势,尤其在代码的组织、可维护性、扩展性及多态性方面。本文将深入探讨使用类的优势,并通过具体的代码示例阐明其在特定应用场景下的应用价值。在深入探讨 Python 类的这些优势后,可以清楚地看到,尽管其他编程技巧如函数或模块也可用于解决类似问题,但在需要结构化和可维护的大规模应用程序中,类提供了无可比拟的优势。这种封装性不仅帮助保护数据的完整性,还提高了代码的可读性和易维护性。这不仅减少了代码的重复,还增强了代码的可维护性。原创 2024-06-18 15:00:47 · 1452 阅读 · 0 评论 -
Python **运算符、*运算符(python*args、python**kwargs:参数解包、参数拆包、容器解包容器、序列解包、元组解包)强制关键字参数*、多个位置参数*args
*在函数定义中使用**运算符可以让函数接受任意数量的关键字参数。这些参数在函数内部被存储在一个字典中。适用于多级函数调用通过深入了解**运算符在Python中的这种用法,可以更加高效地利用Python的动态特性和强大的函数调用机制。这不仅增强了代码的灵活性,也提升了其可扩展性和可维护性。原创 2024-06-14 16:55:31 · 1014 阅读 · 0 评论 -
Python模块级变量(python模块变量)(实际开发中建议将变量封装在类或函数集合中,不建议直接定义模块级变量)
Python作为一门高级编程语言,其模块化特性极大地增强了代码的可重用性和可维护性。模块级变量,作为模块结构中的一个关键概念,允许数据在模块内部各个部分之间共享。本文将深入探讨模块级变量的概念、用途、优点以及潜在的问题,并通过示例展示如何有效地使用模块级变量。模块级变量是在模块的最顶层定义的变量,这意味着它们不属于任何类或函数。这些变量在模块内的任何地方都可见,可被模块内的函数、类和其他结构访问。建议将相关的模块级变量封装在一个类或一个封装的函数集合中,提供接口进行访问和修改。原创 2024-06-14 16:34:31 · 928 阅读 · 0 评论 -
Python 中的 Global 和 Nonlocal 关键字(python global声明全局变量、python nonlocal声明外层非全局作用域变量,主要用在嵌套函数中)模块作用域
在 Python 编程中,global和nonlocal关键字是用来在函数或其他块中修改外部作用域变量的。这两个关键字在管理变量作用域时非常有用,尤其是在嵌套函数和大型项目中。本文将详细介绍这两个关键字的用法、区别以及实际应用场景。global关键字用于在函数内部声明变量为全局变量。当需要在一个函数内修改全局作用域中的变量时,就需要使用global关键字。nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。它主要用在嵌套函数中,当需要修改嵌套作用域内的变量时。原创 2024-06-14 14:21:19 · 1388 阅读 · 0 评论 -
Python对象引用(传对象引用)(python值传递、python引用传递、python传值、python传引用、python引用)不可变数据类型、python传参、深拷贝、浅拷贝、id()函数
值传递指的是在调用函数时,实际传递的是变量的副本(拷贝),而不是变量本身。这意味着在函数内部对参数的修改不会影响到原始数据。引用传递则相反,传递的是变量的引用,而不是副本。这样,函数内部对参数的任何修改都会直接影响到原始数据。通过以上的探讨和示例,可以看出 Python 中的参数传递虽然表面上简单,实则包含了丰富的细节和深层次的理解。掌握了这些知识,可以帮助开发者更有效地管理内存使用,设计更安全和高效的函数。原创 2024-06-14 13:38:40 · 847 阅读 · 0 评论 -
Python编码规范:Final newline missing警告(最后一行需要增加空行、文件末尾需要空行、末行换行、代码文件以空行结束、以空行结尾)(Git钩子pre-commit)检查空行脚本
根据POSIX定义,一个文本文件应该由一系列行组成,每一行都以换行符(\n)结束。因此,如果最后一行没有以换行符结束,某些Unix工具可能不会将这最后一行视为有效的文本行。虽然Python解释器通常可以正确处理这种情况,但这可能会在使用其他工具或库时导致问题。原创 2024-06-13 18:00:16 · 910 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第3章:函数——20:遇到意外状况时应该抛出异常,不要返回None(gradual类型系统)python函数模板 python函数示范
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-06-11 17:06:54 · 970 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第3章:函数——19:不要把函数返回的多个数值拆分到三个以上的变量中(将函数返回值定义一个轻便类,或使用nametuple,见37条)
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-06-07 17:58:55 · 962 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——10:用赋值表达式减少重复代码(海象操作符:=)(避免让人误以为只在局部使用的变量是一个重要变量)
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-06-05 18:16:26 · 901 阅读 · 0 评论 -
python loop-and-a-half模式(循环半)(while condition --> while True break)(可用海象操作符:=替代)(沃尔拉斯运算符)
Loop-and-a-half模式主要用于处理那些需要在循环中途进行条件判断以决定是否继续循环的场景。传统的while循环可能需要在循环体的开始和结束分别进行条件判断,而Loop-and-a-half模式通过在循环体中间进行一次判断,减少了代码重复和可能的错误。原创 2024-06-05 17:23:14 · 909 阅读 · 0 评论 -
python lambda函数与延迟执行(python匿名函数)(lambda arguments: expression)(动态数据处理、事件驱动系统、条件执行与策略模式)
print(result) # 输出:7延迟执行,顾名思义,指的是代码并非在其定义处立即执行,而是等到某个特定时刻或条件满足时才触发执行。这一机制在处理大量数据流、响应式编程、事件驱动编程等领域尤为重要,能够有效提升程序的响应速度和资源利用率。原创 2024-06-05 13:56:41 · 1050 阅读 · 0 评论 -
python 内置map()函数(高效处理序列数据方法,将函数应用于一个序列的每个元素)(懒加载)
map()function: 是一个函数,map()将这个函数应用于后面参数中的每个元素。iterable: 一个或多个序列,map()将从中取元素应用前面的函数。map()函数返回一个迭代器,即一个map对象。这个对象懒加载其元素,只有在迭代至某元素时,才会计算并返回该元素。这种处理方式使得map()在处理大量数据时更为内存高效。原创 2024-06-05 13:27:53 · 604 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——9:不要在for与while循环后面写else块(for else语法、while else语法)
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-06-03 15:12:15 · 858 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——8:用zip函数同时遍历两个迭代器(zip-longest)
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-06-03 13:43:07 · 790 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——7:尽量用enumerate取代range
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-06-03 11:32:40 · 590 阅读 · 0 评论 -
python移位操作符(左移位操作符<<、右移位操作符>>)(允许开发者对整数进行位操作,乘2或除2)(左移操作、右移操作)(位掩码操作|=)(位运算、位操作、位移操作)
左移位操作符 (这些操作符用于对二进制数的位进行左或右移动,通常用于快速的乘法或除法运算,以及进行位级的数据操作和调整。原创 2024-05-31 17:12:22 · 1195 阅读 · 0 评论 -
python zip()函数(将多个可迭代对象的元素配对,创建一个元组的迭代器)zip_longest()
zip()原创 2024-05-31 11:01:51 · 927 阅读 · 1 评论 -
【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——6:把数据结构直接拆分到多个变量里,不要专门通过下标访问:unpacking机制、python解包
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-05-30 17:43:54 · 945 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——5:用辅助函数取代复杂的表达式(parse_qs()函数)
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-05-30 13:27:47 · 1045 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——4:学会使用f-string(取代C类型fstring和str.format)repr()函数
字符串。原创 2024-05-28 17:22:50 · 779 阅读 · 0 评论 -
Python隐式字符串拼接(两个或多个字符串字面量紧邻在一起(仅用空白字符分隔,通常是空格或换行符),Python解释器会自动将它们合并为一个字符串)(隐式拼接)(相邻字符串拼接)
隐式字符串拼接是Python中的一个特性,当两个或多个字符串字面量紧邻在一起(仅用空白字符分隔,通常是空格或换行符),Python解释器会自动将它们合并为一个字符串。这种方式无需使用任何额外的操作符如加号 (原创 2024-05-28 17:10:37 · 612 阅读 · 0 评论 -
python fstring教程(f-string教程)(python3.6+格式化字符串方法)(%惰性格式化%)
F-string,全名为Formatted String Literals,通过在字符串前添加f或F,使得字符串能够包含Python表达式的值。这些表达式被大括号{}包围,并在运行时计算,其结果直接插入到字符串中。name = "世界"message = f"你好,name = "世界" message = f"你好, {name }!" print(message) # 输出: 你好,世界!!print(message) # 输出: 你好,世界!原创 2024-05-28 16:39:24 · 984 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——3:了解bytes与str的区别(字节串、Unicode转义序列、Unicode三明治)
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-05-28 14:11:01 · 614 阅读 · 0 评论 -
【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——1:查询自己使用的python版本 2:遵循pep8风格指南
Effective Python——编写高质量Python代码的90个有效方法。原创 2024-05-28 14:08:23 · 1045 阅读 · 0 评论 -
Python字符串和字节串转换辅助函数(工具函数)to_str()、to_bytes()(对encode()、decode()的封装)(确保数据类型在不同操作中的正确性和安全性,减少数据类型错误)
"""Args:Returns:"""else:"""Args:Returns:"""else:这两个辅助函数to_str和to_bytes提供了一个简洁的方式来确保数据类型在不同操作中的正确性和安全性。通过使用这些函数,开发者可以减少数据类型错误,并提高代码的可读性和可维护性。原创 2024-05-28 11:35:30 · 805 阅读 · 0 评论 -
python linux服务器ssh简单爆破(测试用户名密码)(连接ssh服务器)(测试登录ssh服务器)
这段代码的目的是通过SSH协议尝试连接到指定的服务器,使用提供的用户名和密码组合列表进行身份验证。它适用于需要验证多个凭据对有效性的场景,比如在你有一个用户名和密码列表,需要检查哪些能够成功登录到SSH服务器。注意,此代码实际上会对每个凭证组合尝试四次连接(每个组合两次尝试,循环两遍),这可能不是预期的行为(主要是因为手动登录的时候,错误三次将会提示重新尝试,担心这个,所以每个组合尝试登录两次)。使用列表推导式生成用户名和密码的所有可能组合,结果是一个包含元组的列表,每个元组包含一对用户名和密码。原创 2024-04-07 11:11:34 · 1239 阅读 · 0 评论 -
python asyncio库(协程Coroutine)、I/O bound(输入/输出受限)和Network bound(网络受限)、Async/Await语法、基于epoll的实现
在这种情况下,提高性能的关键是优化I/O操作,例如通过使用缓存、异步I/O操作或提高数据传输效率来减少对慢速I/O资源的依赖。在asyncio这样的异步编程库中,通过使用事件循环和协程,可以同时发起多个非阻塞的I/O请求,使得程序在等待I/O操作完成时不会被阻塞,从而能够在单个线程内并发处理多个任务。该库围绕事件循环构建,这是asyncio架构的核心,允许开发者并发运行多个任务,从而在像web服务器、I/O受限和网络受限的应用程序中有效使用I/O并提高性能。的核心,负责程序的运行,以及管理所有的异步任务。原创 2024-04-02 17:57:19 · 1108 阅读 · 0 评论 -
【python高级编程教程】笔记(python教程、python进阶)第五节:(2)python中序列类型的abc继承关系(略)(3)列表+、+=、append()、extend()方法区别
Python lists are versatile(多功能的), mutable sequences, allowing you to store an ordered(有序的) collection(集合) of items.Python列表是多功能的、可变的序列,允许你存储有序的项目集合。These items can be of any type, and lists are capable of growing and shrinking(缩减) as needed.原创 2024-03-26 23:58:12 · 1205 阅读 · 0 评论