
没怎么用过动态类型语言写项目,最近的项目要用到 openai 相关的 api 接口,直接就动手撸 py 了,但是每次调没有 type Hints 第三方轮子返回的数据又不知道如何用,点进源码也是乱七八糟的各种调用,也没有 ide 提示,这就很麻烦了
1 szzhiyang 2023 年 9 月 1 日 无解,赶紧转 Go 语言。 |
2 lanlanye 2023 年 9 月 1 日 如果你知道接口应该返回什么类型,可以在声明变量的时候自己加上注解,这样至少之后的代码能有提示。 |
3 dayeye2006199 2023 年 9 月 1 日 via Android Python 是这样的,只能看 API 文档了 |
4 szzhiyang 2023 年 9 月 1 日 咦,你不是主用 Go 吗?为啥用 Python ? |
5 voidmnwzp OP openai 官方有 py 的库,调用起来比较方便,go 的话还要写轮子 |
6 Sinksky 2023 年 9 月 1 日 Typehint 、翻文档、看别人怎么用的、全局搜索找定义。。 |
7 flyqie 2023 年 9 月 1 日 via Android 弱类型都这样,你说的这些如果实现了,那还叫啥弱类型。。 楼上说的很全面了,最好还是直接看源码,没有源码的话只能看文档。 |
8 lonewolfakela 2023 年 9 月 1 日 实在不好弄直接开调试器看…… |
9 flyqie 2023 年 9 月 1 日 via Android |
10 dayeye2006199 2023 年 9 月 1 日 不怕麻烦的话,可以给原库加上 typeddict -- https://peps.python.org/pep-0589/ |
11 lsry 2023 年 9 月 1 日 深有同感吗,不只是返回值,如果使用某个函数带参数,甚至都不知道怎么传参 |
12 mahaoqu 2023 年 9 月 1 日 动态类型语言当然是开发的时候就用 REPL 啦,要不然 IPython 弄的那么精致是为了什么 |
13 oldshensheep 2023 年 9 月 1 日 Python 现在也支持声明类型,不过现在用的库比较少。 说实话我特别讨厌写 Python 调用别人的库,基本上总是要看源码,看文档,看文档一般是打开网页看。 写 Python 基本上一直在 debug ,然后摸石头过河…… Python 的话基本上都喜欢一个 dict 走天下,dict 里有什么全靠文档,什么类型不存在的。 现在我写代码别人的变量都加上 Typehint ,没有代码提示写代码都提心吊胆。不过也不是所有地方都有确定的数据结构…… |
15 ochatokori 2023 年 9 月 1 日 via Android 当然是控制台打印出来看 |
16 bybyte 2023 年 9 月 1 日 写习惯了 c/c++/golang 写 python 相当难受。。。 |
17 mPatrickStar 2023 年 9 月 1 日 看文档、跳转看源码、debug 、依靠熟悉程度。 |
19 mmdsun 2023 年 9 月 1 日 对接 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); } ``` |
22 pkoukk 2023 年 9 月 1 日 看文档,动态类型语言就是这样 |
23 Danswerme 2023 年 9 月 1 日 看文档,打断点或者打印日志 |
24 lhbc 2023 年 9 月 1 日 via Android 如果一个接口返回的数据,某些字段的类型不确定,动态类型语言不是更容易处理吗? Go 这种静态类型,想把数据 parse 进结构体要怎么写? |
25 NoOneNoBody 2023 年 9 月 1 日 我靠 ide 扩展 pyright |
26 ZeroDu 2023 年 9 月 1 日 确实调方法简直是噩梦,根本不知道方法可以传递那些参数。 |
27 julyclyde 2023 年 9 月 3 日 @oldshensheep 那个声明好像也就仅仅是声明吧,给 IDE 用的。没有运行时意义 |
28 zyxbcde 2023 年 9 月 3 日 via iPhone 现在正八经写 python 的大部分都会写类型,最起码我自己在使用开源项目时候没有这种烦恼。一个项目想收获 star 自然得让人能看得懂,能用。如果他提供的代码和文档你都看不懂,那最好别直接用这项目。 |
29 Gantnocap 2023 年 9 月 4 日 我说些建议你参考一下吧 1. 首先要多查看该库的官方文档,文档通常会注明函数和方法的输入参数类型和返回值类型。 2. 如果文档不够明确,可以查看该函数或方法的源码实现,来推断返回值类型。 3. 通过打印输出或判断类型(type())来判断返回结果的类型。 4. 如果返回结果为字典、列表等复杂类型,可以逐层打印输出结果,来查看内部结构。 5. 也可以写一些测试代码,传入不同的参数,来观察返回结果。 6. 如果实在无法确定,可以将返回结果赋值给变量,然后通过变量的属性和方法来推断类型。 7. 最后,如果需要可以给第三方库作者提 issue 或 PR,请求补充类型注释,来改进库的类型提示。 综上,多查看文档、源码,辅以打印输出、测试等方法可以更好地判断 Python 第三方库中函数的返回类型。 |
30 fbichijing 2023 年 9 月 4 日 有 api 的不是 api 有规定字段对应的格式吗?返回值一般的话同一个字段类型都是固定的吧。如果不同时候调用返回时的类型不一样也太神奇了吧.. |
31 Maerd 2023 年 9 月 5 日 api 没有规定格式? |
32 zjp 2023 年 9 月 6 日 via Android 偶尔需要写 bash 搞不定的脚本时会用 Python ,也一直被这个问题困扰。在控制台实时看数据类型能解决一部分,但是带来的新问题是要在源文件和控制台直接来回复制代码 |