- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果您要将大量值从 C 输出到 Python 中的字典,是否有比以下更好(更快且更不容易出错)的方法:
return Py_BuildValue("{s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:d,s:(i,i,i,i),s:(i,i,i,i),s:(i,i,i,i)}",
"jd\0", spa.jd, //Julian day
"jc\0", spa.jc, //Julian century
"jde\0", spa.jde, //Julian ephemeris day
"jce\0", spa.jce, //Julian ephemeris century
"jme\0", spa.jme, //Julian ephemeris millennium
"l\0", spa.l, //earth heliocentric longitude [degrees]
"b\0", spa.b, //earth heliocentric latitude [degrees]
"r\0", spa.r, //earth radius vector [Astronomical Units, AU]
"theta\0", spa.theta, //geocentric longitude [degrees]
"beta\0", spa.beta, //geocentric latitude [degrees]
"x0\0", spa.x0, //mean elongation (moon-sun) [degrees]
"x1\0", spa.x1, //mean anomaly (sun) [degrees]
"x2\0", spa.x2, //mean anomaly (moon) [degrees]
"x3\0", spa.x3, //argument latitude (moon) [degrees]
"x4\0", spa.x4, //ascending longitude (moon) [degrees]
"del_psi\0", spa.del_psi, //nutation longitude [degrees]
"del_epsilon\0", spa.del_epsilon, //nutation obliquity [degrees]
"epsilon0\0", spa.epsilon0, //ecliptic mean obliquity [arc seconds]
"epsilon\0", spa.epsilon, //ecliptic true obliquity [degrees]
"del_tau\0", spa.del_tau, //aberration correction [degrees]
"lamda\0", spa.lamda, //apparent sun longitude [degrees]
"nu0\0", spa.nu0, //Greenwich mean sidereal time [degrees]
"nu\0", spa.nu, //Greenwich sidereal time [degrees]
"alpha\0", spa.alpha, //geocentric sun right ascension [degrees]
"delta\0", spa.delta, //geocentric sun declination [degrees]
"h\0", spa.h, //observer hour angle [degrees]
"xi\0", spa.xi, //sun equatorial horizontal parallax [degrees]
"del_alpha\0", spa.del_alpha, //sun right ascension parallax [degrees]
"delta_prime\0", spa.delta_prime, //topocentric sun declination [degrees]
"alpha_prime\0", spa.alpha_prime, //topocentric sun right ascension [degrees]
"h_prime\0", spa.h_prime, //topocentric local hour angle [degrees],
"h0_prime\0", spa.h0_prime,
"delta_zero\0", spa.delta_zero,
"e0\0", spa.e0, //topocentric elevation angle (uncorrected) [degrees]
"del_e\0", spa.del_e, //atmospheric refraction correction [degrees]
"e\0", spa.e, //topocentric elevation angle (corrected) [degrees]
"eot\0", spa.eot, //equation of time [minutes]
"srha\0", spa.srha, //sunrise hour angle [degrees]
"ssha\0", spa.ssha, //sunset hour angle [degrees]
"sta\0", spa.sta, //sun transit altitude [degrees]
"zenith\0", spa.zenith, //topocentric zenith angle [degrees]
"azimuth180\0", spa.azimuth180, //topocentric azimuth angle (westward from south) [-180 to 180 degrees]
"azimuth\0", spa.azimuth, //topocentric azimuth angle (eastward from north) [ 0 to 360 degrees]
"incidence\0", spa.incidence, //surface incidence angle [degrees]
"_suntransit\0", spa.suntransit, //local sun transit time (or solar noon) [fractional hour]
"_sunrise\0", spa.sunrise, //local sunrise time (+/- 30 seconds) [fractional hour]
"_sunset\0", spa.sunset, //local sunset time (+/- 30 seconds) [fractional hour]
"sunrise\0", sunrise_hour, sunrise_min, sunrise_sec, sunrise_microsec,
"sunset\0", sunset_hour, sunset_min, sunset_sec, sunset_microsec,
"noon\0", transit_hour, transit_min, transit_sec, transit_microsec
);
最佳答案
我同意@Martin v. Löwis 关于使用 C 预处理器及其宏功能至少减轻一些设置和维护您正在做的事情的负担。如果您正确定义了这些宏,您可以安排将所有定义信息放在单个头文件中的一个位置,避免重复自己。
基本上,您需要关于每个项目或键值对的两条信息,这些信息将进入您正在构建的字典中。一个是放在 Py_BuildValue()
的格式字符串参数中的内容,第二个是键的来源和它的关联值。
您可以通过定义然后重新定义任务所需的宏来提取这两组信息中的每一个。对于您的示例,可以创建以下头文件。请注意,根据 #include
d 时定义的是 FORMAT
还是 FIELDS
,如何定义两组不同的宏中的一组。
// builddict.h -- for defining Py_BuildValue() arguments
// define apppropriate macros for current usage
#ifdef FORMAT
#define SPA_FIELD_LAST(FIELD) "s:d"
#define SPA_FIELD(FIELD) SPA_FIELD_LAST(FIELD)", "
#define TIME_FIELD_LAST(NAME) "s:(i,i,i,i)"
#define TIME_FIELD(NAME) TIME_FIELD_LAST(NAME)", "
#define TIME_KEY_FIELD_LAST(KEY,NAME) "s:(i,i,i,i)"
#define TIME_KEY_FIELD(KEY,NAME) TIME_KEY_FIELD_LAST(KEY,NAME)", "
#undef FORMAT
#elif defined FIELDS
#define SPA_FIELD_LAST(FIELD) #FIELD, spa.FIELD
#define SPA_FIELD(FIELD) SPA_FIELD_LAST(FIELD),
#define TIME_FIELD_LAST(NAME) #NAME, NAME##_hour, NAME##_min, NAME##_sec, NAME##_microsec
#define TIME_FIELD(NAME) TIME_FIELD_LAST(NAME),
#define TIME_KEY_FIELD_LAST(KEY,NAME) #KEY, NAME##_hour, NAME##_min, NAME##_sec, NAME##_microsec
#define TIME_KEY_FIELD(KEY,NAME) TIME_KEY_FIELD_LAST(KEY,NAME),
#undef FIELDS
#else
#error neither FORMAT nor FIELDS usage macros are defined
#endif
SPA_FIELD(jd) // Julian day
SPA_FIELD(jc) // Julian century
SPA_FIELD(jde) // Julian ephemeris day
SPA_FIELD(jce) // Julian ephemeris century
SPA_FIELD(jme) // Julian ephemeris millennium
SPA_FIELD(l) // earth heliocentric longitude [degrees]
SPA_FIELD(b) // earth heliocentric latitude [degrees]
SPA_FIELD(r) // earth radius vector [Astronomical Units) AU]
SPA_FIELD(theta) // geocentric longitude [degrees]
SPA_FIELD(beta) // geocentric latitude [degrees]
SPA_FIELD(x0) // mean elongation (moon-sun) [degrees]
SPA_FIELD(x1) // mean anomaly (sun) [degrees]
SPA_FIELD(x2) // mean anomaly (moon) [degrees]
SPA_FIELD(x3) // argument latitude (moon) [degrees]
SPA_FIELD(x4) // ascending longitude (moon) [degrees]
SPA_FIELD(del_psi) // nutation longitude [degrees]
SPA_FIELD(del_epsilon) // nutation obliquity [degrees]
SPA_FIELD(epsilon0) // ecliptic mean obliquity [arc seconds]
SPA_FIELD(epsilon) // ecliptic true obliquity [degrees]
SPA_FIELD(del_tau) // aberration correction [degrees]
SPA_FIELD(lamda) // apparent sun longitude [degrees]
SPA_FIELD(nu0) // Greenwich mean sidereal time [degrees]
SPA_FIELD(nu) // Greenwich sidereal time [degrees]
SPA_FIELD(alpha) // geocentric sun right ascension [degrees]
SPA_FIELD(delta) // geocentric sun declination [degrees]
SPA_FIELD(h) // observer hour angle [degrees]
SPA_FIELD(xi) // sun equatorial horizontal parallax [degrees]
SPA_FIELD(del_alpha) // sun right ascension parallax [degrees]
SPA_FIELD(delta_prime) // topocentric sun declination [degrees]
SPA_FIELD(alpha_prime) // topocentric sun right ascension [degrees]
SPA_FIELD(h_prime) // topocentric local hour angle [degrees])
SPA_FIELD(h0_prime)
SPA_FIELD(delta_zero)
SPA_FIELD(e0) // topocentric elevation angle (uncorrected) [degrees]
SPA_FIELD(del_e) // atmospheric refraction correction [degrees]
SPA_FIELD(e) // topocentric elevation angle (corrected) [degrees]
SPA_FIELD(eot) // equation of time [minutes]
SPA_FIELD(srha) // sunrise hour angle [degrees]
SPA_FIELD(ssha) // sunset hour angle [degrees]
SPA_FIELD(sta) // sun transit altitude [degrees]
SPA_FIELD(zenith) // topocentric zenith angle [degrees]
SPA_FIELD(azimuth180) // topocentric azimuth angle (westward from south) [-180 to 180 degrees]
SPA_FIELD(azimuth) // topocentric azimuth angle (eastward from north) [ 0 to 360 degrees]
SPA_FIELD(incidence) // surface incidence angle [degrees]
SPA_FIELD(suntransit) // local sun transit time (or solar noon) [fractional hour]
SPA_FIELD(sunrise) // local sunrise time (+/- 30 seconds) [fractional hour]
SPA_FIELD(sunset) // local sunset time (+/- 30 seconds) [fractional hour]
TIME_FIELD(sunrise)
TIME_FIELD(sunset)
TIME_KEY_FIELD_LAST(noon, transit) // must use a xxx_LAST macro on last one
// clean up to prevent warnings about redefining macros
#undef SPA_FIELD_LAST
#undef SPA_FIELD
#undef TIME_FIELD_LAST
#undef TIME_FIELD
#undef TIME_KEY_FIELD_LAST
#undef TIME_KEY_FIELD
一旦您完成所有设置,您的 build_dict()
函数将变得相当简短并且独立于字典的实际内容:
// build format string using header
char format_string[] = "{"
#define FORMAT
#include "builddict.h"
"}";
// use header again to build list of fields
PyObject* build_dict(SPA spa)
{
return Py_BuildValue(format_string,
#define FIELDS
#include "builddict.h"
);
}
虽然这不能完全自动化该过程,但可以提供很大帮助。可能有其他可用的文本处理或 C 接口(interface)工具(或者您可以编写自己的工具)来进一步帮助您创建这个单一的头文件,因为它采用非常统一的格式。
关于 python /C : Parse all values at once for return to Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4424206/
我发现在使用parse-node包时,不能再使用Parse.Cloud.httpRequest了。我也知道 Parse 的 Image 对象将不可用。 到目前为止,我已经能够用原生的替换一些 Pars
关闭。这个问题是opinion-based 。目前不接受答案。 已关闭 9 年前。 已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 我有一个函
开源 Parse Server 是否包含用于配置新 Parse 实例的 Schema API?我试图消除手动创建应用程序的需要。 这是通过 Parse.com 提供的架构 API http://blo
我想从我的云代码发出一个 http 请求,该请求在我的客户端被调用。 最佳答案 一开始我发现这有点令人困惑,所以希望这会有所帮助。 在您的云代码中main.js Parse.Cloud.define(
这部分代码应该读入两个或更多数字(省略主 io 函数),然后是一个“+”来给出总和。使用有理数是因为稍后我将进行乘法和其他此类操作。 data Expression = Number Rationa
我似乎找不到任何关于此的官方信息:Does Parse.Config work on Parse Server?它曾经在 Parse.com 上工作,但是当我尝试迁移到 Parse.Server 时,
我正在尝试找到使用 Parse.com 添加密码要求的最佳程序。似乎最简单的方法是在保存用户数据之前使用云功能执行。我唯一的警告是,只有当密码与数据库中存储的密码不同或者用户不存在于数据库中时,我才想
我是 android 开发、应用程序开发和一般开发的初学者,我正在尝试为我的 android 应用程序设置后端数据库。我决定使用一个名为 back4app 的服务,以便获得更加用户友好的数据库体验,因
我目前正在尝试将 Facebook 登录功能添加到我的应用程序。 根据Android文档,当我添加 compile 'com.parse:parsefacebookutils-v4-android:1
我正在尝试使用 Rebol 2/3 从字符串中解析货币值,货币值的格式为: 10,50 欧元或 10,50 欧元 我在浏览了所有 PARSE 文档后想出了这段代码,我可以在 Red 中找到它,但在 R
代码: DateTimeFormat dateFormat = DateTimeFormat .getFormat("EEE MMM dd HH:mm:ss zzz y
我不再在 Parse 上看到用于导入 JSON 或 CSV 文件的导入按钮。他们是否将其移动到某个地方,或者不再可能导入这些文件类型? 最佳答案 官方原因是这样的: “[导入类按钮] 几天前被删除,因
我正在使用 PHP 从我的服务器检索一些数据。我想在 javascript 应用程序中使用这些数据,所以我正在做这样的事情: var polylines = ; $polylines 只是一个 PHP
我已经开始使用 .NET 4 System.Numerics.BigInteger Structure我遇到了一个问题。 我正在尝试解析一个包含无符号(正数)的十六进制数字的字符串。我得到一个负数。
我正在使用 PHP 从我的服务器检索一些数据。我想在 javascript 应用程序中使用这些数据,所以我正在做这样的事情: var polylines = ; $polylines 只是一个 PHP
在 Go 中,尝试将字符串转换为 time.Time 时,使用时间包的 Parse 方法不会返回预期结果。似乎问题出在时区。我想更改为 ISO 8601 结合 UTC 日期和时间。 package m
我正在尝试将此字符串模式 "4-JAN-12 9:30:14" 解析为 time.Time。 尝试了 time.Parse("2-JAN-06 15:04:05", inputString) 和许多其
从云代码和解析开始。使用this . 如何删除所有 Parse 项目以便开始创建新项目?我收到以下错误: “您想要创建一个新应用程序,还是将 Cloud Code 添加到现有应用程序中?输入“(n)e
我在解析云代码时有这个功能: Parse.Cloud.define("testfunction", function(request, response) { var username = r
最近,我在 parse.com 上做了一些测试。我现在面临在后台作业中使用 Parse.Object.saveAll 的问题。 从 parse.com 的文档来看,后台作业可以运行 15 分钟。我现在
我是一名优秀的程序员,十分优秀!