導航:首頁 > 編程語言 > go轉成python代碼

go轉成python代碼

發布時間:2022-07-17 17:44:33

① 如何看待將python代碼轉換成Go代碼並進一步編譯的Grumpy

如何看待將Python代碼轉換成Go代碼並進一步編譯的Grumpy
不建議使用Go,還沒有成熟(雖然它是Google發布的,但Google現在推的是Python並不是Go哦)。

Python和Ruby都是不錯的語言,他們都是跨平台的,且是解釋性程序語言。

Ruby還不是很出名,他與Python一樣都是面向對象的。Python/Ruby/Go的資料在中國里是很少的,不過也可以藉助Google看國外的資料(英語好這是做程序的人必須的)

個人建議使用Python好,因為很多程序員都大力向Python供庫,使得程序簡單幾句話完成重大的任務。Python還被稱為膠水語言,因為他很容易跟其他的語言(如C++)合並編程,如果你以後學其他語言的話,這對你是很有幫助的。

如果從性能方面的話,Go總比Python/Ruby快,因為Go不是解釋性語言。

② 怎麼把這個C語言轉換成python

C語言不能轉化為python,它們之間沒有之間聯系,只能說演算法是可以轉化實現的。

③ Python開發者在轉到Go語言之前需要了解什麼

轉載請參見文章末尾處的要求。【感謝張佳偉(@ghosert)的熱心翻譯。如果其他朋友也有不錯的原創或譯文,可以嘗試推薦給伯樂在線。】這是一篇(長)博文, 介紹了我們在 Repustate 遷移大量 Python/Cython 代碼到 Go 語言的經驗。如果你想了解整個故事,背景和所有的事情,請繼續往下讀。如果你只是想了解 Python 開發者在一頭扎進 Go 語言前需要了解什麼,請點擊一下鏈接:從Python遷移到Go的建議(Tips & Tricks) 背景在Repustate,我們完成過的最棒的技術成就之一是實現了阿拉伯語的情感分析。阿拉伯語是一塊難啃的硬骨頭,因為它的詞形變化相當復雜。比起譬如英語,阿拉伯語的分詞(將一個句子切分呈幾個獨立的單詞)也更困難,因為阿拉伯語的單詞本身還可能會包含空白字元(例如:「阿列夫」在一個單詞里的位置)。這也談不上是泄密,Repustate 使用支持向量機(SVM)來獲取一個句子背後最有可能的含義,並在其中加上情感元素。 總體上來說,我們使用了 22 種模型(22 個 SVM) 並且在一篇文檔中,每一個單詞我們都會加以分析。因此如果你有一篇 500 字的文檔,那麼基於 SVM,會進行十萬次的比較。 PythonRepustate 幾乎完全就是一個 Python 商店。我們使用 Django 來實現 API 和網站。因此(目前)為了保持代碼一致,同時使用 Python 來實現阿拉伯語情感引擎是合情合理的。只是做原型和實現的話,Python 是很好的選擇。它的表達能力很強悍,第三方類庫等等也很好。如果你就是為了Web服務,Python 很完美。但是當你進行低級別的計算,大量依賴於哈希表(Python 里的字典類型)做比較的時候,一切都變慢了。我們每秒能處理大約兩到三個阿拉伯文檔,但是這太慢了。比較下來,我們的英語情感引擎每秒能處理大約五百份文檔。 瓶頸因此我們開啟了 Python 分析器,開始調查是什麼地方用了那麼長時間。還記得我前面說過我們有 22 個 SVM 並且每個單詞都需要經過處理嗎?好吧,這些都是線性處理的,非並行處理。所以我們的第一反應是把線性處理改成 map/rece 那樣的操作。簡單來說:Python 不太適合用作 map/rece。當你需要並發的時候,Python 算上好用。在 2013 Python 大會上(譯者:PyCon 2013),Guido 談到了 Tulip,他的這個新項目正在彌補 Python 這方面的不足,不過得過段一段時間才能推出,但是如果已經有了更好用的東西,我們為什麼還要等呢? 選Go 語言,還是回家算了?我在Mozilla的朋友告訴我,Mozilla 內部正在將他們大量的基礎日誌架構切換到 Go 語言上,部分原因是因為強大的 [goroutines]。Go 語言是 Google 的人設計的,並且在設計之初就把支持並發作為第一要務,而不是像 Python 的各種解決方案那樣是事後才加上去的。因此我們開始著手把 Python 換成 Go 語言。雖然Go 代碼還不算正式上線的產品,但是結果非常令人鼓舞。我們現在能做到每秒處理一千份文檔,使用更少的內存,還不用調試你在 Python 里遇到:醜陋的多進程/gevent/「為什麼 Control-C 殺不了進程」這些問題。 為什麼我們喜歡 Go 語言任何人,對編程語言是如何工作(解釋型 vs 編譯型, 動態語言 vs 靜態語言)有一點理解的話,會說,「切,當然 Go 語言會更快」。是的,我們也可以用 Java 把所有的東西重寫一遍,也能看到類似更快的改善,但那不是 Go 語言勝出的原因。你用 Go 寫的代碼好像就是對的。我搞不清楚到底是怎麼回事,但是一旦代碼被編譯了(編譯速度很快),你就會覺得這代碼能工作(不只是跑起來不會錯,而且甚至邏輯上也是對的)。我知道,這聽上去不太靠譜,但是確實如此。這和 Python 在冗餘(或非冗餘)方面非常類似,它把函數作為第一目標,因此函數編程會很容易想明白。而且當然,go 線程和通道讓你的生活更容易,你可以得到靜態類型帶來的性能大提升,還能更精細的控制內存分配,而你卻不必為此在語言表達力上付出太多的代價。 希望能早點知道的事情(Tips & Tricks)除去所有這些贊美之詞以後,有時你真的需要在處理 Go 代碼的時候,相對於 Python,改變一下思維方式。因此這是我在遷移代碼時記錄的筆記清單 —— 只是在我把 Python 代碼轉換到 Go 時從我腦子里隨機冒出來的點子:沒有內建的集合類型(必須使用map,並檢查是否存在)因為沒有集合,必須自己寫交集,並集之類的方法沒有tuples 類型,必須寫你自己的結構,或者使用 slices (即數組)沒有類似 \__getattr__() 的方法,你必須總是檢查存在性,而不是設置默認值,例如,在 Python 里,你可以這樣寫 value = dict.get(「a_key」, 「default_value」)必須總是檢查錯誤(或者顯式的忽略錯誤)不能有變數/包沒被使用,因此簡單的測試也需要有時注掉一些代碼在[] byte 和 string 之間轉換。 regexp 使用 [] byte (不可變)。這是對的,但是老把一些變數轉換來轉換去很煩人Python 更寬松。你可以使用超出范圍的索引在字元串里取一個片段,而且不會出錯。你還可以用負數取出片段,但是 Go 不行你不能混合數據結構類型。也許這樣也不太干凈,但是有時在 Python 里,我會使用值是混合了字元串和列表的字典。但是 Go 不行,你不得不清理干凈你的數據結構或者使用自定義的結構不能解包一個 tuple 或者 list 到幾個不同的變數(例如:x, y, z = [1, 2, 3])駝峰式命名風格(如果你沒有首字大寫方法名/結構名,他們不會被暴露給其它的包)。我更喜歡 Python 的小寫字母加下劃線命名風格。必須顯式檢查是否有錯誤 != nil, 不像在 Python 里,許多類型可以像 bool 那樣檢查 (0, 「」, None 都可以被解釋成 「非」 集合)文檔在一些模塊上太散亂了,例如(crypto/md5),但是 IRC 上的 go-nuts 很好用,提供了巨大的幫助。從數字到字元串的轉換(int64 -> string) 和 []byte -> string (只要使用 string([]byte))不太一樣。需要使用 strconv。閱讀Go 代碼比起 Python 那樣寫起來如偽代碼的語言更像一門編程語言, Go 有更多的非字母數字字元,並且使用 || 和 &&, 而不是 「or」和「and」寫一個文件的話,有 File.Write([]byte) 和 File.WriteString(string), 這點和 Python 開發者的 Python 之道:「解決問題就一種方法 」相違背。修改字元串很困難,必須經常重排 fmt.Sprintf沒有構造函數,因此慣用法是創建 NewType() 方法來返回你要的結構Else (或者 else if)必須正確格式化,else 得和 if 配對的大括弧在同一行。奇怪。賦值運算符取決於在函數內還是函數外,例如,= 和 :=如果我只想要「鍵」或者只想要 「值」,譬如: dict.keys() 或者 dict.values(),或者一個 tuples 的列表,例如:dict.items(),在 Go 語言里沒有等價的東西,你只能自己枚舉 map 來構造你的列表類型我有時使用一種習慣用法:構造一個值是函數的字典類型,我想通過給定的鍵值調用這些函數,你在 Go 里可以做到,但是所有的函數必須接受,返回相同的東西,例如:相同的方法簽名如果你使用 JSON 並且 你的 JSON 是一個復合類型,恭喜你。 你必須構造自定義的結構匹配 JSON 塊里的格式,然後把原始 JSON 解析到你自定義結構的實例中去。比起 Python 世界裡 object = json.loads(json_blob) 要做更多的工作 是不是值得?值得,一百萬倍的值得。速度的提升太多了,以致很難舍棄。同時,我認為, Go 是目前趨勢所在,因此在招新員工的時候,我認為把 Go 當作 Repustate 技術積累的重要一環會很有幫助。]

