Python 中是否可以使用太多函数?

2023-11-27

这是一个广泛的问题。

当我发现自己必须编写越来越长的脚本时,我发现我的本能是将所有内容分解为小型函数;然而,这最终导致函数调用函数调用函数调用函数……我想知道我是否完全以错误的方式思考这个问题。

删节脚本可能如下所示。抱歉,这有点做作。

def simple_task_1():
    return

def simple_task_2():
    return

def simple_task_3():
    return

def simple_task_4():
    return

def complex_task_1():
    simple_task_2()
    simple_task_3()
    simple_task_4()
    return

def startup():
    simple_task_1()
    complex_task_1()
    simple_task_4()

def finish():
    # other function calls
    return

def main():
    startup()
    finish()

那么,这是使用函数的正确方法吗?是否有一个客观点可以说您在彼此内部进行了太多函数调用?我是否应该为只完成一次的任务创建函数?


Python 有“递归”限制。如果你达到了这个标准,那么你可能使用了太多的函数,否则这可能没什么大不了的——通常,如果你递归地调用一个函数,你只能达到递归限制(然后usually因为你做错了什么并且在应该打破的时候没有打破)。

功能的重点是让您的生活更轻松。如果你发现你有太多的功能并且实际上并没有让你的生活变得更轻松,那么这可能是一个问题。例如:

def add(x,y):
    return x+y

这是一个毫无意义的函数,但是,如果您愿意,最好避免它sinc:

def sinc(x):
    return math.sin(x)/x

这实际上可能很有用,因为新函数名称比其中执行的代码更具描述性。另外,稍后如果您发现需要删除 x=0 处的奇点,您可以将其添加到sinc easily.

最终,可读性才是最重要的。如果使用函数使您的代码更易于阅读,那么它可能是值得的(即使您只从一个地方调用它并且可以轻松内联它)。如果您确实关心性能,则存在一些灰色区域(函数的执行时间确实比内联代码长一点),但您不应该以此为借口来内联难以阅读的内容,除非您能够可靠地证明这是一个性能瓶颈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中是否可以使用太多函数? 的相关文章

