对python模块和函数感到困惑

时间:2011-03-11 12:44:14

标签: python

简要描述我的问题,请看下面的例子:

  1. 模块os有一个函数getcwd(),它返回当前的工作目录。但是os.getcwd()文件中没有关于/usr/lib/python2.7/os.py的详细信息。这个功能的执行在哪里?

  2. os.path也是python中的一个模块,但在/usr/lib/python2.7目录中,没有名为os.path的文件。那么当您在python脚本中import os.path时,导入了哪个文件?

  3. 感谢所有帮助...

4 个答案:

答案 0 :(得分:3)

1。 getcwd()函数在C look here中实现。

2。 os.path在模块os中定义,动态检测os类型并导入相应的库并使用以下内容进行设置:sys.modules['os.path'] = path

答案 1 :(得分:2)

模块不一定是python脚本。使用C-API,您可以撰写modules in C or C++。您可以将它们编译为动态库,以便解释器可以动态加载它们,或者您可以重新编译解释器并将模块链接到它中。

答案 2 :(得分:1)

如果您使用的是POSIX系统(Linux,Mac OS X),os.py中的这些行会带来这些内容:

from posix import *
import posixpath as path

在Windows上:

from nt import *
import ntpath as path

(另外还有一些不太流行的系统选项)

请注意,使用from x import *通常不赞成。这是一种特殊情况。

答案 3 :(得分:1)

交互式python shell可用于检查模块的加载位置,以及查看方法是内置的还是python:

>>> import os
>>> os
<module 'os' from '/usr/lib/python2.6/os.pyc'>
>>> os.path
<module 'posixpath' from '/usr/lib/python2.6/posixpath.pyc'>
>>> os.getcwd
<built-in function getcwd>
>>> os.path.join
<function join at 0x87d1b1c>
>>>

os.path已从posixpath.pyc加载, os.getcwd是内置的,os.path.join是一种python方法。