健康的编程实践

-1 投票
4 回答
1376 浏览
提问于 2025-04-17 12:20

我需要一些建议。我正在写一个计算器,基本功能已经搞定,现在终于开始处理一些数学函数了。在这方面,我觉得Python提供的标准数学函数库不太够用。

虽然一些常用的函数都有定义,但一些比较冷门的函数却没有好好提到。例如,反双曲余切、反双曲余割、双曲余割、正割等等。虽然这些函数有些只是对已有函数的变形,但我觉得更好的办法是自己定义这些函数,然后在程序遇到它们时调用这些定义。

这就是我想问的问题。我应该在主脚本里直接定义这些函数,还是应该用一个单独的文件?如果是后者,我该怎么引用那个单独的文件呢?我对Python还比较陌生,如果我漏掉了什么常见的技巧,请告诉我。提前谢谢你们!

4 个回答

1

你可以花点时间去看看Python网站上关于模块的优秀教程。

一般来说,是的。如果你有一些想要重复使用的代码,最好把它们放在单独的模块文件里。

举个例子:

#!/usr/bin/python

def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while b < n:
        print b,
        a, b = b, a+b
                    
if __name__ == "__main__":
    print "testing fib(10)"
    fib(10)   

把这段代码放在一个叫做fib.py的单独文件里,放在一个你知道的目录下,比如你的个人bin文件夹。然后从那个目录运行Python的交互式命令行。

现在:

>>> import fib
>>> fib.fib(10)
1 1 2 3 5 8

通过这种方法,你可以建立一个个人的函数库,随时可以使用。

注意这里的代码:

if __name__ == "__main__":
    print "testing fib(10)"
    fib(10)   

这段代码允许你在模块的末尾放一个测试工具,如果这个模块不是作为库导入而是直接执行时,它就会运行。

不过,这些可能并不是必需的。优秀的numpyscipy库里可能已经包含了你能想到的所有数学函数。

3

我会像你说的那样,做一个简单的数学工具模块。只需要创建一个叫做 advmath.py 的文件,里面写上

def csch(z):
    "Hyperbolic cosecant"
    return 1 / sinh(z)

def sinh(z):
    "Hyperbolic sine"
    ...

然后你可以在你的主脚本中 导入 这个模块:

import advmath

现在你就可以使用这个模块里定义的函数和变量了:

advmath.csch(x)
5

我应该把这些函数直接写在主脚本里,还是应该用一个单独的文件?如果用单独的文件,我该怎么引用这个文件呢?我对Python还比较陌生,如果我漏掉了什么常见的技巧,请告诉我。提前谢谢你们。

import 语句在Python中非常重要:

把你的函数放在一个单独的文件里,比如叫 mymath.py

def foo(x):
    # Code goes here

然后引入你的模块:

import mymath
print(mymath.foo(y))

撰写回答