我是一個正在努力提高我的 Python 技能的菜鳥。我正在從事一項任務,該任務可能旨在教授如何從其他檔案訪問變數、程序、函式等,作為面向物件編程的“軟介紹”。
任務是撰寫一個函式來讀取檔案并回傳三個陣列,這些陣列由與匯入檔案中的某些元素對應的數字組成,然后在 matplotlib.pyplot 中繪制它們,以查看在某些迭代程序中如何進行一些取整測量.
任務中提供的檔案(您應該匯入和讀取的檔案)如下所示:
# This program is needed in Problem 6.5 Interpret output from a program.
from math import sin, cos, pi
def f(x):
return sin(x)
def df_approx(f, x, delta_x):
print(delta_x, f(x delta_x)- f(x))
return (f(x delta_x)-f(x))/delta_x
#return (f(x delta_x)-f(x-delta_x))/(2*delta_x)
x = pi/3
for n in range(1, 20):
delta_x = 10**(-n)
calculated = df_approx(f, x, delta_x)
exact = cos(x)
rel_err = abs(calculated - exact)/abs(exact)
abs_err = abs(calculated - exact)
print("delta_x: %e, df_approx: .10e, df_exact: .10e, abs_error: %e, \
#rel_error: %e, n=%d" % (delta_x, calculated, exact, abs_err, rel_err, n))
給定的檔案輸出:
0.1 0.045590188541076104
delta_x: 1.000000e-01, df_approx: 4.5590188541e-01, df_exact: 5.0000000000e-01, abs_error: 4.409811e-02, #rel_error: 8.819623e-02, n=1
0.01 0.004956615757736871
delta_x: 1.000000e-02, df_approx: 4.9566157577e-01, df_exact: 5.0000000000e-01, abs_error: 4.338424e-03, #rel_error: 8.676848e-03, n=2
............................................................................................
delta_x: 1.000000e-19, df_approx: 0.0000000000e 00, df_exact: 5.0000000000e-01, abs_error: 5.000000e-01, #rel_error: 1.000000e 00, n=19
問題是:
我試圖從功能訪問資料df_approx,除了變數delta_x,abs_error并n從匯入的檔案中給出的任務。不幸的是,我只能訪問部分資料,而不是全部資料。
例如,如果我嘗試calculated = df_approx(f, x, delta_x)像這樣訪問變數中的值:
import approx_derivative_sine as apx
approx_values = np.array(apx.calculated)
print(approx_values)
它只是回傳0.0。
或者,如果我嘗試apx.delta_x像這樣訪問變數
delta_x = apx.delta_x
print(delta_x)
它只是回傳1e-19。
如果我嘗試通過 for 回圈訪問資料,它也會崩潰或回傳任何我想要的東西,所以故事繼續。
所以我的問題是
- 當我以正確的方式從其他檔案匯入時,如何訪問我需要的變數?我想要匯入檔案產生的所有資料,而不僅僅是其中的一部分。
- 如何訪問匯入檔案中 for 回圈中的所有資料?
這是我到目前為止寫的代碼
from approx_derivative_sine import df_approx, f, x, delta_x
def read_from_file():
approximation = df_approx(f,x,delta_x)
print(approximation)
read_from_file()
如果有人能幫助我并為我提供一些解決此問題的方法,我將不勝感激。
uj5u.com熱心網友回復:
您可以將 for 回圈期間產生的所有值存盤在 list 或 dict 中,并將其匯入以供您使用。單個變數將只保留一個值(最近的一個),因此您必須使用某種型別的容器來存盤多個值。
一種方法(一個例子):
lst = []
for n in range(1, 20):
delta_x = 10**(-n)
calculated = df_approx(f, x, delta_x)
exact = cos(x)
rel_err = abs(calculated - exact)/abs(exact)
abs_err = abs(calculated - exact)
lst.append([delta_x, calculated, rel_arr, abs_err]
然后像這樣使用它:
import approx_derivative_sine as apx
for item in apx.lst:
print(item[0], item[1], item[2])
否則,您可以只匯入函式定義并在新檔案中呼叫它并使用引數生成值。這是首選方式。
# I am changing function name so that you get it better
from approx_derivative_sine import df_approx as dfa
x = pi/3
for n in range(1, 20):
delta_x = 10**(-n)
calculated = dfa(f, x, delta_x)
exact = cos(x)
rel_err = abs(calculated - exact)/abs(exact)
abs_err = abs(calculated - exact)
print("delta_x: %e, df_approx: .10e, df_exact: .10e, abs_error: %e, \
#rel_error: %e, n=%d" % (delta_x, calculated, exact, abs_err, rel_err, n))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324820.html
