顯示廣告
隱藏 ✕
※ 本文為 Knuckles 轉寄自 ptt.cc 更新時間: 2019-05-06 09:20:02
看板 Gossiping
作者 jserv (松鼠)
標題 Re: [問卦] 原本寫c後來改python覺得很不舒服正常嗎
時間 Sun May  5 22:43:31 2019


※ 引述《q6534gas1793 (Ming)》之銘言:
: 原本一開始是先學c然後c++
: 最近才去學python
: 發現寫起來特別不舒服

我也是先學 C,再學 C++,之後才學 Python,但我感到...
我宅我色我舒服

: 雖然明明更簡單方便
: 很容易看出成果
: 也不用管一堆格式括號型態
: 也一堆插件可以用
: 但是總是覺得很奇怪很莫名
: 所以原本寫c後面再換成python

你可以在 Python 的程式碼裡頭安插 C 程式,像是這樣:

if __name__ == '__main__':
    mylib = C('''
int factorial(int x) {
    int ret = 1;
    for (; x > 1; x--) {
        ret *= x;
        x--;
    }
    return ret;
}
''')

    factorial = mylib['factorial']
    print('15! =', factorial(15))

不過你需要事先準備些「魔法」,完整程式碼可見:
    https://gist.github.com/jserv/11d02a2ba126f4056aae5b43ce9fa51f
 

上述程式的技巧是:
1. 將內嵌於 Python 程式碼的 C 程式透過編譯器 (這裡用 gcc 示範) 產生 shared
   library / DLL;
2. 透過 Python 的 ctypes 載入在 (1) 產生的 shared library / DLL 並給定必要
   的進入點;
3. 以 atexit 確認做好必要的善後動作;

Ellen Bialystok 教授和 Fergus I. M. Craik 教授合作的論文 "Cognitive and
Linguistic Processing in the Bilingual Mind" [1] 指出,擁有平衡雙語能力
(也就是母語和第二種語言一樣流暢,且在日常中常轉換使用) 的人,可發展出更好
的認知能力。

為何如此呢?其中有個解釋說,無論雙語者在當下使用何種語言思考,在其大腦依然
會下意識的同時處理兩種語言,然後決定使用哪一種語言、屏蔽哪一種語言。這意味
著,雙語者因而運用較單語者更多的「認知」來處理日常思考,這讓他們在無形中多
出大量鍛煉認知能力的機會。


Python 和 C 語言的交互使用,不也是強化認知的訓練嗎?

我是宅色夫,我慣 C,也愛探索程式語言。 <-- 網紅的短片後面好像都要加這樣的話

[1] https://www.psychologicalscience.org/journals/cd/19_1_inpress/Bialystok_final.pdf

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.82.61
※ 文章代碼(AID): #1SplQNl2 (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1557067415.A.BC2.html
 
