Python嵌入C++详解(1)--HelloWorld
来CSDN的时候,刚刚接触Python,那时候对Python的嵌入部分很感兴趣,只是一直没有时间来弄清其面纱,因此也一直没有使用嵌入的功能,另一个原因是我还没有真正用Python写过一个正式的有用点的东西,不过,现在回过头来继续看这一部分,发现还是挺简单的。以前想把这部分翻译出来,可是由于时间原因,也没有那精力,所以这里我会将我所探究的每个Python/C嵌入部分函数都用实例来说明,我想看代码比我解释要通俗易懂。
再说helloworld之前,先不得不提下嵌入的配置问题。
步骤:
1:请到官网下载python的安装程序,安装python(我想这步有点多余,不过还是写上吧)
2:接着你可能还需要下载python(与安装版本相同)源代码,因为我们需要在debug下编译链接生成对应的debug库,若你能在网上找到别人已经编译好的库,你也可以直接用别人的。这样得到2个debug版本的.lib和.dll
3:将python目录下的include文件夹下的文件移到编译系统的include中,然后将release和debug版本的.lib和.dll放到指定的文件夹中(lib放到编译系统lib,dll放到windows/system32/)
4:好了,配置就此完成了。
来看代码:
#include "python/python.h" // ......
Python嵌入C++详解(1)--HelloWorld
来CSDN的时候,刚刚接触Python,那时候对Python的嵌入部分很感兴趣,只是一直没有时间来弄清其面纱,因此也一直没有使用嵌入的功能,另一个原因是我还没有真正用Python写过一个正式的有用点的东西,不过,现在回过头来继续看这一部分,发现还是挺简单的。以前想把这部分翻译出来,可是由于时间原因,也没有那精力,所以这里我会将我所探究的每个Python/C嵌入部分函数都用实例来说明,我想看代码比我解释要通俗易懂。
再说helloworld之前,先不得不提下嵌入的配置问题。
步骤:
1:请到官网下载python的安装程序,安装python(我想这步有点多余,不过还是写上吧)
2:接着你可能还需要下载python(与安装版本相同)源代码,因为我们需要在debug下编译链接生成对应的debug库,若你能在网上找到别人已经编译好的库,你也可以直接用别人的。这样得到2个debug版本的.lib和.dll
3:将python目录下的include文件夹下的文件移到编译系统的include中,然后将release和debug版本的.lib和.dll放到指定的文件夹中(lib放到编译系统lib,dll放到windows/system32/)
4:好了,配置就此完成了。
来看代码:
#include "python/python.h" // ......
今天遇到一个一个问题,是将字符串类型的时间转化为UTC时间。例如time_str = "2009/11/09 12:23:23" 转化为UTC int型。
找了一些资料,发现time模块就能完成这个转换。
import time
time_str = "2009/11/09 12:23:23"
time_s = time.strptime(time_str,"%Y/%m/%d %H:%M:%S")
utc_f = time.mktime(time_s)
utc_i = int(time.mktime(time_s))
print time_s
(2009, 11, 9, 12, 23, 23, 0, 313, -1)
print utc_f
1257740603.0
print utc_t
1257740603
在linux中输入“date +%s” 就能输出当前utc时间。
附录:
http://www.opengroup.org/onlinepubs/009695399/functions/strptime.html
Directive:
%a - abbreviated weekday name
%A - full weekday name
%b - abbreviated month name
%B - full month name
%c - preferred date and time representation
%C - century number (the year divided by 100, range 00 to 99)
%d - day of the month (01 to 31)
%D - same as %m/%d/%y
%e - day of the month (1 to 31)
%g - like %G, but without the century
%G - 4-digit year corresponding to the ISO week number (see ......
python中国论坛 http://www.okpython.com/bbs/index.php
开源社区 http://sourceforge.net/
python官网 http://www.python.org/
pythonIDE BOAhttp://boa-constructor.sourceforge.net/
pythonIDE 大全http://www.oschina.net/project/tag/120
python组件http://py.dwordhack.com/
本文来自http://www.tsp2c.cn/ ......
我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出。有些我没有用过,先不写了。
以下是我使用过的python IDE:
除了PythonWin, VisualPython只支持Windows,其它都至少支持Win/Linux/Mac。
各项含义:
自动补全:变量/函数名打到一半时,提示可能的完整的变量/函数名。
智能感知:在库/类/对象后打"."后,提示可能的函数或变量。
调试:分四档,从好用到不好用分别为“类VC”(调试器操作方式与VC/eclipse相似),“WPDB”(使用WinPdb作为调试器),“用库”(要配合专门的python调试库,即要改代码来配合调试),最惨的当然是“无”啦。
语法检查:从好用到不好用分别为“存盘时”(存盘时自动检查,也可以在菜单里手动选择检查),“手动”(在菜单里选择检查),“无”(没有语法检查功能)
开源:分为开源,共享(提供免费试用,然后需要付费),收费三种。目前还没有“收费”这一类。
推荐度:五星为最推荐,一星为最不推荐。推荐度为作者主观评价,不代表其他人意见。
各IDE简介(注意本文最后修改时间是2008年7月):
IDLE:
装了pytho ......
'创建数据库
Private Sub Create(ByVal mdbPath As String)
If File.Exists(mdbPath) Then
Throw New Exception("目标数据库已经存在,无法创建")
End If
mdbPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath
Dim cat As ADOX.Catalog = New ADOX.Catalog()
cat.Create(mdbPath)
End Sub
'''' <summary>
'''压缩修复数据库
''' </summary>
''' <param name="mdbPath"> 被压缩的数据库路径+数据库文件名</param>
''' <remarks></remarks>
Public Sub Compact(ByVal mdbPath As String)
'If Not File.Exi ......
'创建数据库
Private Sub Create(ByVal mdbPath As String)
If File.Exists(mdbPath) Then
Throw New Exception("目标数据库已经存在,无法创建")
End If
mdbPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath
Dim cat As ADOX.Catalog = New ADOX.Catalog()
cat.Create(mdbPath)
End Sub
'''' <summary>
'''压缩修复数据库
''' </summary>
''' <param name="mdbPath"> 被压缩的数据库路径+数据库文件名</param>
''' <remarks></remarks>
Public Sub Compact(ByVal mdbPath As String)
'If Not File.Exi ......
SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。雨痕极力推荐~~~~~~
今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!
下面是他发给我的测试代码。我晕~~~~~~
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
......
SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。雨痕极力推荐~~~~~~
今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!
下面是他发给我的测试代码。我晕~~~~~~
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
......