首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

模块函数vs staticmethod vs classmethod vs no decorators:哪个成语更pythonic?

模块函数、静态方法、类方法和不使用装饰器的函数之间的区别是:

模块函数:在模块级别定义的函数,只能在当前模块内部调用,不能被其他模块或包访问。

静态方法:在类级别定义的静态方法,不需要创建类的实例就可以直接通过类名调用,也可以通过实例的类名.方法名()调用。

类方法:在类级别定义的方法,需要通过实例的类名.方法名()调用。

不使用装饰器的函数:在函数级别定义的函数,不能通过类名或实例的类名.方法名()调用。

在Python中,使用成语“事不过三”更Pythonic,因为它比“没有规矩”更简洁,更易读。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python装饰器的高级用法

原文地址 https://www.codementor.io/python/tutorial/advanced-use-python-decorators-class-function 介绍 我写这篇文章的主要目的是介绍装饰器的高级用法...装饰器 vs 装饰器模式 Decorator模式是一个面向对象的设计模式,它允许动态地往现有的对象添加行为。当你装饰了一个对象,在某种程度上,你是在独立于同一个类的其他实例的基础上扩展其功能。...Python装饰器不是装饰器模式的实现,它在函数、方法定义的时候添加功能,而不是在运行的时候添加。...Python有一些内置的装饰器,比如:staticmethodclassmethod 阅读完本文还需要学习什么呢?...通常是没有比我在文章中展示的装饰器复杂的了,如果你有兴趣学习更多关于改变类功能的方法,我建议您阅读下继承和OOP设计原则。或者你可以试试阅读一下元类。

