第三十九节,python内置全局变量
vars()查看内置全局变量
以字典方式返回内置全局变量
#!/usr/bin/env python # -*- coding:utf8 -*- print(vars()) #输出 # {'__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__package__': None, '__doc__': None, '__name__': '__main__', '__cached__': None, '__file__': 'H:/py/index.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000000AC32C66A58>}
__doc__ :获取文件的注释
#!/usr/bin/env python # -*- coding:utf8 -*- """ 这里是文件的注释 """ print(__doc__) #__doc__ :获取文件的注释 #输出 # 这里是文件的注释
__file__ 【重点】获取当前文件的路径
#!/usr/bin/env python # -*- coding:utf8 -*- print(__file__) #__file__ :获取当前文件的路径 #输出 # H:/py/index.py
会经常用到__file__ ,一般配合os模块的os.path.dirname(),os.path.basename() ,os.path.join() 模块函数来使用
#!/usr/bin/env python # -*- coding:utf8 -*- import os a = __file__ # __file__全局变量获取当前文件路径 print(a) b = os.path.dirname(a) #获取文件当前目录:注意:os.path.dirname()叠加一次向上找一次 如下 print(b) b2 = os.path.dirname(b) #获取文件当前目录的上级目录,注意:os.path.dirname()叠加一次向上找一次 print(b2) c = os.path.basename(a) #获取文件名称 print(c) #输出 # H:/py/lib/ska/mk.py # H:/py/lib/ska # H:/py/lib # mk.py
用__file__获取模块路径,添加到解释器模块路径里
#!/usr/bin/env python # -*- coding:utf8 -*- import sys import os a = __file__ # __file__全局变量获取当前文件路径 print(a) b = os.path.dirname(a) #获取文件当前目录 print(b) c = "lib" #自定义文件目录名称 d = os.path.join(b,c) #将获取文件当前目录,与自定义文件目录名称,拼接成完整的路径 print(d) print("\n") sys.path.append(d) #将拼接好的路径,添加到解释器模块路径中 for i in sys.path: # print(i) #输出 # H:/py/index.py # H:/py # H:/py\lib # # # H:\py # C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages\pip-8.1.2-py3.5.egg # H:\py # C:\Users\admin\AppData\Local\Programs\Python\Python35\python35.zip # C:\Users\admin\AppData\Local\Programs\Python\Python35\DLLs # C:\Users\admin\AppData\Local\Programs\Python\Python35\lib # C:\Users\admin\AppData\Local\Programs\Python\Python35 # C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages # H:/py\lib
__package__ :获取导入文件的路径,多层目录以点分割,注意:对当前文件返回None
#!/usr/bin/env python # -*- coding:utf8 -*- print(__package__) #注意:对当前文件返回None from lib.ska import mk #导入mk模块文件 print(mk.__package__) #__package__ :获取导入文件的路径,多层目录以点分割,注意:对当前文件返回None #输出 # None # lib.ska # lib.ska
__cached__ :获取导入文件的缓存路径
#!/usr/bin/env python # -*- coding:utf8 -*- from lib.ska import mk #导入mk模块文件 print(mk.__cached__) #__cached__ :获取导入文件的缓存路径 #输出 # H:\py\lib\ska\__pycache__\mk.cpython-35.pyc
__name__ 【重点】获取导入文件的路径加文件名称,路径以点分割,注意:获取当前文件返回__main__
#!/usr/bin/env python # -*- coding:utf8 -*- print(__name__) #注意:获取当前文件返回__main__ from lib.ska import mk #导入mk模块文件 print(mk.__name__) #获取导入文件的路径加文件名称,路径以点分割 #输出 # __main__ # lib.ska.mk
__name__ 全局变量写在入口文件里,只有执行入口文件时的返回值才是__main__ ,如果入口文件被导入到别的文件里,此时入口文件的__name__返回值就不在是__main__,而是如果文件的路径加入口文件名称,所以我们可以用__name__全局变量来防止别人盗链入口文件
#!/usr/bin/env python # -*- coding:utf8 -*- if __name__ == "__main__": #__name__ 全局变量写在入口文件里,只有执行入口文件时的返回值才是__main__ ,如果入口文件被导入到别的文件里,此时入口文件的__name__返回值就不在是__main__,而是如果文件的路径加入口文件名称,所以我们可以用__name__全局变量来防止别人盗链入口文件 print("执行") #这样只有执行index文件时才执行判断里的,index被导入到到别的文件,就不会执行判断里的
__builtins__ 【重点】内置函数在这里面