④ Python 開發者在遷移到 Go 時需要知道哪些事

這是一篇講述將大塊 Python/Cython 代碼遷移到 Go 的長文章。如果你想了解整個事情的經過、背景等所有信息,請讀下去。如果你只對 Python 開發者需要了解的事感興趣,請下拉到早該知道的事板塊。
背景
我們在 Repustate 最大的技術成果就是實現了阿拉伯語情感分析。阿拉伯語是個難啃的硬骨頭,因為阿拉伯語詞彙的形式非常復雜。阿拉伯語的標記化(把一句話拆分成單個單詞)也比英語要難得多,因為阿拉伯單詞內部可能會包含空格(例如單詞內部「aleph」的位置)。在不泄露機密的情況下,Repustate 利用支持向量機(SVM)來獲取一個句子最可能的意思,並且以此來推斷句子的情感。我們一共採用了22種模型(22個支持向量機),文檔中的每個詞都會被分析。也就是說,如果一個文檔包含500個詞,就會與支持向量機進行10000多次對比。
Python
Repustate 幾乎完全是用 Python 搭建的,我們使用 Django 來搭建 API 介面和網站架構。因此,為了保持代碼一致性,使用 Python 來實現所有阿拉伯語情感引擎才說得通。就原型設計和實現流程而言,Python 依然是一個很好的選擇:表現能力優秀,又有強大的第三方庫資源,等等。如果是服務於網頁,它就是最佳選擇。如果是稍低級別的運算,需要與哈希表(Python 中的字典)進行大量對比時,運行速度就會慢下來。我們一秒鍾只能處理2到3個阿拉伯語單詞,這種速度太慢了。相比之下,我們的英語情感引擎每秒能處理500個單詞。
瓶頸
因此,我們啟動了 Python 分析器,開始調查速度慢的原因。還記得上文提到我們有22個支持向量機,每個單詞都會通過它們處理嗎?原來這個過程是按順序進行,而不是並行的。好了,第一個想法是換成類似分布式計算系統(map/rece)的處理器。長話短說:Python 不適合用 map/rece。當你需要並發性的時候,Python 並不能幫上忙。在 Pycon 2013大會中,Guido 談到了 Tulip,他希望用來解決這個問題的一個新項目,但是還要過一段時間才能發布。可是,如果已經有了更好的選擇,為什麼還要苦等下去呢?
選擇 Golang 還是回老家(Go Home)
在 Mozilla 的朋友告訴筆者,Mozilla 服務的日誌架構大部分代碼都已遷移到 Go,部分原因是 goroutines 超級便利。Go 是由谷歌員工開發的,設計之初就將並發需求列為一級理念,而不是像 Python 的眾多解決方案一樣在做事後補救。因此我們開始著手實現從 Python 到 Go 的遷移。
雖然 Go 代碼還沒實現大規模產出,得到的結果已經非常振奮人心。我們現在一秒鍾能處理1000個文檔,使用的內存大大減少,而且也不用再去調試和解決使用 Python 時會遇到的多進程/協程(gevent)/「為什麼 Control-C 殺死了我的進程」等問題。
喜歡 Go 的原因
任何略懂編程語言的人(明白解釋與編譯、動態與靜態區別)都會說:「哈,顯然 Go 要快多了。」沒錯,我們是可以用 Java 重寫所有內容,並且取得類似的效果,但是這並不是 Go 勝出的原因。你用 Go 寫的代碼似乎一出來是正確的。筆者也說不清楚,但是不知怎麼的,一旦代碼被編譯(編譯過程非常迅速),你就會感覺它能工作了(不只是運行不出錯,而且還邏輯正確)。這聽起來很含糊,但是它是真的。在冗餘或無冗餘方面,它跟 Python 相似,它把函數當做一級對象,因此函數編程很方便。而且毋庸置疑,goroutines 和 channels 會讓你更加省心省力。靜態類型還會帶來極大的性能提升,以及更精確的內存分配控制,但是又不會損失太多表達性。
早該知道的事
除去溢美之詞,跟 Go 打交道需要與 Python 完全不同的一套思維模式。以下列出的是筆者在遷移時做的一些筆記——都是在從 Python 遷移到 Go 時隨機想到的一些東西:
沒有內建的集合類型(需要使用 map,然後測試存在性)
由於沒有集合類型,需要自己寫代碼來實現交集、並集等方法
無元組(tuple),必須自己寫架構或使用切片(slice)(數組)
沒有類似 getattr_() 的方法,因此需要不斷檢查存在性,而不能像在 Python 中那樣設置預設值:value = dict.get(「a_key」, 「default_value」)
必須不斷檢查錯誤(至少需要顯式忽略它們)
不能包含未使用的變數或包,因此有時候如果要測試一些簡單問題,需要給代碼添加註釋
在 []byte 和 string 之間切換。正則表達 (regexp) 使用 []byte (可變)。這說得通,但是在一些變數之間來回切換還是很煩人
Python 更為寬松。你可以用超出范圍的索引來索取字元串片段,也不會有什麼問題,還可以提取負值片段,但是 Go 就不行
不能使用混合類型的數據結構。也許不合規定,但是有時候在 Python 可以使用混合字元串和列表的字典。在 Go 就不行,要麼清理干凈數據結構,要麼自定義結構。感謝 Ralph Corderoy 向筆者展示了如何正確操作(用這個界面,盧克)

