鱼C论坛

 找回密码
 立即注册
查看: 114|回复: 4

[已解决]from requests import get 这句里的 get 就应该是 模块...

[复制链接]
发表于 2024-5-24 12:56:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.  那 requests 就是个包,那 from requests import get 这句里的 get 就应该是 模块了?  但从安装目录里找不到 get模块对应的  get.py, 为啥呢?  

2.  >>> os.path.basename(get.__file__)   也执行不了
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'get' is not defined. Did you mean: 'set'?


3. 有个  requests.Session() 的调用,但安装目录下没有 session.py 这个文件,为啥呢?


000sss.png
最佳答案
2024-5-24 18:36:15
1、导入 requests 实际上就是导入 requests 文件夹下的 __init__.py (命名空间包除外)

所以在 __init__.py 中 get 是一个函数,那么 from requests import get 导入的 get 就是一个函数,并不是说从包里面导入的就一定是模块

2、如上所述,get是一个函数,函数是没有 __file__ 属性的,你这里的报错是 get 没有定义,说明你没有导入get,也就是说你执行 os.path.basename(get.__file__) 之前并没有执行 from requests import get,即使你导入 get 了也会报另一个错,因为 get是函数,并没有 __file__ 属性

3、正如 1 所说,导入一个包就是导入 __init__.py,在 requests 的 __init__.py 中 Session 是一个类,所以你是找不到 session.py 的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-24 12:56:21 | 显示全部楼层
1. 对于语句 "from requests import get",requests 是一个包,get 是这个包中的一个模块或函数。但是实际上,requests 中的 get 并不是一个单独的模块,而是该包中的一个函数。所以你在安装目录里找不到名为 get.py 的文件是正常的。

2. 在你的代码中,get 并不是一个直接可用的变量。get 是 requests 包中的一个函数,你可以通过这样的方式使用它:
from requests import get

response = get("http://www.example.com")
print(response.text)

这样才能正确引用 get 函数,并获取到请求的结果。

3. 类似于 get,requests 中的 Session 也是一个类,而不是一个单独的模块。你可以通过以下方式使用它:
import requests

session = requests.Session()
response = session.get("http://www.example.com")
print(response.text)

这样,你就可以创建一个会话对象并发送请求了。同样地,你不会在安装目录下找到一个名为 session.py 的文件,因为它只是 requests 包中的一个类。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-24 13:39:07 | 显示全部楼层
可以从包直接导入函数,还是得 从包导入模块,通过 moudle.function() 来调用呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-24 13:39:25 | 显示全部楼层
blackantt 发表于 2024-05-24 13:39
可以从包直接导入函数,还是得 从包导入模块,通过 mo ...


对于大多数情况下,你需要先从包导入模块,然后通过模块来调用其中的函数。但是对于一些特定的包,也可以直接从包中导入函数。这取决于包的设计和实现。

如果一个包被设计为允许你直接从包中导入函数,那么你可以使用以下语法:

from 包名 import 函数名

例如,在 requests 包中,你可以直接从包中导入 get 函数:

from requests import get

response = get("http://www.example.com")
print(response.text)

这样可以直接使用 get 函数,而不需要通过模块名来调用。

但并不是所有的包都允许这样做。大部分情况下,你需要从包中导入模块,然后使用模块来调用其中的函数:

import 包名.模块名

例如,在 requests 包中,你需要导入整个 requests 模块,然后使用该模块中的函数:

import requests

response = requests.get("http://www.example.com")
print(response.text)

总的来说,导入函数还是导入模块取决于包的设计,你可以查看包的文档或源代码来确定正确的导入方式。如果不确定,最好采用从模块导入函数的方式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-24 18:36:15 | 显示全部楼层    本楼为最佳答案   
1、导入 requests 实际上就是导入 requests 文件夹下的 __init__.py (命名空间包除外)

所以在 __init__.py 中 get 是一个函数,那么 from requests import get 导入的 get 就是一个函数,并不是说从包里面导入的就一定是模块

2、如上所述,get是一个函数,函数是没有 __file__ 属性的,你这里的报错是 get 没有定义,说明你没有导入get,也就是说你执行 os.path.basename(get.__file__) 之前并没有执行 from requests import get,即使你导入 get 了也会报另一个错,因为 get是函数,并没有 __file__ 属性

3、正如 1 所说,导入一个包就是导入 __init__.py,在 requests 的 __init__.py 中 Session 是一个类,所以你是找不到 session.py 的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-17 03:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表