一、背景
之前写了软件开发目录规范这篇博客,相信很多人都已经知道,我们在写程序时需要遵循一定的规范,不然,就算很简答的逻辑程序的代码,读起来会很费劲,占用了我们大量的时间,但是,我们一旦用了这样的规范目录,我们怎么去愉快的进行模块之前的相互导入呢?这就不得不说我们今天讨论的两个概念:绝对路径和相对路径。
二、函数功能解释
1、__file__
功能:返回自身文件的相对路径
#atm.py中的代码 print(__file__) #pycharm的执行结果 D:\Python\Python35\python.exe D:/PycharmProjects/51homework/Atm/bin/atm.py D:/PycharmProjects/51homework/Atm/bin/atm.py #打印出绝对路径 #从cmd执行atm.py D:\PycharmProjects\51homework>python Atm/bin/atm.py Atm/bin/atm.py #打印的是相对路径
从上面看,为什么pycharm中执行的结果是绝对路径,而从cmd调用python命令时显示的却是相对路径"htmlcode">
#atm.py的文件代码 import os print(os.path.abspath(__file__)) #在cmd中的执行结果 D:\PycharmProjects\51homework>python Atm/bin/atm.py D:\PycharmProjects\51homework\Atm\bin\atm.py #获取atm.py的绝对路径
3、os.path.dirname()
功能:返回目录名,不需要文件名
print(os.path.dirname( os.path.abspath(__file__) )) D:\PycharmProjects\51homework\Atm\bin #只返回目录名,不需要文件名
4、sys.path
功能:python环境的执行的环境变量
import sys print(sys.path) #cmd执行的结果 ['D:\\PycharmProjects\\51homework\\Atm\\bin', 'D:\\Python\\Python35\\python35.zip', 'D:\\Python\\Python35\\DLLs', 'D:\\Python\\Python35\\lib', 'D:\\Python\\Python35', 'D:\\Python\\Python35\\lib\\site-packages']
注:执行路径是列表的形式打印出来的,所以sys.path数据类型是一个列表。
三、绝对路径和相对路径
1、绝对路径
绝对路径:从根目录为起点到你所在的目录。
> import os > os.chdir("D:\\PycharmProjects\\51homework\\Atm\\bin\\") > os.listdir() ['atm.py', '__init__.py'] > os.path.abspath('atm.py') 'D:\\PycharmProjects\\51homework\\Atm\\bin\\atm.py' #是从D盘的这个根目录下来的
2、相对路径
相对路径:从一个目录为起点到你所在的目录。
> import os > os.chdir("D:\\PycharmProjects\\51homework\\Atm\\bin\\") > os.listdir() ['atm.py', '__init__.py'] > os.path.dirname('atm.py') '' #显示相对路径
四、不同目录间进行模块调用
1、添加环境变量
一般情况下,绝对路径函数和相对路径函数是结合起来用的,特别是在不同目录之间相互调用彼此的模块。
比如按以上层级:atm.py如果想调用其他模块中的代码,必须要跟atm.py是同级的,不信请看如下代码:
#atm.py中的代码 import sys print(sys.path) #cmd执行的结果 D:\PycharmProjects\51homework>python Atm/bin/atm.py ['D:\\PycharmProjects\\51homework\\Atm\\bin', 'D:\\Python\\Python35\\python35.zip', 'D:\\Python\\Python35\\DLLs', 'D:\\Python\\Python35\\lib', 'D:\\Python\\Python35', 'D:\\Python\\Python35\\lib\\site-packages']
只到'D:\\PycharmProjects\\51homework\\Atm\\bin'这一层,其他的层级无法调用。那怎么办呐?
步骤如下:
1.获取Atm的绝对路径
2.添加到环境变量中
代码如下:
#atm.py中的代码 import os,sys BASE_DIR = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) #Atm的绝对路径 print(BASE_DIR) sys.path.append(BASE_DIR) #添加到环境变量中 #cmd执行结果 D:\PycharmProjects\51homework>python Atm/bin/atm.py #执行atm.py文件 D:\PycharmProjects\51homework\Atm #打印Atm的绝对路径 ['D:\\PycharmProjects\\51homework\\Atm\\bin', 'D:\\Python\\Python35\\python35.zip', 'D:\\Python\\Python35\\DLLs', 'D:\\Python\\Python35\\lib', 'D:\\Python\\Python35', 'D:\\Python\\Python35\\lib\\site-packages', 'D:\\PycharmProjects\\51homework\\Atm'] #Atm的绝对路径已经添加到环境变量中
2、调用其他模块
接下来就可以顺利的进行不同目录下,模块之间的调用了
#atm.py中的代码 import os,sys BASE_DIR = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) sys.path.append(BASE_DIR) from core import main #调用core中的main模块 main.sayhi() #调用main模块中sayhi函数 #main.py中代码 def sayhi(): print("hello word") #cmd执行的结果 D:\PycharmProjects\51homework>python Atm/bin/atm.py hello word
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]