不能把元組或列表分解成分開的變數(如 x,y,x = [1,2,3])
駝峰字規則(UpperCamelCase)(如果一個包中的函數或結構首字母未大寫,就不會暴露給其他包)。筆者更喜歡 Python 的小寫加下劃線格式(lower_case_with_underscores)
需要顯式檢查錯誤是否為 != nil,不像 Python 有很多類型可以用於布爾型檢查(0,「」,None 都會被解讀為「假」)
某些模塊(如 crypto/md5)的文檔不足,但是 IRC 上面的 go-nuts 非常棒,擁有特別好的支持
從數字到字元串的類型轉換(int64 -> 字元串)跟[]byte -> 字元串(只用字元串([]byte))不同,需要用到 strconv
Go 的代碼讀起來更像是編程語言,而 Python寫出來更像偽代碼。Go 包含更多非數字字母字元,用 || 和 && 來表示「或」與「和」
寫文件會有 File.Write([]byte) 和File.WriteString(string),這會讓習慣了 Python
只有一種做事方法的開發者們有些不適應
字元串插入很麻煩,不得不經常使用 fmt.Sprintf
沒有構造函數,常見的做法是創建 NewType() 函數,來返回你需要的結構
Else 或 else if 必須格式正確,else 得跟 if 從句的大括弧在一行。這很奇怪。
根據函數內外位置,使用不同的賦值操作符,例如 = 和 :=
如果只想要類似dict.keys() 或dict.values()得到的鍵值或取值列表,或者通過
dict.items()得到的元祖列表,在 Go 裡面是無法實現的,只能自行迭代 map,然後創建自己的列表
筆者習慣建立一個取值為函數的字典,並通過鍵值調用函數。你可以在 Go
裡面這么做,但是所有的函數都得接受和返回同樣的東西,也就是說,必須具備同樣的方法簽名
如果你是用 JSON, 而且是混合類型的 JSON,那麼你還是自求多福吧。你得創建一個能夠匹配你的 JSON 二進制大對象(blob)格式的個性化結構,然後解組(Unmarshall)原始 JSON 成為你的個性化架構的一個用例。比起在 Python 中的一句「obj = json.loads(json_blob)」要費更多功夫
這么折騰值得嗎?
值,一百萬個值,超值。速度的提升不容忽視。而且筆者認為這也是促使 Go 成為流行語言的重要原因。因此在招聘時,筆者認為把 Go 當成 Python 開發者的必備技能也很重要。

