摘要:最近有個同事編譯一個腳本后,腳本里面調用函數的地方出現了問題。這個報錯的意思是,這個不支持參數,但是是支持這種特性的。特地去差了下文檔,確實如此在這里只要開啟選項,就可以解決問題。
TypeError
最近有個同事編譯一個腳本后,腳本里面調用函數的地方出現了問題。
用一個簡短的例子說明下:
py文件 a.py 內容如下:
def fn(a): print a fn(a=4) #出現問題在這一行
編譯腳本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執行是沒有問題的,但是用cython編譯成可執行文件后,執行就會出現如下錯誤:
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)的時候出現了問題。這個報錯的意思是,這個fn不支持keyword參數,但是python是支持這種特性的。這不是沖突了?
always_allow_keywords我上網找了一下,也有人碰到這個問題: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編譯器默認情況下會做一下優化:對于沒有參數或只有一個參數的函數,會禁止keyword參數。
特地去差了下cython文檔,確實如此:
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.
在這里只要開啟always_allow_keywords選項,就可以解決問題。所以我在前面build.sh里對cython 加了一個參數,效果如下:
cython -D -2 --directive always_allow_keywords=true --embed a.py
也就是增加了 --directive always_allow_keywords=true,也就解決了問題。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41939.html
摘要:摘要在下使用會碰到一些意外。本文就此簡單舉了一個例子來說明在中使用的正確姿勢。運行之接下來,我們來運行這個函數,當然是使用的方法。結束至此步驟全部完成本文只是給出了一些在上使用可能碰到的一些問題的解決方法。 摘要:在 Mac 下使用 Cython 會碰到一些意外。例如鏈接命令不一樣什么的。本文就此簡單舉了一個例子來說明在 Mac OS X 中使用 Cython 的正確姿勢。 安裝 Cy...
摘要:整體進度貢獻指南項目倉庫貢獻指南請您勇敢地去翻譯和改進翻譯。然后回復,注明章節號一定要留。二校對需要校對語法術語使用文檔格式如果覺得現有翻譯不好,重新翻譯也是可以的。三提交項目將譯文放在文件夾下請見入門指南。 整體進度:https://github.com/apachecn/c... 貢獻指南:https://github.com/apachecn/c... 項目倉庫:https://...
摘要:但是由于程序并沒有那么快,開發人員多年來創建了幾個的編譯器,包括和。在下面的細分中,所有的編譯器都針對進行基準測試。編譯器是系列的一部分,旨在作為的現代替代品。不僅僅是的編譯器,它是的超集,支持與的互操作性。 簡評:Python 和其他的解釋型語言一樣經常被吐槽性能不行,所以開發人員為了提升性能創建了不少編譯器,本文則選取其中的四個做了基準測試。 Python 其實是一種相當快的語言,...
摘要:在實際的工作中,有時候我們需要部署自己的應用,但這時候我們并不希望別人能夠看到自己的源程序。因此,我們需要為自己的源代碼進行加密,已經為我們提供了這樣一套工作機制。本文以系統為例,講解如何將自己的程序文件加密為文件。 ??在實際的工作中,有時候我們需要部署自己的Python應用,但這時候我們并不希望別人能夠看到自己的Python源程序。因此,我們需要為自己的源代碼進行加密,Python...
閱讀 3949·2021-11-22 13:53
閱讀 1676·2021-08-25 09:39
閱讀 2410·2019-08-29 18:36
閱讀 1469·2019-08-26 13:35
閱讀 1215·2019-08-26 11:57
閱讀 1678·2019-08-23 15:57
閱讀 803·2019-08-23 14:55
閱讀 1163·2019-08-23 14:51