Python笔记--2 模块和导入路径问题

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文件时,操作文件和被导入文件的最近公共目录不能作导入路径内容
绝对路径在上面的各种情况下都会正常导入

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值