1樓:匿名使用者
基於文字文件(markdown) 設想好需要的基本需要的表、欄位、型別;
使用 rails migration 隨著功能的開發逐步建立表;
隨著細節功能的開發、需求,逐步增加欄位,刪除欄位,或者調整欄位型別;
第一個 release 的時候清理 migrations 合併成一個;
隨著後期的改動,逐步增加、修改、刪除欄位或表。
基本上我的所有專案都是這麼搞的,這和專案是否複雜無關。
所以我前面為什麼說思路需要轉變。
python向怎麼向c語言傳遞結構體
2樓:阿達貼
況如下:
打算從python發一個tcp資料包給遠端伺服器,資料的主體是一個c語言的 struct (較大,size 為1402)。由於這個struct太複雜,故不打算在python 處對其重新定義,目前的想法是用python呼叫一個c語言的模組,在這個模組中定義這個struct,並設定好資料後,將其struct傳回python中,再打包傳送伺服器。
但是不知道如何將這個struct 變數從c語言 傳入python中。嘗試用py_buildvalue函式,以為結構體變數
傳遞,但是幾次都得到執行時錯誤:
systemerror: bad format char passed to pybuildvaule。
怎樣在兩個程式間傳遞結構體引數
3樓:匿名使用者
在c語言中用指標傳遞就可以了呀。
struct test;
void func( test *arg)在c++中還可以使用引用
void func (test &obj) ;
各位老闆,python怎麼把c裡面的結構體讀進來
4樓:
1、首先根據圖紙把主、次鋼的鋼材用量計算出來,再就是維護板材的面積。板材安裝時所需的鑽尾螺絲、結構膠等大約用量計算出來。再根據材料**計算出材料成本。
2、根據圖紙的實際結構形式、高度等條件計算出安裝費用。3、材料從廠內運至施工現場的費用。4、稅金、管理費以及安裝時所產生的措施費用、工人的保險費等。
上述四項之和再加上利潤就是工程預算了。
python如何傳遞給c++一個結構體指標?前提是swig封裝的c++函式,請寫出代 100
5樓:匿名使用者
在封裝的**間傳遞指標你要確保他們執行在相同的地址空間裡,還要保證指標指向的記憶體的生存期是安全的,否則這種思路就是錯誤的。實現方法舉例如下:
1、定義了c 結構體和函式如下
typedef struct nameage
nameage , *nameagepointer;
void test(nameagepointer p) // 接收結構體指標
2、python定義結構體如下
#python中結構體定義
class pystruct():
def __init__(self, name, age):
self.name = name
self.age = age
fred = pystruct("fred", 5)
3、假設把第1步裡的test封裝成example模組,python匯入example(既然你都會swig了,這個過程就不囉嗦了)
>>>import example
>>>example.test(pointer(fred))
以上是基本思路,因為搭建開發環境和過程比較繁雜,沒有驗證過,但是應該沒有大問題
python呼叫c++,c++函式返回一個結構體變數給python,python如何接收呢?
6樓:麗江海月客棧
用 ctypes, 接收返回的物件建個類, 類似下面這種:
from ctypes import *
class standgo(structure):
_fields_ = [("x", c_int),("y", c_int)]
接收物件賦值給這個類應該就可以了
具體的看ctypes的文件了,自己試下了
python裡面的函式怎麼按引用傳遞引數
7樓:福喜
如果你用c給matlab寫過mex程式,那
麼這個問題是很容易理解的(好像每次討論python問題時我總是把matlab搬了出來…… 《在matlab中把struct當成python中的dictionary使用》《matlab和python的幾種資料型別的比較》)。
既然提到了mex,就簡單說一下:
一個matlab可能形如
function ret=add3(a,b,c)
如果在c的層面實現這個函式,就會看到另一種景象:
void mexfunction(int nlhs,mxarray * plhs,int nrhs,const mxarray * prhs)
a,b,c三個引數的地址放在一個指標陣列裡,然後把這個指標陣列的首地址作為引數prhs傳遞給函式,這說明matlab函式的引數是傳遞指標的,而不是值傳遞。
縱然是傳遞的指標,但是卻不能在函式裡改變實參的值,因為標記為「const」了。
python是開放原始碼的,我沒有看。所以下面很多東西是猜的。
python在函式的引數傳遞時用的什麼手法?實驗一下(使用activepython2.5):
首先介紹一個重要的函式:
>>> help(id)
help on built-in function id in module __builtin__:
id(...)
id(object) -> integer
return the identity of an object. this is guaranteed to be unique among
simultaneously existing objects. (hint: it's the object's memory address.)
看最後括號裡那句:hint:it's the object's address.(它是物件的地址)
有了這個函式,下面的事情就方便多了。
>>> a=0
>>> id(a)
3630228
>>> a=1
>>> id(a)
3630216
可以看出,給a賦一次值,a的address就改變了。在c的層面看,(也許真實情況不是下面的樣子,但作為一個類比應該還是可以的):
void * pa;
pa=malloc(sizeof(int));
*(int *)pa=0;
free(pa);
pa=malloc(sizeof(int));
*(int *)pa=1;
python中每次賦值會改變變數的address,分配新的記憶體空間,所以python中對於型別不像c那樣嚴格要求。
下面看看python函式引數傳遞時到底傳的什麼:
有一個函式:
>>> def changea(a):
... print id(a)
... a=100
... print id(a)
設定一個變數var1:
>>> var1=10
>>> id(var1)
3630108
>>> changea(var1)
3630108
3631012
>>> var1
10呼叫函式後,從兩次print的結果可以看出,傳遞確實是地址。但是即便如此,在函式內對形參的修改不會對實參造成任何實質的影響,因為對形參的重新賦值,只是改變了形參所指向的記憶體單元(changea裡兩次呼叫print id(a)得到不同的結果),卻沒有改變實參的指向。在c的層面看也許類似下面的情節:
void changea(void * pa)
精通c的你一眼就看出這個函式永遠也改變不了它外面的世界。
也就是說雖然傳遞的是地址,但像changea這樣的函式改變不了實參的值。
也許會感到困擾?不,我已經在matlab中習慣了。
一個最典型的例子就是matlab中刪除結構體成員的rmfield函式(參見《matlab筆記三則》),
(matlab版本7.0.1)
如果想刪除結構體patient的name成員,用
rmfield(patient, 'name');
是永遠達不到目的的(就像試圖用雙手抓住自己的領子,把自己提到空中);
迷途知返的做法是:
patient = rmfield(patient, 'name');
python 呼叫c**獲取資料,c**要求1個結構引數, 其中有專案是指向緩衝區的指標,如何實現引數賦值?
8樓:匿名使用者
class stdata(structure):
_fields_ = [('pbuf', c_char_p), ('buflen', c_int)]
n=100
buf = create_string_buffer(n)d = stdata()
d.buflen = n
d.pbuf = cast(buf, c_char_p)n = callmycfunc_getdata(byref(d))關鍵在於create_string_buffer建立可寫buffer;cast轉換為char*型別。
9樓:此生不愛
用python寫一個相應的結構體,繼承ctypes的struct類,傳入引數的時候為by_ref(ldata)
急求!這是用python畫國旗的程式,請求大神解釋一下每
import turtle 匯入模組 import time import os def draw square org x,org y,x,y 定義紅旗繪製函式 turtle.setpos org x,org y 定義畫筆初始位置 turtle.color red red 顏色 turtle.be...
求Python程式求出任意數的平均值和總和
n 5l float input 請輸入第 d個數 i 1 for i in range n print 總和 f,平均值 f sum l sum l n i 1 numsval 0 while i 5 tip 請輸 du入第 zhi str i 個數 dao專 numsval int input ...
c語言求和,C語言!求一個求和的程式。
3全部先獲取陣列長度,然後用for迴圈,從陣列中獲取值進行累加求和。include include int main int n int val int a int sun 0,i printf 請輸入陣列的長度 scanf d n printf n a int malloc n sizeof in...