随机推荐

  • 创建满足给定条件的连续天数组

    我在 SQL Server 中有以下数据结构表 ID Date Allocation 1 2012 01 01 0 2 2012 01 02 2 3 2012 01 03 0 4 2012 01 04 0 5 2012 01 05 0 6
  • 引起一致 GC 流失的技术

    我正在寻找基准测试 同时应对大量正在进行的垃圾收集 我之前已经对其在稳定的单线程运行中的行为进行了基准测试 现在我想在压力更大的 JVM 中进行相同的测试 本质上 我希望后台线程以相当一致的速度创建和销毁对象 我正在寻找有关如何实现稳定但
  • git 子模块到底是如何工作的

    The gitmodulefile 仅指定模块存储库 url 如何git submodule知道要下载哪个版本吗 它似乎总是检查最新版本 那么 开发者如何保证主项目和子模块之间的兼容性呢 您的子模块被表示为具有特殊模式的特殊条目 称为git
  • 使用 Dijkstra 算法寻找最短路径

    我需要找到图的两个顶点之间的最短路线 我有一个矩阵 其中包含所有权重 我该怎么做 目前 我有以下代码 private int Dijkstra int start int end bool done new bool 8 int paren
  • 解析 LESS 客户端

    我可以解析 LESS 客户端并返回结果吗 我目前正在按照文档中的建议使用 即包含较少的文件 然后缩小较少的解析器 我希望能够返回原始 css 以便我可以将其保存为 css 文件 我不想安装node js之类的东西 我想要一个客户端解决方案
  • 如何“连接” boost::mpl::向量

    我必须使用不同的向量 mpl vector
  • git log --decorate 输出的差异: (HEAD -> master) 与 (HEAD, master)

    当我获取 GIT 存储库的日志时 git log oneline decorate graph 输出是这样的 44025ed HEAD gt master second commit adf2dbb first commmit 在另一个仓库
  • 如何获得给定日期的星期几?

    我想了解以下内容 给定日期 datetime对象 对应的星期几是哪一天 例如 星期日是第一天 星期一 第二天 等等 然后如果输入类似于今天的日期 Example gt gt gt today datetime datetime 2017 1
  • 通过子字符串快速过滤字符串集合?

    您知道一种快速过滤字符串列表以获得包含指定字符串的子集的方法吗 明显的实现是迭代列表 检查每个字符串是否包含搜索字符串 有没有办法对字符串列表建立索引 以便搜索速度更快 维基百科文章列出了几种索引子字符串的方法 你有 后缀树 后缀数组 N
  • MongoDB:插入具有特定ID而不是自动生成的ObjectID的文档

    我需要使用java在MongoDB上插入文档 使用特定的id而不是自动生成的ObjectID 要插入一个文档或更新 如果存在 我尝试使用findOne搜索id 如果不存在则insertid 然后findAndModify 它有效 但我不认为
  • Bash 命令 :(){ :|:& };: 将生成进程直至内核死亡。你能解释一下语法吗?

    我在看这一页并且无法理解这是如何工作的 该命令 以指数方式生成子进程 直到您的盒子锁定 但为什么 我不太了解的是冒号 user host 定义一个名为的函数 它会自行生成 两次 一个管道连接到另一个管道 并自行设置背景 带换行符 重命名 功
  • 牛轧糖中的 TransactionTooLargeException

    例外 05 12 15 42 45 791 11043 11043 E UncaughtException java lang RuntimeException android os TransactionTooLargeException
  • 如何设置颜色的 R、G、B 和 Alpha 分量?

    有 3 个整数值组成 RGB 值 还有颜色的 Alpha 分量值 我如何设置这 4 个值以获得所需的颜色 您可以创建一个Color对象 值应该是ints之间0 255 or floats之间0f 1f Color c new Color r
  • Python 文档字符串类型注释——类,而不是实例?

    假设我有 class A object pass class B A pass 我想声明一个以 A 的子类作为参数的函数 def do something klass type klass WHAT HERE pass 我应该在 WHAT
  • 如何在 Spark 中动态切片数组列?

    Spark 2 4引入了新的SQL功能slice 可用于从数组列中提取一定范围的元素 我想根据一个整数列动态定义每行的范围 该列具有我想从该列中选取的元素数量 但是 简单地将列传递给切片函数会失败 该函数似乎需要整数作为起始值和结束值 有没
  • 在 Ruby on Rails 中获取地址簿以获取 Gmail、Yahoo、Hotmail、Twitter 和 Facebook 联系人列表时出现问题 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 来到了Contacts搜索
  • Android:每 1 分钟更新一次 ListView 项目

    我的应用程序中有一个自定义 ListView 其中包含一个 ImageView 和 3 5 个 TextView 1 个 TextView 显示了时间间隔当前时间和指定时间对于该 ListView 项目 Like 发表于 5 分钟前 问题是
  • 尾递归优化发生在 Visual Studio 10 x64 调试中,但不在发布中?

    最初我在 x86 模式下遇到了 stackoverflow 异常 由于我注意到 x64 会优化尾递归 因此我转而在 x64 中进行编译 和它在调试模式下运行得很好 但是 当我尝试运行发布代码时 它再次抛出stackoverflow 有什么可
  • 如何从 Android Activity 导航到特定的 flutter 路线?

    我有一个现有的android应用程序 并且我已经在我的项目中集成了flutter 我想调用我在主要方法中定义的flutter特定路由 如下所示 class FlutterView extends StatelessWidget overri
  • Python 中是否可以使用太多函数?

    这是一个广泛的问题 当我发现自己必须编写越来越长的脚本时 我发现我的本能是将所有内容分解为小型函数 然而 这最终导致函数调用函数调用函数调用函数 我想知道我是否完全以错误的方式思考这个问题 删节脚本可能如下所示 抱歉 这有点做作 def s