2012-02-04 75 views
-1

我需要建議。我正在寫一個計算器;我已經掌握了它的基本功能,並最終轉向了處理功能。在這方面,我發現由Python提供的數學函數的標準庫不令人滿意。健康編程實踐

儘管所定義的更常用的功能,一些比較晦澀功能缺乏適當提。這方面的例子包括反雙曲餘切反雙曲餘割,雙曲餘割,正割,等等。雖然這些都只是提供的功能操作,似乎是更好的選擇是提供我們的定義,程序是指那些當它遇到他們。

這就是我的問題所在。我應該在主腳本中定義這些函數,還是應該使用單獨的文件?如果我是後者,我該如何參考單獨的文件?我對Python相對來說比較陌生,所以如果我錯過了一些常用的技術或者其他東西,請讓我知道。提前致謝。

+0

爲什麼不使用Numpy? – tpg2114 2012-02-04 19:33:44

+0

你可能想看看[numpy雙曲函數](http://docs.scipy.org/doc/numpy/reference/routines.math.html#hyperbolic-functions) – 2012-02-04 19:38:47

回答

5

我應該在主腳本中定義這些函數,還是應該使用單獨的文件?如果我是後者,我該如何參考單獨的文件?我對Python相對來說比較陌生,所以如果我錯過了一些常用的技術或者其他東西,請讓我知道。提前致謝。

import語句是蟒蛇的重要組成部分:

把你的功能,在一個單獨的文件,說mymath.py

def foo(x): 
    # Code goes here 

然後導入模塊:

import mymath 
print(mymath.foo(y)) 
+0

mymath.py文件是否有與計算器在同一個目錄下?如果我想從別處導入mymath.py怎麼辦?有沒有可以在全球範圍內訪問的地方? – ThisIsNotAnId 2012-02-04 21:14:57

+1

@ThisIsNotAnId您不需要也不希望它在整個系統上纏住其他所有腳本。創建一個包,例如與[disutils](http://docs.python.org/py3k/distutils/index.html)。 – delnan 2012-02-04 21:30:07

3

我會像你所建議的那樣製作一個小型數學實用程序模塊。只需使用

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

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

創建advmath.py然後你就可以在你的主腳本import這個模塊:

import advmath 

您現在可以訪問函數和變量定義模塊:

advmath.csch(x) 
1

你應該得到包含許多這些功能的numpy和scipy庫。

我應該在主腳本中定義這些函數,還是我應該使用單獨的文件?

這取決於你的計算器是多麼複雜。但它可能應該放在單獨的文件中。

如果我是後者,我該如何參考單獨的文件?

採用進口。 import foo將嘗試加載文件foo.py。然後你訪問foo中的函數,如foo.function_name。你應該能夠找到關於在這個網站上使用它的很多問題。

1

你應該花一些時間在Python網站上關於modules的優秀教程。

一般來說,是的。如果您有要重複使用的組件,這些組件最好保存在單獨的模塊文件中。

例子:

#!/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交互式shell。

現在:

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

有了這個方法,你可以建立功能的個人庫,隨時提供給您。

注意代碼在這裏:

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

這允許您將測試工具與您的模塊結束時,如果不是作爲一個庫導入其他執行模塊將執行。

但是,這可能不是必要的。優秀的numpyscipy可能具有您可以夢想的每個數學函數。