2014-09-21 104 views
1

我是Python新手。我想在python中使用類似MATLAB的結構。我已經在使用字典的計算器中看到了幾種解決方案,例如thisthis。不過,我覺得下面的代碼中的虛擬對象方法更像MATLAB,更自然,因爲我們不需要雙引號來表示屬性名稱。對我來說,這個用例是單親的,可以用一種隨便的方式將幾個對象包裝在一起,這樣一些函數就不需要長長的參數列表。例如,下面的最後一個函數只有兩個參數而不是6.MATLAB中的Python結構

我的問題是:現在我必須在腳本中定義虛擬類Structure。有必要嗎?如果我的許多腳本需要使用它,我將不得不把它放在我的所有函數都可以訪問的地方。是否有內置的「虛擬類」已經存在,我可以使用?

import numpy as np 

class Structure: 
    pass 

def construct_network(): 
    net = Structure() 
    net.n = 100; 
    net.Weights = np.random.rand(net.n, net.n) 
    net.biases = np.random.rand(net.n, 1) 
    return net 

def a_function_operate_on_two_nets(net1, net2): 
    # Use the net1 and net2 here. 
+1

查找到'namedtuple' – inspectorG4dget 2014-09-21 22:22:41

回答

2

python3.3 added types.SimpleNamespace這就是你要找的。對於Python的早期版本,你可能不得不依賴於爲類似的(足夠近的)任務構建的東西 - 例如argparse.Namespace

而且,當然總有collections.namedtuple如果你實際上想要結構(它通常首選非結構化)。

+0

有趣。你回答了我目前的問題和我將來可能會問的一些問題:) – shaoyl85 2014-09-21 22:39:13

1

您在一個文件中創建了這個結構。例如把這些代碼在struct.py 然後在另一個python腳本只寫from struct.py import Structure 或者,如果創建其他結構可以導入所有clases使用from struct.py import *