redDest: 朝聖2F 05/05 22:44
Sousake: 神先拜3F 05/05 22:44
WANGMIN:            =========================有神先拜再讀4F 05/05 22:44
james732: 有神5F 05/05 22:44
emptie: 跪著看6F 05/05 22:44
amethystboy: 好7F 05/05 22:45
g5637128: 推8F 05/05 22:45
Saroten: 推!9F 05/05 22:45
great5566: 請發到程式設計版10F 05/05 22:45
neo5277: 讚11F 05/05 22:45
cuteSquirrel: 推12F 05/05 22:46
godchanny16: 朝聖13F 05/05 22:46
newland: 推個14F 05/05 22:47
jays6215: 推15F 05/05 22:48
arsonlolita: 跟我想的差不多16F 05/05 22:48
wowpoqwow: 有意義嗎17F 05/05 22:48
potter903p: 未看先推18F 05/05 22:49
jserv: @great5566, 程式設計板不能發廢文,我只好貼在綜合討論區19F 05/05 22:49
jserv: @wowpoqwow, 有八卦的價值
asdfjoe: 好奇能在其他語言加入C嗎?21F 05/05 22:50
jserv: @asdfjoe, 以 Perl 來說,有 Inline::C22F 05/05 22:51
Sixigma: 老師好,好想成大23F 05/05 22:52
gimyhsiou: 要鍛鍊到的話,用cobol和masm 好了24F 05/05 22:52
shapa5566: push25F 05/05 22:52
px37521: 朝聖26F 05/05 22:53
devilkool: 是神!!27F 05/05 22:53
jserv: @Sixigma, 歡迎來讀台灣最好的學店28F 05/05 22:54
stiles: 朝聖29F 05/05 22:55
bonfferoni: 工三小30F 05/05 22:55
SimonAllen: 朝聖推31F 05/05 22:55
mmonkeyboyy: 推一下 XD32F 05/05 22:55
bonfferoni: 好爽 能噓大神33F 05/05 22:55
t81511270: 乾 老師好= =    原來可以這樣玩34F 05/05 22:56
jserv: @bonfferoni, 上面那篇心理學論文很好看,大推35F 05/05 22:56
Grothendieck: 好文推一下36F 05/05 22:56
sodes: 呵 神人耶37F 05/05 22:57
PFmayu: 朝聖38F 05/05 22:57
jserv: @bonfferoni, 八卦板的核心價值不就是到處嗆人和取暖嗎?39F 05/05 22:57
jary1232003: 朝聖40F 05/05 22:57
KNVSEOC: 推41F 05/05 22:57
kipi91718: 推42F 05/05 22:59
asdfjoe: 呃 問個蠢問題 為什麼好像很少(或不能)看到開發時是利43F 05/05 22:59
asdfjoe: 用語言不同擅長特性開發?雖然最近有看到Julia這種融合多
zxnstu3104: 看不懂程式碼…45F 05/05 22:59
asdfjoe: 語言特性的46F 05/05 22:59
loklaz: 116肥宅是不是很多47F 05/05 22:59
asdfjoe: 因為我也沒有什麼開發經驗就是了 也許有吧 菜鳥一枚48F 05/05 23:00
jerry123456: 哦哦哦哦哦哦哦本人!!!49F 05/05 23:00
jserv: @asdfjoe, 我倒是很常看到混合多種程式語言於一身的系統50F 05/05 23:00
brian32609: 推!51F 05/05 23:01
jserv: 好比說人們說UNIX是C語言開發出來,但發展C語言的同一批人52F 05/05 23:01
wuwayway: 神串留名53F 05/05 23:01
vince123: 推推54F 05/05 23:02
jserv: 也發展了sed, awk等(在某個角度來說也是)程式語言,為何?55F 05/05 23:02
jserv: 能夠解決問題最實在,程式語言畢竟只是手段罷了
asdfjoe: 原來有 可能我見識太少了57F 05/05 23:02
rs6000: 神58F 05/05 23:03
TedZec: 噓的人可能不知道原po來頭....59F 05/05 23:04
mmonkeyboyy: 最後都是一堆binary 只要跑得好就好了60F 05/05 23:05
lagidog: 大大是韓粉嗎61F 05/05 23:05
sooge: 宅色夫!!!!!!!!!62F 05/05 23:05
ttff: 意思是說學會一種語言以後學其他語言會更有優勢嗎 轉換更快63F 05/05 23:05
ttff: ?
jserv: @ttff, 很不幸的,要看你拿程式語言在何時做什麼事,只看65F 05/05 23:07
jserv: 程式語言之間的轉換,很難獲得世俗的肯定
GaryMatthews: 推 可以嵌入 javascript ㄇ XD67F 05/05 23:09
jserv: @lagidog, 我家的螢幕採用OLED,裡頭有LED螢光粉,韓國技術68F 05/05 23:09
shawnm80: 推69F 05/05 23:09
jserv: 因為用了韓國OLED面板,我跟著裡頭的螢光粉,變成「韓粉」70F 05/05 23:09
jserv: 我「韓粉」,我驕傲,眼睛舒服,寫程式就跟著飛快了
DreamingIris: 有神先拜72F 05/05 23:11
jserv: @GaryMatthews, 可以啊,請在 GitHub 找 V8Py 專案73F 05/05 23:13
Wand 
Wand: 早啊74F 05/05 23:14
silentence: 我好像有點懂人類點起世間第一把火的感覺了75F 05/05 23:14
as60711: 來朝聖了 有神快拜76F 05/05 23:14
nova06091: 老師的學生都去哪些公司?77F 05/05 23:15
aadsl: 功三小 QQ78F 05/05 23:15
bohmonkey: 推推79F 05/05 23:15
jserv: @nova06091, 116畢業生最愛台GG (咦?)80F 05/05 23:21
jserv: @aadsl, 需要「做功」才能讓保持低熵狀態,的確是功三小
coisuet: 可以跟我說你好嗎82F 05/05 23:23
kokolotl: 朝聖83F 05/05 23:23
heaviest: 朝聖84F 05/05 23:26
biolive30: 朝聖85F 05/05 23:27
howard0113: 百推內??86F 05/05 23:28
heaviest: 老師可以說說Cython嗎?87F 05/05 23:29
asdfjoe: 進台GG摸得到C罩杯嗎?(誤88F 05/05 23:29
wbreeze: 推推89F 05/05 23:31
yogurt0313: 我先推90F 05/05 23:31
mengangel: 跪著看91F 05/05 23:32
ymx3xc: 推92F 05/05 23:32
hth9494: 老師可以推薦關於逆向工程的書嗎93F 05/05 23:33
ifiwant: 推94F 05/05 23:35
danny80060: 求翻譯95F 05/05 23:35
hunterliang: 推96F 05/05 23:35
notneme159: 推個97F 05/05 23:35
antele: 跪推98F 05/05 23:36
saedn: 好厲害!!99F 05/05 23:36
jobsdone: 老師怎麼看osdi18那篇用go寫os的呢100F 05/05 23:37
timthelord: 程式系?101F 05/05 23:37
yuiweq1999: 有神先跪102F 05/05 23:38
Amulart: 有神快拜103F 05/05 23:41
JameC: 這次文章長度有點短104F 05/05 23:42
helloxin: 老師好105F 05/05 23:45
NX9999: 讚!原來飛龍這麼強@@106F 05/05 23:51
Qkirito: 看不懂沒興趣 有更適合的版107F 05/05 23:51
jaid: jserv最近有發大財嗎108F 05/05 23:53
lostman: 有神快拜109F 05/05 23:54
OK8066889: 朝聖  神人發專業文,推文數還比不上小英的FB廢文110F 05/06 00:00
a72737363: 最後一個連結pageNotFount啦111F 05/06 00:01
abx310492: 推112F 05/06 00:05
Fice: 推113F 05/06 00:05
r5e97nk63: 每次看老師的文都自慚形穢QQ114F 05/06 00:05
junyussh: 有神快推115F 05/06 00:06
minicoke: 我跟教授順序一樣欸 c++ stl 超讚116F 05/06 00:07
k010447: 太神啦 五體投地117F 05/06 00:08
simpleplanya: 學到了118F 05/06 00:08
Daniel2098: 推119F 05/06 00:10
ZZZZ0: 嗯嗯120F 05/06 00:14
Joey452: 咬文嚼字,還不如一個好的idea121F 05/06 00:16
xx78826: push122F 05/06 00:18
isaacisaac: 推教授123F 05/06 00:19
bigbigcc: 推124F 05/06 00:20
ches51311: 跪<(_  _)>125F 05/06 00:22
stw0975: 推126F 05/06 00:23
HowLeeHi: jserv!!127F 05/06 00:24
tank123zzz: 朝聖128F 05/06 00:25
rog43: 老師果然又出現了129F 05/06 00:33
s510242: 朝聖130F 05/06 00:35
CJhang: 推專業131F 05/06 00:39
blackbottle: 嗯沒錯我也是這麼認為132F 05/06 00:47
GTR12534: 屏蔽 NotLikeThis133F 05/06 00:48
ericthree: 有神快拜134F 05/06 00:56
jserv: @timthelord, 我在資訊工程系教書,但不是「程式系」135F 05/06 00:57
liflguy: <(-_-)>136F 05/06 00:58
jserv: 台灣的資訊工程系比較像是「賞析程式系」,動手不算多137F 05/06 00:58
jserv: @Joey452, 等您來指點鄉民 m(_ _)m
Ciroses: 有大神快推!139F 05/06 01:00
jserv: @r5e97nk63, 因為挑戰廢文的極限嗎?140F 05/06 01:00
max8568: 推141F 05/06 01:01
jserv: @coisuet, an4 giu4 ho4 mo3 (客語:恁久好無?)142F 05/06 01:02
daye2012: 喔喔喔,看不懂143F 05/06 01:05
Bright: 乾 神144F 05/06 01:07
gn02561792: 推慣C!!145F 05/06 01:32
leo80042: 我跟很多同事已經放棄ctypes/boost python改投cython懷146F 05/06 01:42
leo80042: 抱了,老師怎麼看?
a0913865175: 謝老師148F 05/06 02:04
kevin015015: 神149F 05/06 02:15
fr5411: 朝聖150F 05/06 02:17
bennyyen: 推151F 05/06 02:27
hjgx: lambda152F 05/06 02:37
maxxpme: 推推153F 05/06 02:39
nrxadsl: 好猛154F 05/06 02:40
yoshihuang8: 推155F 05/06 03:14
wei115: 推156F 05/06 03:17
brian980466: Jserv......157F 05/06 03:24
dmeiki: 推158F 05/06 03:53
jserv: @hjgx, 請賞個patch,告訴我該怎麼改寫159F 05/06 03:54
jserv: @leo80042, 工具就是要解決問題。我偏好支持PyPy,不過實務
jserv: 上 PyPy 轉換得到的 C 程式品質仍不夠好,而且某些程式依然
jserv: 執行不了,暫時只能退回 swig, ctypes, cython 一類的混合
jserv: 方案,這就是現實
observer0117: 實用164F 05/06 06:38
ox3wqer: 媽我在這!!!165F 05/06 06:47
tokyoboy: 這是在p的環境下寫c對吧?厲害厲害166F 05/06 07:08
KaryuuIssen: 為什麼x--要寫兩次?167F 05/06 07:19
neiolin: 朝聖168F 05/06 07:34
qwe04687: ..jserv先推169F 05/06 07:52
rex44391: 跪著推170F 05/06 08:04
SamuelLuo: 推171F 05/06 08:10
aooa: 推172F 05/06 08:13
iamnotme: 朝聖C罩杯..啊不對 C語言大神173F 05/06 08:20
eggbird: 好猛~跪著推174F 05/06 08:25
ldeathkiller: 是說 有些python引用C shared library的trick網路上175F 05/06 08:44
ldeathkiller: 很難找
littlecathy2: 朝聖推個177F 05/06 08:46
woifeiwen: 慣C178F 05/06 09:08
kanetakusan: 先推,對論文蠻有興趣的,晚點看。其實大多數台灣人179F 05/06 09:09
kanetakusan: 一出生就內建兩種了啦,如果求學過程中有放較多心力
kanetakusan: 在英語,那就是三種了

--
※ 看板: Gossiping 文章推薦值: 1 目前人氣: 0 累積人氣: 860 
作者 jserv 的最新發文:
  • +38 Re: [問卦] 有GNU/Linux那有BSD/Linux嗎? - Gossiping 板
    作者: 140.116.246.163 (台灣) 2022-06-12 12:30:49
    回答這問題之前,我們應該先思考「什麼是 BSD?」 依據 FreeBSD 網站 的描述,FreeBSD 衍生自 BSD,後者則是 "the version of UNIX developed …
    49F 38推
  • +404 Re: [問卦] 要怎麼用針在光碟上戳出一個作業系統 - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-09-04 04:54:37
    「既然你誠心誠意地發問了,我們就大發慈悲地告訴你」(語出「火箭隊」) 這則笑話在 2010 年就出現巴哈姆特電玩資訊站 ,內容改寫自中國網友的創作, 已有十餘年,不過該笑話的弊端在於「針」。DVD 燒 …
    499F 407推 3噓
  • +83 Re: [問卦] 如何在Linux底下自幹win3.1系統? - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-09-03 12:41:58
    我是跟鄉民進來看熱鬧的,我跳進來了,我又跳出去了,打我啊笨蛋! (取自方唐鏡 名言) 學校老師應該忙著開學事宜,我幫他們回覆你的提問。 原題「在 Linux 系統底下要怎麼自己搞 win3.1 呢?」 …
    101F 83推
  • +230 Re: [問卦] 在卡上打洞寫程式是什麼感覺 - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-04-23 06:37:27
    剛好我需要跟學生解釋為何 Linux 核心原始程式碼的風格規範 中,限制一行至多 80 個字元,其典故跟「打孔卡」(punched card) 有關。 1890 年代,美國人口普查就使用新發明的穿孔卡 …
    247F 230推
  • +439 Re: [問卦] 原來上 ptt 可以學 linux 操作.. - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-04-23 00:01:26
    這恰好連結台灣特有的 BBS (電子布告欄) 文化及早期 Linux (和 BSD) 文字編輯器的 關聯。也讓我想起一年前過世的陳昇瑋博士,他的舊名是陳寬達,並以 Xshadow 的名號 馳名於早期的 …
    512F 444推 5噓
點此顯示更多發文記錄
分享網址: 複製 已複製
( ̄︶ ̄)b klin1 說讚!
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