2020_03_17

python模块学习__day01

  1. 模块的定义

    在 python 中一个.py 文件就是一个模块

  2. 模块的组成

    python 的模块由变量、函数定义、类定义、可执行语句……

  3. 自定义模块

    • 模块不宜过大。如果一个模块过大就要进行拆分。
    • 模块中的可以包含变量、函数定义、类定义……
    • 模块在使用前需要使用 import package_name 导入
    • 在一个文件夹下新建模块时,要先新建一个__init.py__文件(为什么???)
  4. 模块的导入

在这里插入图片描述

 # module01.py 和 test_import.py位于同一文件夹下
        import test_import
        # test_import.py当中定义了show_me() 
        # 通过test_import.show_me()调用show_me()方法
        test_import.show_me()

在使用 import package_name 将模块导入时,模块中的所有可执行语句(python解释器可以直接执行,如函数调用)都会立马执行

为了在导入模块时,不运行源文件中的测试代码,可以通过文件的__name__属性来进行判断。当以脚本形式(python filename.py)执行源文件时,__name__ == '__main__';在作为模块(import package_name)导入时,__name__ == 'package_name'

       # function definition or class definition
        if __name__=='__main__':
            #testing code
  • 在不同文件夹下

在这里插入图片描述

        # module01.py 和 test_import01.py位于不同的文件路径下
        # method 1
        import modules.test_import01.py
        
        # method 2
        # 将test_import01.py的路径添加到sys.path中、
        import sys, os
        
        # 获得当前工作目录
        cwd=os.getcwd()
        path=cwd+os.sep+'modules'+os.sep+'test_import01.py'
        sys.path.append(path)
  • python 解释器在导入模块时的搜索路径:

    1. 已经导入到内存中的模块。使用 import package_name 导入的,记录在 sys.modules

    2. 当前目录。

    3. 内置模块。Libsite_packages 目录下的模块

    4. PYTHONPATH.

    5. sys.path. 实现搜索路径的动态添加。

            # 实现了将一个目录下的所有非空目录及其子非空目录的路径添加到sys.path中的操作
            
            '''
            将path目录下的dir全部筛选出来
            '''
            def dir_filter(path):
            	dir_list=[]
            	for file in os.listdir(path):
            		'''
            		将file转换为绝对路径
            		'''
            		file=path+os.sep+file
            
            		'''
            		判断file是否为目录
            		'''
            		'''
            		另一种解决方案
            		判断file是否为文件
            		若是:弹出
            		否则:留下
            		'''
            		if os.path.isdir(file):
            			dir_list.append(file)
            	yield from dir_list
            
            
            # print(os.listdir('test_empty'))
            '''
            将一个目录下的目录,递归的添加到sys.path中
            root_path为绝对路径
            '''
            def add_to_sys_path(root_path):
            	'''
            	is_empty 
            	'''
            	flag=0
            	if not is_empty(root_path):
            		# 将root_path下的所有目录添加到sys.path中
            		# 如果当前目录下只有文件
            		sys.path.append(root_path)
            		flag=1
            		if not only_file(root_path):
            			for file in dir_filter(root_path):
            				add_to_sys_path(file)
            	return flag
            
            
            	'''
            	测试path目录是否为空
            	空:True
            	否则:False
            	'''
            def is_empty(path):
            	return not bool(os.listdir(path))
            
            '''
            测试当前目录是否只有文件
            '''
            def only_file(path):
            	return not bool(dir_filter(path))            
  • __file__可以显示当前文件的绝对路径
       # 在module模块中运行
       print(__file__)
       # 结果:E:\python_work\modules\module01.py
       # 其作用等价于os.path.abspath(file)
       print(os.path.abspath('module01.py'))
       print(os.path.abspath('module01.py'))
       # 不过需要注意的是,使用os.path.abspath(file)的结果是os.getcwd()+file, 可能并不是文件的真实绝对路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值