⑤ 將一段c語言程序轉變為python程序,急!!!

按照你的要求,把C語言程序轉換成Python3語言的程序如下

#!/usr/bin/python
#-*-coding:UTF-8-*-

defprintMatrix(n):
arr=[[0foriinrange(20)]foriinrange(20)]
curNum=1
forindexinrange(1,n+1):
i=0
j=index-1
forkinrange(1,index+1):
ifindex%2==1:
arr[i][j]=curNum
curNum=curNum+1
else:
arr[j][i]=curNum
curNum=curNum+1
i=i+1
j=j-1

forindexinrange(n+1,2*n):
i=index-n
j=n-1
forkinrange(1,2*n-index+1):
ifindex%2==1:
arr[i][j]=curNum
curNum=curNum+1
else:
arr[j][i]=curNum
curNum=curNum+1
i=i+1
j=j-1

print("Thematrixisasfollow:");
foriinrange(0,n):
forjinrange(0,n):
print(arr[i][j]," ",end='')
print("")

printMatrix(4)
運行結果
Thematrixisasfollow:
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16

⑥ 我為什麼放棄Go語言轉回Python

我覺得語言精通一兩門就夠了,現在語言那麼多,是學不過來了的,更新速度又快,一門語言可能都要費很勁,真正的學好一門就夠了,其他的交給專業人士吧

