python中一些杂七杂八的知识点整理

前言

在阅读源码、解决问题、实际工作中遇到的一些碎片化的知识点,做一个记录;都是一些可以直接百度搜索到简单的小tips,包括了函数、约定的规范、资源等等。


一、函数

  • modf() 方法返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。

代码示例:
import math
math.modf(x)
print("math.modf(100.12) : ", math.modf(100.12)) -->math.modf(100.12) : (0.12000000000000455, 100.0)
注意点:modf()是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法。

  • python中assert的用法

python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况。
datetime中源码:
assert daysecondswhole == int(daysecondswhole) # can’t overflow
s = int(daysecondswhole)
assert days == int(days)
d = int(days)

  • classmethod修饰符

classmethod是用来指定一个类的方法为类方法,不用通过__init__初始化一个类的实例,再来调用方法。 通常使用在对象重构上。

举个例子:假如有一个类,__init__要求传入的参数类型是int,而当用户传入一个str类型的参数,怎么实例化这个对象?
方案一:对用户提供的数据,先做参数格式化(str–>int),然后再实例化对象。
方案二:python提供了@classmethod,直接在类里面定义参数格式化方法(str–>int),实例化对象的时候,直接调用。

这样带来的好处在哪里?我举个例子:
对于时间,通常有各种不同的表示方法,例如:2021-10-5、2021/10/5、2021年10月5号等人们在生产生活过程中形成一些通用的规范,我们实现datetime的时候,针对不同格式提供不同的@classmethod,这样做到接口统一、节省成本,方便简单,而不用每个人都去实现一个这样的转换,可乐而不为呢?
真正讲解得比较透彻的还是这个博客:https://www.jb51.net/article/168278.htm

在这里要明确讲解一下,类方法定义与调用:
普通类中方法定义与调用:
在这里插入图片描述classmethod修饰器方法的定义与调用:
在这里插入图片描述

  • python @property装饰器

python的@property是python的一种装饰器,是用来修饰方法的; 两个作用:

作用一:我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改。
作用二:对属性参数进行检查、判断,避免无效参数。
特别注意,以@property修饰的方法,直接以属性的方式访问,不要加括号。在这里插入图片描述

以上来源:https://zhuanlan.zhihu.com/p/64487092

  • python 中Python-typing与Any

我们知道python是一种解释型的动态脚本语言,不像c和java一样需要类型标注。但实际上python也可以指定变量类型,使用python-typing就可以指定变量类型(需要python3.5以上版本才能支持),其中有一种类型令小编各位在意:python支持any类型,那么什么是any类型呢?------》任意类型,动态适应
更加详细信息查看: https://www.w3cschool.cn/article/64704123.html

二、规范

  • _XXX方法/变量 , 以 _(单下划)线开头的变量或者方法(约定)

python中不存在私有变量一说,若是遇到需要保护的变量,使用小写和一个前导下划线。但这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它。但实际上,外部类还是可以访问到这个变量。

  • XXX_, 以_(单下划)线结尾的变量或方法

通常用于和Python关键词区分开来,比如我们需要一个变量叫做class,但class是Python的关键词,就可以以单下划线结尾写作class_

  • __XXX,以__(双下划)线开头的变量或方法

这表示这是一个私有成员(属性或者方法)。它无法直接像公有成员一样随便访问。双下划线开头的命名形式在Python的类成员中使用表示名字改编,即如果Test类里有一成员__x,那么dir(Test)时会看到_Test__x而非__x。这是为了避免该成员的名称与子类中的名称冲突,方便父类和子类中该成员的区分识别。
来源于:https://www.jb51.net/article/169609.htm

  • __XXX__, 以 __(双下划线)开头、(双下划线结束)的变量/方法,一种约定,Python专用的标识,用来区别其他用户自定义的命名,以防冲突

前后双下滑线方法是python自己定义出来,供自己调用的。这些方法会在特定的条件下被触发执行。下面是常用的一些前后双下划线方法。
__str__ 当将对象转换成字符串时会执行
__init__ 初始化方法,为对象变量赋值
__new__ 构造方法,创建一个对象
__call__ 在对象后面加括号会执行该方法
__getattr__ 当使用对象.属性时,若属性不存在会调用该方法
__setattr__ 当使用对象.属性 = 值,会调用该方法
__iter__ 类内部定义了该方法,对象就变成了可迭代对象
__add__ 当两个对象使用+号会调用该方法
__enter__和__exit__ 上下文管理
class Foo(object):
def __enter__(self):
print(‘开始’)
return Foo()
def __exit__(self, exc_type, exc_val, exc_tb):
print(‘结束’)
with Foo() as obj: #with后面的Foo()会执行__enter__()方法,并将返回值赋给obj
print(123) #缩进代码执行完成后会执行__exit__()方法
#开始
#123
#结束.
以上内容来源于:https://www.cnblogs.com/wang-kai-xuan/p/11407832.html

  • __all__的使用

使用from <模块名> import *导入一个模块里所有的内容时,本质上是去查找这个模块的__all__属性,将__all__属性里声明的所有内容导入。如果这个模块里没有设置__all__属性,就会导入这个模块里的所有内容。

  • __name__的使用,最常用发如下:
 def main():
    pass
if __name__ == '__main__':

三、其他

  • pyi文件

pyi文件,存根文件是一个文本文件,其中包含方法和函数的签名,但不包含其实现。 它们的主要功能是在代码中添加出于某种原因您无法更改的类型提示。

背景:python 语言是一门动态语言,即变量与函数类型是动态自适应的,python只有在解释器去解释的时候,才能检测出问题。而其他类似C、C++、Java等语言都是静态语言,变量以及函数申明类型,这样在编译阶段就能检测出问题,不需要等到执行的时候才发现异常。对于比较复杂且大的项目或者比较关键的核心代码,python也需要明确每个变量与函数的类型申明,这样开发、调试都比较方便。

python的解决办法:python推出了一系列 类型检查工具。编写更便捷、编码更可靠、重构更放心。其中pyi就是一种这样集成在各个IDE中一种注释性、检测的文件类型。

pyi例子介绍:https://www.cnblogs.com/jaysonteng/p/15012202.html
python类型检查pyi_Python 类型检查指南:https://blog.csdn.net/weixin_39925031/article/details/110908060
Python 静态类型解析工具简介和实践:https://blog.csdn.net/qq_40494873/article/details/120623029

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值