我一直在考虑写一个峰值拟合库一段时间.我非常了解Python,并计划在Python中实现所有内容,但是设想我最终可能必须以编译语言重新实现一些核心例程.
IIRC,Python的原始版本之一是原型语言,但是Python在允许函数,仿函数,对象传递给函数和方法方面相当自由,而我怀疑C或Fortran也不是这样.
关于我设想的函数/类应该与编译语言接口,我应该知道些什么?这些潜在问题中有多少是由cTypes,bgen,SWIG,Boost.Python,Cython或Python SIP等库来处理的?
对于这个特殊的用例,(拟合库)我想让用户将数学函数(Guassian,Lorentzian等)定义为Python函数,然后可以通过编译的代码拟合库来解释它.传递和返回数组也很重要.
我正在与Mac OS X上安装SIP for Python作斗争.最后在编译和安装后我运行SIP(本地)的控制台表单文件夹时我可以导入sipconfig,但是当我在其他文件夹中时我不能 - 没有模块叫做sipconfig.
我的问题是 - 如果我想让它们全局可用(例如"import os"),我必须复制模块的文件夹在哪里,或者我如何检查它,因为位置"/Library/Python/2.6/site-packages /"不起作用.
我在使用PyQt/SIP时遇到了一些麻烦.我想SIP被编译成64位,但Python在找到它时遇到了一些问题.
File "qtdemo.py", line 46, in
import sip
ImportError: dlopen(/Library/Python/2.6/site-packages/sip.so, 2): no suitable image found. Did find:
/Library/Python/2.6/site-packages/sip.so: mach-o, but wrong architecture
现在我正在通过麻省理工学院的OpenCourseWare计算机科学课程的介绍.作为本课程的一部分,我正在学习Python语言.
我已经阅读了很多关于学习C的好处的事情.在我深入研究Python之前,我想知道我是否会因为首先学习Python而受到阻碍或帮助.
你认为我会从Python中养成任何坏习惯或类似的东西吗?
编辑:由于问题的主观性质,已更改为社区Wiki.
我很感谢第一个问题的所有重要答案.我真的被答案/评论的诚意所震撼.谢谢,很多人!
我试图通过一个类似于这个问题的方法来设置一些导入钩子.为此,我需要定义两个函数,如上面的链接所述.这是我的功能,sys.meta_pathfind_moduleload_moduleload_module
import imp
def load_module(name, path):
fp, pathname, description = imp.find_module(name, path)
try:
module = imp.load_module(name, fp, pathname, description)
finally:
if fp:
fp.close()
return module
Run Code Online (Sandbox Code Playgroud)
这适用于大多数模块,但PyQt4.QtCore在使用Python 2.7时失败:
name = "QtCore"
path = ['/usr/lib64/python2.7/site-packages/PyQt4']
mod = load_module(name, path)
Run Code Online (Sandbox Code Playgroud)
返回,
Traceback (most recent call last):
File "test.py", line 19, in <module>
mod = load_module(name, path)
File "test.py", line 13, in load_module
module = imp.load_module(name, fp, pathname, description)
SystemError: dynamic module not initialized …Run Code Online (Sandbox Code Playgroud) 基本上我想用C编写的Python程序调用函数.
所以(据我所知)我的选择是:
将C模块转换为python二进制模块真的更快吗?
两个解决方案是否都支持向C函数发送python回调?
SIP是生成python接口的好选择吗?还有其他选择吗?
其中任何一个都有其他特殊性吗?
我是Python环境的新手,并且真的很难在我的Win 7机器上安装SIP和PyQt.
这是我到目前为止所做的,
python configure.py在C:\ Python34\Lib文件和我得到的回应如下C:\Python34\Include(根据上面的响应-红色),但我不能找到任何这样的头文件,所以我想安装具有不成功了.任何人都可以帮助我,我在这里失踪了什么?
注意:以前发过几个问题,但到目前为止它们都没有帮助,我相信我一定会错过一些愚蠢的东西.
谢谢你的时间.
我有一个类似于以下的类:
class A {
vector<double> v;
double& x(int i) { return v[2*i]; }
double& y(int i) { return v[2*i+1]; }
double x(int i) const { return v[2*i]; }
double y(int i) const { return v[2*i+1]; }
}
Run Code Online (Sandbox Code Playgroud)
我想让以下Python代码工作:
a = A()
a.x[0] = 4
print a.x[0]
Run Code Online (Sandbox Code Playgroud)
我在想的__setattr__和__getattr__,但如果它的工作原理不清楚.另一种方法是实现以下Python:
a = A()
a['x', 0] = 4
print a['x', 0]
Run Code Online (Sandbox Code Playgroud)
不如前一个好,但可能更容易实现(用__slice__?).
PS.我正在使用sip进行绑定.
谢谢.
我一直在尝试在我的mac(OSX 10.6.8)上安装PyQt,但我仍然遇到这个问题:
当我尝试安装PyQt-mac-gpl-4.9.6时,我明白了
Error: This version of PyQt requires SIP v4.14.2 or later.
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我想在控制台上检查sip版本并写入时
sip -V
Run Code Online (Sandbox Code Playgroud)
,我得到了正确的版本:4.14.2
我已经查看了我的路径,但没有找到我发现的在线提示帮助了我.我该如何解决?
由于许可证,我必须选择PySide.但它的Shiboken工具缺乏文档.我无法成功为我的Qt C++库生成绑定.
看起来SIP至少在文档部分更成熟.我可以使用SIP生成绑定,然后在PySide上运行我的python代码来调用绑定吗?我的用户环境是Windows XP + Python 2.7 + PySide 1.1.2(基于Window安装程序,安装到C:\ Python27\Lib\site-packages\PySide).
python-sip ×10
python ×9
macos ×3
c ×2
c++ ×2
pyqt ×2
swig ×2
64-bit ×1
ctypes ×1
osx-leopard ×1
prototyping ×1
pyside ×1
python-2.7 ×1
python-cffi ×1
qt ×1
reference ×1