【九月打卡】第17天Python第七章包、模块、函数与变量作用域

2022/9/22 3:17:15

本文主要是介绍【九月打卡】第17天Python第七章包、模块、函数与变量作用域,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

课程名称:全面系统Python3.8入门+进阶(程序员必备第二语言)

课程章节:7-7 import导入模块

主讲老师:7七月

课程内容:

今天学习的内容包括:

import导入模块

课程收获:

对于重复的变量或者其他内容,我们是需要从其他模块里去引用的。

把一些共用的东西或者重复的东西,提取出来放在一个模块下面,然后再其他模块里去引用。而不需要重复。

未引用就会报错

https://img2.sycdn.imooc.com/632a587e0001e71815891164.jpg

以上在第一个口快里定义了一个变量,第二个模块直接使用,来print是会报错的。我们一定要把a这个变量从第一个模块导入到第二个模块。

导入语法:

import moudle_name

import后只能跟模块名。


https://img1.sycdn.imooc.com/632a58860001476a11420415.jpg

因为C7只是模块名,我们如果要使用c7下面的变量a,我们须通过模名.某一个变量的方式来使用这个a,否则的话变量a是找不到的。

所以说引入模块下的某一个变量或者函数等,路径的命名是一样的。

print(c7.a)

import c7

https://img3.sycdn.imooc.com/632a58970001d55e16120741.jpg

以上执行结果报错。


https://img2.sycdn.imooc.com/632a589f0001abf915890682.jpg

调换import位置后,执行代码运行成功,成功返回变量a 的值。

刚刚我们顺序的颠倒,python他是一个解释型的语言,所以当python去运行代码的时候,他必须要遵守一个先后的顺序,如果在引用c7之前就先去使用c7这个模块的话,我们python的解释器是会报错的。因为当解析到第一行的时候,python解释器还不知道c7是什么。所以说他会报错。这个特征并不是python是这样,很多解释型语言都是这样的规则,但是对于一些编译型语言来说,他可以然给你先使用后定义。但总体上来说还是建议遵循先定义后使用的规则来编写代码。这样是符合我们的思维逻辑的。

除此之外,我们代码已经正确运行了,但我们pylint还是提示import有错误,没法导入。这个并不是python语法的问题,是vscode对他一个解析的问题。如果你使用pycharm他就不会提示错误。

https://img1.sycdn.imooc.com/632a58ab0001de2312990572.jpg

刚才我们看到的位于统一级别的模块进行引用,有一种特殊情况。下图-将c7.py放在另一个文件夹下。这个时候我们在运行c8.py,可以看到是会报错的。


https://img4.sycdn.imooc.com/632a58b20001e45d10430940.jpg

解决方式,还是命名空间的问题。把import引用的路径按照新的路径去修改。

import t.c7  # 引用路径修改成最新路径
print(t.c7.a) #

https://img1.sycdn.imooc.com/632a58c00001f04d17980706.jpg

可以看到,当我们运行代码后文件夹内自行生成了一个文件夹__pycache__,同时文件夹内还生成了一个.pyc的文件,这是python解释器所定义的一个自解码文件。


总结

import导入的只能是一个模块,我们是不能够在import下面直接导入模块下的变量,这样是不行的。由于import只能导入模块,当我们要引用模块的变量名的时候呢,就需要用‘模块名.变量名’的方式来引用。这也是很多人认为import的一个缺陷。他会让你的代码长度有所增加,假如说你的包的嵌套是比较复杂的,比如有5,6层的话。他引用起来确实会比较麻烦。


简化路径方法:as

import t.c7 as m
print(m.a)

https://img4.sycdn.imooc.com/632a58d60001d8ac12260621.jpg

好处:你一眼就能看到a变量到底属于哪个包,哪个模块。




这篇关于【九月打卡】第17天Python第七章包、模块、函数与变量作用域的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程