71390
  • Python 中的 Return Self 到底是个啥?

    __bool__() 从类内部或外部调用 bool() 内置函数来检查堆栈是否为空。 .__bool__()的加入使得该类可以在 Pythonic 条件句中使用,例如 if not stack:......要在这种情况下使用 TypeVar,我们可以从 Python 的类型模块中导入它,并在构造函数中给我们的类型命名: # stack.py from typing import TypeVar TStack...这些就是为什么Self类型比受欢迎的主要原因。 在下一节中,我们将探索 Self 和 TypeVar 的另一种选择,__future__ 模块。...虽然 __future__ 模块可以用类名注释方法,但这并不是最好的做法,因为 Self 类型更直观,符合 Pythonic。另外,在脚本的顶部记住从 __future__ 导入可能会很麻烦。...然而,随着typing模块和类型提示语法的引入,我们现在有了一种标准、更有表现力的方式来注释类型。

    18411

    一文读懂@Decorator装饰器——理解VS Code源码的基础(下)

    一、@Decorator装饰器语法糖 《一文读懂@Decorator装饰器——理解VS Code源码的基础(上)》中手写的装饰器函数存在两个可优化的点: 是否可以让装饰器函数关注业务逻辑?...《一文读懂@Decorator装饰器——理解VS Code源码的基础(上)》中Step1, Step2是通用逻辑的,每个装饰器都需要实现,简单来说就是可复用的。 是否可以让装饰器写法简单?...纯函数实现的装饰器,每装饰一个属性都要手动执行装饰器函数,详细内容见《一文读懂@Decorator装饰器——理解VS Code源码的基础(上)》中Step4步骤。...关闭后编译的代码会简单!...二、带参数的装饰器:装饰器工厂函数 在《一文读懂@Decorator装饰器——理解VS Code源码的基础(上)》的「记录函数耗时」例子中,如果我们希望在日志前面加个可变的标签,如何实现?

    78330

    python基于函数替换的热更新原理介绍

    但是要想实现一个理想可靠的热模块又非常的困难。 1.基于reload reload作为python官方提供的module更新方式,有一定作用,但是很大程度上并不能满足热的需求。...但这种方式本质上并不是热,也没有保留程序的执行状态,可以看做是一个自动化重启的工具。 3.基于函数替换 下面我们从简单到深入一步步的说明函数替换的热原理。...3.1 __dict__ vs attrs 先来看一个简例: class Foo(object): STA_MEM = 'sta_member variable' @staticmethod...update_type(name, old_mod, new_mod, new_attr) 上面重写了3.2中的reload_with_func_replace,这样只要在RELOAD_MOD_LIST中指定需要热模块或者定义一个忽略热的列表模块...,然后需要的时候触发一个指令调用上面的热流程,便可实现运行时对sys.modules中部分模块实施热更新。

    2.5K30

    2022 年,Babel vs TypeScript,谁更适合代码编译【补充参考文献】

    core-js 是一套模块化的 JS 标准库,提供了 polyfill 的核心实现。...Babel 的 @babel/polyfill 模块包含了 core-js 和 regenerator-runtime 来模拟完整的 ES2015+ 环境。...比如 const/let 变 var,箭头函数变 function,async+await 变 Promise.then 这些,不会引入内置对象的扩展,比如你要运行的浏览器不支持 Promise,编译后也不会带一个完整的...可以使用 @babel/plugin-transform-runtime 插件为库的代码提供一个沙盒环境,把 polyfill 变成模块化的引入,代码重用的同时避免全局污染。...TS 文档[4]中也推荐这种方式,但如果构建输出文件和源码差别不大的话,可直接使用 TS 编译。

    60220

    2021 年 Python 程序员必备的 VS code 插件!

    VS Code在没有这个扩展的情况下也会支持Python代码高亮显示。但还是推荐你安装Python这个扩展,Python是由微软自己开发的,与VS Code是同一个创建者。...它对提高Python开发人员的效率非常有用,VS Code会自动建议你在打开第一个.py文件后立即安装它。 但为什么要安装它呢?...大大减少了开发人员的工作量,关于这个扩展最好的事情是它遵循docstring的所有标准格式,包括谷歌,docBlockr,Numpy,Sphinx和即将推出的PEP0257,此外,这个文档字符生成器支持args、kwarg、decorators...Python Type Hint 为内置类型、预估类型、typing 模块提供类型提示补全目录。此外,它还可以在工作区中搜索 Python 文件以进行类型估计。 ? 7、jupiter ?...jupiter是我最喜欢的VS Code扩展之一。与Jupyter Notebooks的集成是我最喜欢PyCharm功能之一,尽管公平地说,我喜欢PyCharm的集成,而不是VS Code的集成。

    1.8K20

    【深度学习】深度学习中的单元测试

    例如,对于加法器函数,我们将有如下测试用例。(稍后我们将看到一个深度学习的示例。) 你可以用正输入、零输入、负输入、正输入和负输入测试用例。...如果我们正在测试的函数/方法的输出与单元测试中为所有输入案例定义的输出相等,那么你的单元将通过测试,否则它将失败。你将确切地知道哪个测试用例失败。可以进一步调查,找出问题所在。...强制你编写具有明确定义的输入和输出的模块化和可重用代码。因此,你的代码将更易于集成。 提高了更改/维护代码的信心。它有助于识别代码更改引入的bug。...调试变得容易,因为你可以知道哪个单元失败了,以及哪些特定的测试用例失败了。 Python中的单元测试 每种语言都有自己的工具和包可用于进行单元测试。Python还提供了一些单元测试框架。...接下来,我将向你展示如何使用VS代码测试资源管理器通过UI运行这些测试。 在VS Code[3]中运行Python单元测试 在VS代码中,Python中的测试在默认情况下是禁用的。

    2.1K20

    编写高质量代码 改善 Python 程序的 91 个建议

    建议1:理解Pythonic概念 建议2:编写Pythonic代码 建议3:理解Python与C语言的不同之处 建议4:在代码中适当添加注释 建议5:通过适当添加空行使代码布局更为优雅、合理 建议6:编写函数的...建议17:考虑兼容性,尽可能使用Unicode 建议18:构建合理的包层次来管理module 建议19:有节制地使用from…import语句 建议20:优先使用absolute import来导入模块...连接字符串应优先使用join而不是+ 建议28:格式化字符串时尽量使用.format方式而不是% 建议29:区别对待可变对象和不可变对象 建议30:[]、()和{}: 一致的容器初始化形式 建议31:记住函数传参既不是传值也不是传引用...建议32:警惕默认参数潜在的问题 建议33:慎用变长参数 建议34:深入理解str()和repr()的区别 建议35:分清staticmethodclassmethod的适用场景 建议36:掌握字符串的基本用法...46:使用traceback获取栈信息 建议47:使用logging记录日志信息 建议48:使用threading模块编写多线程程序 建议49:使用Queue使多线程编程安全 建议50:利用模块实现单例模式

    68430

    【译】PEP 318--函数和方法的装饰器

    在概念上只是声明一个函数,使用其名称三遍就很不 pythonic。此问题的解决方案是将方法的转换移到方法本身的声明附近。...自 2.2 版本以来,Python 中提供了两个装饰器(classmethod() 和 staticmethod() )。大约从那时起,就已经假设最终会在语言中添加对它们的一些语法支持。...设计目标 新的语法应该: 适用于任意包装器(wrapper),包括用户定义的可调用对象以及现有的内置类型classmethod() 和 staticmethod() 。...第一,它很容易破坏源代码的“可扩展性”——你无法再通过搜索“def foo(”来找到函数的定义;第二,严重的是,在使用多个装饰器的情况下,语法将会非常笨拙。...例子 在 comp.lang.python 和 python-dev 邮件列表里的许多讨论,都集中在装饰器的使用上,认为它是一种比 staticmethod() 和 classmethod() 内置函数简洁的方法

    48410

    Python - 变量的作用域

    elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的 变量搜索路径是:局部变量->全局变量 局部变量vs...E-Enclosing function locals;外部嵌套函数的变量 G-Global(module);函数定义所在模块的变量 B-Builtin(Python);Python内建函数的名字空间...这是我们代码找变量的顺序,倘若最后一个python内建函数也没有找到的话就会报错了 什么是内建函数呢?...abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod...print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod

    1.6K30

    改善Python程序的一些建议

    第一章:引论 建议1、理解Pythonic概念----详见Python中的《Python之禅》 建议2、编写Pythonic代码 (1)避免不规范代码,比如只用大小写区分变量、使用容易混淆的变量名、害怕过长变量名等...就不用过多考虑了 建议18:构建合理的包层次来管理Module 第三章:基础用法 建议19:有节制的使用from...import语句,防止污染命名空间 建议20:优先使用absolute import来导入模块...使用列表解析可以使代码清晰,同时效率更高 建议31:函数传参数,既不是传值也不是传引用,而是传对象或者说对象的引用 建议32:警惕默认参数潜在的问题,特别是当默认参数为可变对象时 建议33:函数中慎用变长参数...,而print(var)默认调用str函数 (3)repr函数的返回值一般可以用eval函数来还原对象 (4)两者分别调用对象的内建函数__str__()和__repr__() 建议35:分清静态方法staticmethod...和类方法classmethod的使用场景 作者:笑虎 源自:https://zhuanlan.zhihu.com/p/32817459 声明:文章著作权归作者所有,如有侵权,请联系小编删除

    60670

    编写高效且优雅的 Python 代码(

    本文作为进阶系列的文章,从基础的语法到函数、迭代器、类,还有之后系列的线程 / 进程、第三方库、网络编程等内容,共同学习如何写出更加 Pythonic 的代码 部分提炼自书籍:《Effective Python...》&《Python3 Cookbook》,但也做出了修改,并加上了我自己的理解和运用中的最佳实践 Pythonic 列表切割 list[start:end:step] 如果从列表开头开始切割,那么忽略...array, 1, True) # TypeError: get_indexs() takes 1 positional argument but 3 were given 关于参数的默认值 算是老生常谈了:函数的默认值只会在程序加载模块并读取到该函数的定义时设置一次...@classmethod & @staticmethod 资料: Python @classmethod and @staticmethod for beginner Difference between...staticmethod and classmethod in python @classmethod和@staticmethod很像,但他们的使用场景并不一样。

    1.1K30

    9个Python 内置装饰器: 显著优化代码

    装饰器可以帮助您编写更少、简单的代码来实现复杂的逻辑并在任何地方重用它。...@classmethod 在 Python 类中,有 3 种可能的方法类型: 实例方法:绑定到实例的方法。他们可以访问和修改实例数据。...实例方法可以定义为普通的 Python 函数,只要它的第一个参数是 self。但是,要定义一个类方法,我们需要使用@classmethod 装饰器。...通过将相关函数组织到类中的静态方法中,我们的代码将变得更有条理,也容易理解。 要定义一个静态方法,我们只需要使用@staticmethod 装饰器。...@atexit.register 来自 atexit 模块的 @register 装饰器可以让我们在 Python 解释器退出时执行一个函数

    38820

    独家 | 9个可以显著优化代码的Python内置装饰器

    Python函数装饰器是“Python zen”哲学的最佳特性。 装饰器助力用更少、简单的代码来实现复杂的逻辑,并在其他地方实现重用。...@total_ordering: 填充缺失排序方法的类装饰器 函数工具模块中的@total_sordeng装饰器为预定义Python类生成缺失比较方法。...可以将实例方法定义成普通的Python函数,它的第一个参数是自身;如果需要定义一个类方法,则需要使用@classmethod装饰器。...通过将相关函数组织成类的静态方法,使代码变得更加有组织、容易理解。 使用@staticmethod装饰器便可以定义一个静态方法,来看看下面这个例子: 8....@atexit.register:注册一个程序正常终止的函数 atexit模块的@register装饰器允许在Python解释器退出时执行一个函数

    49520

    总结了90条简单实用的Python编程技巧!

    大数据文摘转载自达纳斯特 编码原则 建议1:理解 Pythonic 概念—-详见 Python 中的《Python之禅》 建议2:编写 Pythonic 代码 (1)避免不规范代码,比如只用大小写区分变量...使用列表解析可以使代码清晰,同时效率更高 建议31:函数传参数,既不是传值也不是传引用,而是传对象或者说对象的引用 建议32:警惕默认参数潜在的问题,特别是当默认参数为可变对象时 建议33:函数中慎用变长参数...,而print(var)默认调用str函数 (3)repr函数的返回值一般可以用eval函数来还原对象 (4)两者分别调用对象的内建函数 str ()和 repr () 建议35:分清静态方法 staticmethod...和类方法 classmethod 的使用场景 库的使用 建议36:掌握字符串的基本用法 建议37:按需选择 sort() 和 sorted() 函数 sort() 是列表在就地进行排序,所以不能排序元组等不可变类型...模块编写多线程程序 建议49:使用 Queue 模块使多线程编程安全 设计模式 建议50:利用模块实现单例模式 建议51:用 mixin 模式让程序更加灵活 建议52:用发布-订阅模式实现松耦合

    33731
    领券