动态类型的语言用第三方的库,到底如何确定返回值类型?

2023-09-01 00:17:59 +08:00
 voidmnwzp

没怎么用过动态类型语言写项目,最近的项目要用到 openai 相关的 api 接口,直接就动手撸 py 了,但是每次调没有 type Hints 第三方轮子返回的数据又不知道如何用,点进源码也是乱七八糟的各种调用,也没有 ide 提示,这就很麻烦了

3512 次点击
所在节点    Python
32 条回复
szzhiyang
2023-09-01 00:23:21 +08:00
无解,赶紧转 Go 语言。
lanlanye
2023-09-01 00:23:57 +08:00
如果你知道接口应该返回什么类型,可以在声明变量的时候自己加上注解,这样至少之后的代码能有提示。
dayeye2006199
2023-09-01 00:28:02 +08:00
Python 是这样的,只能看 API 文档了
szzhiyang
2023-09-01 00:33:23 +08:00
咦,你不是主用 Go 吗?为啥用 Python ?
voidmnwzp
2023-09-01 00:38:35 +08:00
openai 官方有 py 的库,调用起来比较方便,go 的话还要写轮子
Sinksky
2023-09-01 00:39:08 +08:00
Typehint 、翻文档、看别人怎么用的、全局搜索找定义。。
flyqie
2023-09-01 00:55:13 +08:00
弱类型都这样,你说的这些如果实现了,那还叫啥弱类型。。

楼上说的很全面了,最好还是直接看源码,没有源码的话只能看文档。
lonewolfakela
2023-09-01 00:57:23 +08:00
实在不好弄直接开调试器看……
flyqie
2023-09-01 01:08:27 +08:00
@lonewolfakela #8

弱类型经典且好用的调试方法:

开调试器/打印出来类型看看
dayeye2006199
2023-09-01 02:34:53 +08:00
不怕麻烦的话,可以给原库加上 typeddict -- https://peps.python.org/pep-0589/
lsry
2023-09-01 04:05:38 +08:00
深有同感吗,不只是返回值,如果使用某个函数带参数,甚至都不知道怎么传参
mahaoqu
2023-09-01 06:31:42 +08:00
动态类型语言当然是开发的时候就用 REPL 啦,要不然 IPython 弄的那么精致是为了什么
oldshensheep
2023-09-01 06:50:09 +08:00
Python 现在也支持声明类型,不过现在用的库比较少。
说实话我特别讨厌写 Python 调用别人的库,基本上总是要看源码,看文档,看文档一般是打开网页看。
写 Python 基本上一直在 debug ,然后摸石头过河……

Python 的话基本上都喜欢一个 dict 走天下,dict 里有什么全靠文档,什么类型不存在的。
现在我写代码别人的变量都加上 Typehint ,没有代码提示写代码都提心吊胆。不过也不是所有地方都有确定的数据结构……
lhbc
2023-09-01 07:13:03 +08:00
@flyqie Python 是典型的强类型
ochatokori
2023-09-01 09:01:55 +08:00
当然是控制台打印出来看
bybyte
2023-09-01 09:06:09 +08:00
写习惯了 c/c++/golang 写 python 相当难受。。。
mPatrickStar
2023-09-01 09:12:47 +08:00
看文档、跳转看源码、debug 、依靠熟悉程度。
wipbssl
2023-09-01 09:33:34 +08:00
@flyqie python 是强类型,动态类型。
mmdsun
2023-09-01 09:55:14 +08:00
对接 OpenAI 我看了一圈选择的 Java ,spring webflux 项目只需要一句话,还支持 SSE 。

```
@PostMapping(value = "/completions-web-client", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<String>> completionsWebClient(@RequestBody @Valid ChatRequest request) {
ParameterizedTypeReference<ServerSentEvent<String>> type = new ParameterizedTypeReference<>() {
};
return webClient.post()
.uri("/v1/chat/completions")
.bodyValue(request)
.header("Authorization", "Bearer " + chatGptConfig.getOpenAi().getApiKey())
.retrieve()
.bodyToFlux(type);
}
```
ruanimal
2023-09-01 10:15:33 +08:00
@bybyte 反之亦然

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969919

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX