摘要:最近有個(gè)同事編譯一個(gè)腳本后,腳本里面調(diào)用函數(shù)的地方出現(xiàn)了問(wèn)題。這個(gè)報(bào)錯(cuò)的意思是,這個(gè)不支持參數(shù),但是是支持這種特性的。特地去差了下文檔,確實(shí)如此在這里只要開(kāi)啟選項(xiàng),就可以解決問(wèn)題。
TypeError
最近有個(gè)同事編譯一個(gè)腳本后,腳本里面調(diào)用函數(shù)的地方出現(xiàn)了問(wèn)題。
用一個(gè)簡(jiǎn)短的例子說(shuō)明下:
py文件 a.py 內(nèi)容如下:
def fn(a): print a fn(a=4) #出現(xiàn)問(wèn)題在這一行
編譯腳本build.sh如下:
cython -D -2 --embed a.py gcc -c -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.7 -o a.o a.c gcc -I/usr/include/python2.7 -o a a.o -lpython2.7
前面的a.py用python a.py執(zhí)行是沒(méi)有問(wèn)題的,但是用cython編譯成可執(zhí)行文件后,執(zhí)行就會(huì)出現(xiàn)如下錯(cuò)誤:
Traceback (most recent call last): File "a.py", line 4, in init a fn(a=4) TypeError: fn() takes no keyword arguments
也就是在 fn(a=4)的時(shí)候出現(xiàn)了問(wèn)題。這個(gè)報(bào)錯(cuò)的意思是,這個(gè)fn不支持keyword參數(shù),但是python是支持這種特性的。這不是沖突了?
always_allow_keywords我上網(wǎng)找了一下,也有人碰到這個(gè)問(wèn)題:https://github.com/bottlepy/b...
這里有人指出:
This is actually an incorrect assertion, and there is a quite simply fix. By default, Cython compiles functions with 0 or 1 arguments, as special PyCFunction METH_O or METH_NOARGS. This functions do not accept keyword arguments. You can tell Cython to disable this optimization by changing the always_allow_keywords compiler directive to True (you can do it per function, per file or globally, check cython"s documentation on how to do it). This issue happens actually in all web frameworks who use tricks like this.
cython編譯器默認(rèn)情況下會(huì)做一下優(yōu)化:對(duì)于沒(méi)有參數(shù)或只有一個(gè)參數(shù)的函數(shù),會(huì)禁止keyword參數(shù)。
特地去差了下cython文檔,確實(shí)如此:
always_allow_keywords (True / False) Avoid the METH_NOARGS and METH_O when constructing functions/methods which take zero or one arguments. Has no effect on special methods and functions with more than one argument. The METH_NOARGS and METH_O signatures provide faster calling conventions but disallow the use of keywords.
在這里只要開(kāi)啟always_allow_keywords選項(xiàng),就可以解決問(wèn)題。所以我在前面build.sh里對(duì)cython 加了一個(gè)參數(shù),效果如下:
cython -D -2 --directive always_allow_keywords=true --embed a.py
也就是增加了 --directive always_allow_keywords=true,也就解決了問(wèn)題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41939.html
摘要:摘要在下使用會(huì)碰到一些意外。本文就此簡(jiǎn)單舉了一個(gè)例子來(lái)說(shuō)明在中使用的正確姿勢(shì)。運(yùn)行之接下來(lái),我們來(lái)運(yùn)行這個(gè)函數(shù),當(dāng)然是使用的方法。結(jié)束至此步驟全部完成本文只是給出了一些在上使用可能碰到的一些問(wèn)題的解決方法。 摘要:在 Mac 下使用 Cython 會(huì)碰到一些意外。例如鏈接命令不一樣什么的。本文就此簡(jiǎn)單舉了一個(gè)例子來(lái)說(shuō)明在 Mac OS X 中使用 Cython 的正確姿勢(shì)。 安裝 Cy...
摘要:整體進(jìn)度貢獻(xiàn)指南項(xiàng)目倉(cāng)庫(kù)貢獻(xiàn)指南請(qǐng)您勇敢地去翻譯和改進(jìn)翻譯。然后回復(fù),注明章節(jié)號(hào)一定要留。二校對(duì)需要校對(duì)語(yǔ)法術(shù)語(yǔ)使用文檔格式如果覺(jué)得現(xiàn)有翻譯不好,重新翻譯也是可以的。三提交項(xiàng)目將譯文放在文件夾下請(qǐng)見(jiàn)入門(mén)指南。 整體進(jìn)度:https://github.com/apachecn/c... 貢獻(xiàn)指南:https://github.com/apachecn/c... 項(xiàng)目倉(cāng)庫(kù):https://...
摘要:但是由于程序并沒(méi)有那么快,開(kāi)發(fā)人員多年來(lái)創(chuàng)建了幾個(gè)的編譯器,包括和。在下面的細(xì)分中,所有的編譯器都針對(duì)進(jìn)行基準(zhǔn)測(cè)試。編譯器是系列的一部分,旨在作為的現(xiàn)代替代品。不僅僅是的編譯器,它是的超集,支持與的互操作性。 簡(jiǎn)評(píng):Python 和其他的解釋型語(yǔ)言一樣經(jīng)常被吐槽性能不行,所以開(kāi)發(fā)人員為了提升性能創(chuàng)建了不少編譯器,本文則選取其中的四個(gè)做了基準(zhǔn)測(cè)試。 Python 其實(shí)是一種相當(dāng)快的語(yǔ)言,...
摘要:在實(shí)際的工作中,有時(shí)候我們需要部署自己的應(yīng)用,但這時(shí)候我們并不希望別人能夠看到自己的源程序。因此,我們需要為自己的源代碼進(jìn)行加密,已經(jīng)為我們提供了這樣一套工作機(jī)制。本文以系統(tǒng)為例,講解如何將自己的程序文件加密為文件。 ??在實(shí)際的工作中,有時(shí)候我們需要部署自己的Python應(yīng)用,但這時(shí)候我們并不希望別人能夠看到自己的Python源程序。因此,我們需要為自己的源代碼進(jìn)行加密,Python...
閱讀 3964·2021-11-22 13:53
閱讀 1693·2021-08-25 09:39
閱讀 2421·2019-08-29 18:36
閱讀 1481·2019-08-26 13:35
閱讀 1225·2019-08-26 11:57
閱讀 1688·2019-08-23 15:57
閱讀 811·2019-08-23 14:55
閱讀 1171·2019-08-23 14:51