美文网首页
【第37天】python全栈从入门到放弃

【第37天】python全栈从入门到放弃

作者: 36140820cbfd | 来源:发表于2019-08-29 17:29 被阅读0次

1 模块的知识回顾

1.模块不会被重复导入

2,import导入一个模块(from import 的时候发生了什么)相当于执行这个模块

3.模块有自己独立的命名空间

4.模块的重命名as

5.模块没导入之前在硬盘上,不在内存上

2 导入模块的方法

import 包.包.模块
from 包.包.包 import 模块
包.包.模块.变量
模块.变量

3 pyc编译文件和重新加载模块

当一个文件作为一个脚本被导入的时候,就会在这个文件所在的目录的pycache下生成一个编译好的文件, 为了之后导入这个文件的时候直接读这个编译好的pyc文件就可以,可以节省一些导入时候的时间,节省时间,提高效率

4 运行py文件的两种方式(模块/脚本)

以模块的形式运行

代码块
import  my_modules

if __name__ == '__main__':

    my_modules.login('wangsiyu')

print(__name__)

以脚本形式运行,在pycharm中运行

代码块
那么需要在本文件中直接打印的代码上加上

 if __name__ == '__main__':

在编写py文件的时候

所有不在函数和类中封装的内容都应该写在

if __name__ == '__main__':后面

5 反射自己模块的变量

代码块
import sys

name='wangsiyu'

def login(name):
    print('hello',name)


#利用反射拿到相关的变量
res=getattr(sys.modules['__name__'],'login')
res('nex'  )   #相当于利用反射调用login()函数   hello nex

# import sys
# 
# getattr(sys.modules[__name__],变量名)

6 怎样知道自定义模块是否可以被导入

看sys.path当中 是否存在你要导入的文件 所在的目录,如果没有目录,可以把要执行文件目录添加到sys,path的列表中

7 模块的导入层级

模块的搜索路径全部存储在sys.path列表中

如果要导入的模块和当前执行的文件同级

直接导入即可

如果要导入的模块和当前执行的文件不同级

需要把要导入模块的绝对路径添加到sys.path列表中

8 模块的重加载

代码块
import my_modules
import importlib
import time
#在 import之后,再修改模块里面,程序感知不到。

try:
    print(my_modules.name)  # 这个时候会报错,因为模块my_modules没有name
        # 如果这时候去my_modules去添加一个name呢?
except AttributeError:
    print("module 'my_modules' has no attribute 'name'")

time.sleep(10)  #暂停10秒
#
importlib.reload(my_modules)   #重加在这个模块,这个时候可以看到修改的模块了。
print(my_modules.name)   #因为重新加载了,所以此时有了。

9 总结

9-1

from 模块import 名字

导入这个模块中的某个名字之后,这个名字就可以直接使用了

名字是变量 直接用

名字是函数 函数名()就是调用

名字是类名 类名()就是实例化

代码块
from my_modules import name ,Student,login #导入变量,类,和函数

print(name)   #调用变量

#调用类
s=Student()
s.run()

#调用函数
login()

9-2

把模块当作脚本用。

把模块当成脚本运行:

你希望 某一段代码 在被当做模块导入的时候 不要执行

就把它写在if name =='main':下面

代码块
def login():
    print('success')

name=123

# 你希望 某一段代码 在被当做模块导入的时候 不要执行
# 
# 就把它写在if __name__ =='__main__':下面

#如果调用my_modules这个模块,那么Student这个类不能被调用
if __name__ == '__main__':

    class Student:
        def __init__(self):
            pass

        def run(self):
            print('我可以奔跑')

9-3

sys.path 一个自定义模块能否被导入,就看sys.path列表中有没有这个模块所在的绝对路径

9-4

如果是直接导入一个包,那么相当于执行了这个包中的init文件

并不会帮你把这个包下面的其他包以及py文件自动的导入到内存

如果你希望直接导入包之后,所有的这个包下面的其他包以及py文件都能直接通过包来引用

那么你要自己处理init文件,在文件中提前写好导入。

别跑,点个赞再走

相关文章

网友评论

      本文标题:【第37天】python全栈从入门到放弃

      本文链接:https://www.haomeiwen.com/subject/wqniectx.html