⑦ Python和go語言有什麼區別哪個更有優勢

python和go語言的區別
1、語法
Python的語法使用縮進來指示代碼塊。Go的語法基於打開和關閉括弧。
2、範例
Python是一種基於面向對象編程的多範式,命令式和函數式編程語言。它堅持這樣一種觀點,即如果一種語言在某些情境中表現出某種特定的方式,理想情況下它應該在所有情境中都有相似的作用。但是,它又不是純粹的OOP語言,它不支持強封裝,這是OOP的主要原則之一。
Go是一種基於並發編程範式的過程編程語言,它與C具有表面相似性。實際上,Go更像是C的更新版本。
3、並發
Python沒有提供內置的並發機制,而Go有內置的並發機制。
4、類型化
Python是動態類型語言,而Go是一種靜態類型語言,它實際上有助於在編譯時捕獲錯誤,這可以進一步減少生產後期的嚴重錯誤。
5、安全性
Python是一種強類型語言,它是經過編譯的,因此增加了一層安全性。Go具有分配給每個變數的類型,因此,它提供了安全性。但是,如果發生任何錯誤,用戶需要自己運行整個代碼。
6、管理內存
Go允許程序員在很大程度上管理內存。而,Python中的內存管理完全自動化並由Python VM管理;它不允許程序員對內存管理負責。
7、庫
與Go相比,Python提供的庫數量要大得多。然而,Go仍然是新的,並且還沒有取得很大進展。
8、速度:
Go的速度遠遠超過Python。

⑧ 如何利用Golang為Python編寫模塊

Go裡面需要顯示的引入C模塊, 讓編譯器支持生成動態鏈接庫, 並且在代碼中可以使用C語言的數據類型,這個至關重要. Calling Go code from Python code 摘取一個最簡單例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

//libadd.go
package main

import "C"

//export add
func add(left, right int) int {
return left + right
}

func main() {
}
go build -buildmode=c-shared -o libadd.so libadd.go
from ctypes import cdll
lib = cdll.LoadLibrary('./libadd.so')
print("Loaded go generated SO library")
result = lib.add(2, 3)
print(result)

閱讀全文

與go轉成python代碼相關的資料

熱點內容
中國大尺度古裝電影 瀏覽:796
大廠伺服器是怎麼樣的 瀏覽:970
蝦皮app提示音怎麼設置 瀏覽:827
單片機中bit什麼意思 瀏覽:731
主角在虛擬世界用潛意識演戲 瀏覽:270
zenly怎麼添加安卓好友 瀏覽:63
聚美優品php面試題 瀏覽:388
肉文主受 瀏覽:640
適合老人看的打戰電影 瀏覽:556
伺服器如何查詢服務 瀏覽:848
解壓3d動畫下雨 瀏覽:911
母親的職業電影演員 瀏覽:672
現代建國免費閱讀 瀏覽:546
技術小說 瀏覽:1000
小說電影圖片區 瀏覽:554
希靈銀國類似的小說 瀏覽:411
安卓設置向導停用會有什麼影響 瀏覽:821
我的世界伺服器九龍谷為什麼會停服 瀏覽:944
如何給西門子802d子程序加密 瀏覽:126
在線視頻好網站 瀏覽:591