help()
- 可以使用help()函数查询不熟悉的函数、基本类型、常用类的使用方法。例如 help(input)则可以显示input()函数使用方法,包括参数之类的。注意是help(input),不是help(input()), 后面一种,似乎会卡住,其实后者相当于在help函数里有调用了另一个函数,所以只需要传一个函数名字就够了,这样就不会调用help里面的那个函数。
module
- 定义: 简单来说,一个Pyhton文件(.py)就是一个module。
- 导入模块的方式:
- import module_name (module_name 为模块名):直接导入一个模块,当然也可以同时导入多个模块,import module_a, module_b
- import module_name as f :导入模块module_name,并且起一个别名f,这个别名在这个文件中起作用,并且只能使用f,而不能使用module_name,例如调用模块的一个函数时 a = f.func_a() 是正确的 , a = module.func_a() 是错误的
- from module_name import fuc_name :不是导入整个模块,而是导入模块的几个函数(这里只导入了一个函数),此时,只有被导入的这几个函数才能被使用,而未被导入的函数是不能使用的。例如可以调用函数 a = func_name() ,而不能调用函数 a = func2_name() ;若想使用这两个函数,如上所言, from module_name import func_name, func2_name 就可以了。
- from module_name import * :将模块中的所有函数全部导入到文件中,该模块的所有函数在该文件中都可以直接使用。
- a = __ import __(“abc def”) 或 a = __ import __(“1abc”) 当模块名包含空格或者以数字开头时,需要使用 __ import __导入才可以,并且将模块名用双引号括起来。 (这是由于Python语法中命名规则的限制,但是模块的命名规则没有这种限制造成的)
- 模块分类
- 内置模块: Python自带的模块
- 自定义模块:自己开发的模块(自己写的可以被导入的Python文件)#之后的文章也会谈到如何将自己的代码封装成package
- 第三方模块:Python非自带模块,需要根据自己的需要单独进行下载暗转配置,例如使用pip 安装第三方模块pandas 可以 使用如下命令: pip install pandas (也可以指定版本pip install pandas==版本号,不指定时一般会下载和你的Python版本相匹配的版本),ps: 如果安装了anaconda集成环境,也可以使用conda 命令进行安装
- 模块的搜索路径
当导入一个模块或者函数时,解释器会首先在内置模块中进行查找,如果没有查找到,则会在sys.path记录的所有目录中(包括1.当前程序所在目录2.标准库的安装目录3.操作系统环境变量PythonPATH所包含的目录。)查找。#此处参考书籍《Python带我起飞》》
Package
-
将多个Python文件放在一个文件夹下,该文件夹就是一个Package,但请注意**该文件夹下必须包含一个文件名为__init__.py的文件,即使该文件中没有任何内容,也必须包含该文件,其作用就是告诉Python环境该文件夹是一个Package。所以如果在导入自己的Python文件时,如果出错,可能就是被导入的文件所在的文件夹下没有__init__.py文件。
-
这里要提一个我自己遇到i的问题(attempted relative import beyond top-level package)(这里主要讨论相对路径)
简单的描述一下问题:就是我在一个文件中导入自己其他目录下的文件时,会报错,原因并不是因为被导入的文件所在的目录下没有包含__init__.py文件。通过下面的例子说明
Package_main/ #顶级包
__init__.py #需要包含__init__.py文件
Package_child1/
__init__.py
first.py #子包中的两个Python文件
second.py
Package_child2/
__init__.py
third.py #子包中的两个Python文件
forth.py
现在我在third.py中 写 import …Package_child1.first(注意:是first,不是 first.py),但是导入失败,在网上查了一些资料,大概就是原因,我的third.py文件是要直接运行的,就是不是完全封装起来的,不是那种只在里面定义了一系列函数的文件,对就是这种文件,
举个例子:
a.py: #这个文件是不会直接运行的
def a():
def b():
b.py:
print("疲惫") # 这个文件可以直接运行
当一个文件可以直接运行,并且直接运行时,这个文件就会被指定为main,即程序的入口,则如果你导入的文件所在的文件夹和main文件至少是在同一层级上,或者,main文件在导入的文件所在目录的更外层,否则会导入失败。借助上面的例子用几个图来说明
可以看出third.py 和 first.py 两个文件不在同一个路径上,即两者的最近的共同父目录是Package_main,所以当third为main文件时,导入 first.py 的路径为…Package_child1.first (Package_main/Package_child1/first)导入路径中包含两者最近的公共目录,此时,Package_main将不会被作为一个Package看待,所以导入失败。
修改为下面这中情况
此时导入路径为 Package_child1.first (Package_child1/first)此时导入路径中没有两者最近共同的目录,所以此时会将Package_child1看作一个Package看待,所以可以正常导入。
当然下面这种情况也可以正常导入
导入路径为 Package_main.Package_child1.first,导入路径不包含main文件和first.py文件的最近公共目录,此时Package_main会被作为Package来看待。
概括来说,操作文件作为main文件时,操作文件和被导入文件的最近公共目录不能作导入路径内容
绝对路径在上面的各种情况下都会正常导入