VC调用Python函数,如何传递一个中文参数?如何得到中文返回值?

chixiao 2010-06-02 05:26:17
test2.py文件里的内容,很简单的:
# -*- coding: utf-8 -*
def Hello(s):
print s

然后我在VC 2005新建一个Console项目,调用这个test2.py里的hello函数,给Hello函数传递一个英文字符串比如"Hello Python",很正常地显示出来了。
然而传递一个"u\"你好Python\""字符串,却显示的是:

u"你好Python"
[7682 refs]
请按任意键继续. . .

请问这样的显示结果是否正确?如何去掉前面的"u"?
还有每次运行都会出现[7682 refs]是什么意思?怎么去掉它?

最后,当在VC调用某个函数以后,如何得到一个中文字符串的返回值?

VC 2005代码如下:

int test2()
{
Py_Initialize();
PyObject * pModule = NULL;
PyObject * pFunc = NULL;
PyObject * pArg = NULL;

pModule = PyImport_ImportModule("test2");
pFunc = PyObject_GetAttrString(pModule, "Hello");
pArg = Py_BuildValue("(s)", "u\"你好Python\"");
PyEval_CallObject(pFunc, pArg);
Py_Finalize();
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "chs");
test2();
system("pause");
return 0;
}
...全文
277 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
diskingchuan 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 diskingchuan 的回复:]
引用 1 楼 thy38 的回复:
前两个问题都可以用print来去掉

vc要得到中文返回值,如果是utf8的,得做一下转换。



求教,为什么
pModule = PyImport_ImportModule("test2");
pFunc = PyObject_GetAttrString(pModule, "Hello");
pArg = Py_BuildValue("(……
[/Quote]

另,我想传递一个中文参数到Python中,该如何做?
diskingchuan 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thy38 的回复:]
前两个问题都可以用print来去掉

vc要得到中文返回值,如果是utf8的,得做一下转换。
[/Quote]


求教,为什么
pModule = PyImport_ImportModule("test2");
pFunc = PyObject_GetAttrString(pModule, "Hello");
pArg = Py_BuildValue("(s)", "u\"你好Python\"");

我的 Py_BuildValue() 返回时空值,也就是说参数创建是失败的?
其他地方和LZ是一样的。(Python版本3.1.2)
thy38 2010-06-04
  • 打赏
  • 举报
回复
前两个问题都可以用print来去掉

vc要得到中文返回值,如果是utf8的,得做一下转换。
PHP7 ,将会是PHP脚本语言的重大版本更新,同时将带来大幅的性能改进和新的特性,以及改进一些过时功能。该发布版本将会专注在性能加强,源自PHP版本树中的phpng分支 . . 截止到目前为止,PHP官方已经发布了php7的RC5版本,预计在11月份左右会发布第一个正式版本!现在来说php7的重大特性肯定已经是定型了,不会再有什么变动了。后续一些版本的迭代主要也就是修修bug,优化之类的。下面就来说话我们一直期待的php7.0五大新特征吧。 层流罩 www.bjyongjiekang.com 如果你使用的是基于 composer 和 PSR-4 的框架,这种写法是否能成功的加载类文件?其实是可以的,composer 注册的自动加载方法是在类被调用的时候根据类的命名空间去查找位置,这种写法对其没有影响。 1. 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用。用法: ? 1 $a = $_GET['a'] ?? 1; 它相当于: ? 1 2 函数返回值类型声明 官方文档提供的例子(注意 … 的边长参数语法在 PHP 5.6 以上的版本中才有): ? 1 2 3 4 5 6 7 8 函数(包括匿名函数)都可以指定返回值的类型。 这种声明的写法有些类似于 swift: ? 1 2 3 4 func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting } 这个特性可以帮助我们避免一些 PHP 的隐式类型转换带来的问题。在定义一个函数之前就想好预期的结果可以避免一些不必要的错误。 不过这里也有一个特点需要注意。PHP 7 增加了一个 declare 指令:strict_types,既使用严格模式。 使用返回值类型声明时,如果没有声明为严格模式,如果返回值不是预期的类型,PHP 还是会对其进行强制类型转换。但是如果是严格模式, 则会出发一个 TypeError 的 Fatal error。 强制模式: ? 1 2 3 4 5 6 函数返回 int 1,没有任何错误。 严格模式: ? 1 2 3 4 5 6 7 8 函数的形参类型声明可以是标量了。在 PHP 5 中只能是类名、接口、array 或者 callable (PHP 5.4,即可以是函数,包括匿名函数),现在也可以使用 string、int、float和 bool 了。 官方示例: ? 1 2 3 4 5 6 7 参数进行强制类型转换,严格模式下则触发 TypeError 的致命错误。 4. use 批量声明 PHP 7 中 use 可以在一句话中声明多个类或函数或 const 了: ? 1 2 3 4 函数或 const 的名称(并没有像 python 一样的 from some import * 的方法)。 需要留意的问题是:如果你使用的是基于 composer 和 PSR-4 的框架,这种写法是否能成功的加载类文件?其实是可以的,composer 注册的自动加载方法是在类被调用的时候根据类的命名空间去查找位置,这种写法对其没有影响。 5. 其他的特性 其他的一些特性我就不一一介绍了,有兴趣可以查看官方文档:http://php.net/manual/en/migration70.new-features.php 简要说几个: PHP 5.3 开始有了匿名函数,现在又有了匿名类了; define 现在可以定义常量数组; 闭包( Closure)增加了一个 call 方法; 生成器(或者叫迭代器更合适)可以有一个最终返回值(return),也可以通过 yield from 的新语法进入一个另外一个生成器中(生成器委托)。 生成器的两个新特性(return 和 yield from)可以组合。具体的表象大家可以自行测试。PHP 7 现在已经到 RC5 了,最终的版本应该会很快到来。 以上所述是关于php7.0新特征的全部内容,希望本文介绍大家喜欢。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