当前位置: 首页 > news >正文

Python系列教程242——from与reload合不来

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写(有时候有空也会参与编写),所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

为了丰富学员们的课外知识,老师让我们助理分享这套Python系列教程。由于Python教程并非老师所写,所以不如老师的AI教学风趣幽默,望大家见谅!(有时老师也会参与编写)。想要学习AI技术的新朋友可以去www.captainbed.cn。本公众号由助理负责运营,只免费分享课外知识,不回复任何私信。PS:看不懂本篇文章的同学请从前面的文章看起,循序渐进每天学一点就不会觉得难了!

在前面的文章中,我就表明了态度,推荐大家直接使用import,尽量少用from。因为from语句是Python中各种潜在陷阱的源头。

from语句其实是在导入者的作用域内对变量名的赋值语句,也就是变量名拷贝运算,而不是变量名的别名机制。这句话很难理解哦!下面我举个栗子大家就明白了。

假设我们定义了下列模块(nested1.py)。

# nested1.pyX = 99def printer(): print(X)

如果我们在另一个模块内(nested2.py)使用from导入变量,就会得到变量的拷贝,而不是对变量的连接。在导入者内修改变量,只会重设该变量在本地作用域的绑定值,而不是nested1.py中的变量:

# nested2.pyfrom nested1 import X,printer           # Copy names outX = 88                                   # Changes my "X" only!printer()                                # nested1's X is still 99% python nested2.py99

再举一个更加通俗易懂的例子。就像你在一个全国联网的相亲系统中只是单纯修改了本地的信息一样,全国联网的数据库中的信息依然是旧的。

from 相亲资料库 import 年龄, 查看资料
年龄 = 18 # 偷偷把自己年龄改小
查看资料() # 结果还是显示真实年龄99岁!

然而,如果我们使用import导入了整个模块,然后赋值某个点号运算的变量,这样就会修改nested1.py中的变量。点号运算把Python定向到了模块对象内的变量,而不是导入者的变量(nested3.py)。

# nested3.pyimport nested1           # Get module as a wholenested1.X = 88           # OK: change nested1's Xnested1.printer()% python nested3.py88

由于上面所说的特性,会引发一个与reload相关的陷阱:正如前边讨论过的那样,from在执行时会复制变量,不会直接连接到变量。reload重载被导入者时,对于使用from导入模块变量的导入者没有影响。也就是说,导入者的变量依然引用了通过from取出的旧变量,看下面的代码可以帮助你理解:

from module import X # X may not reflect any module reloads!...from imp import reloadreload(module) # Changes module,but not my namesX # 这个变量依然是之前的旧版本,而不是reload后的新版本用from导入的旧情人,就像分手后还永远活在回忆里不肯更新:from 前任 import 温柔体贴
reload(前任)  # 对方已经变成霸道总裁
print(温柔体贴)  # 输出结果还是记忆中的样子

为了保证reload重载更有效,建议使用import以及点号运算,来取代from。因为点号运算总是会回到模块,这样就会找到模块重载后变量的新的绑定值。

import module                # Get module,not names...from imp import reloadreload(module)               # Changes module in-placemodule.X                     # Get current X: reflects module reloads

湿人云: 好的代码关系,就像穿着衣服的import,看似保持距离,实则深入“连接”,就像X站的clothed标签。

相关文章:

  • 算法笔记·数学·欧拉函数
  • 心有灵犀数
  • nginx的一些配置的意思
  • python训练营day34
  • 苍穹外卖 08导入地址簿模块功能代码用户下单订单支付
  • windows11 安装 jupyter lab
  • P2089 烤鸡
  • 2025年全国青少年信息素养大赛复赛C++集训(15):因子问题(题目及解析)
  • 分布式消息中间件基础
  • [原创](计算机数学)(Introduction Linear Algebra)(P25): 为什么Cyclic Differences无法构成三维空间?
  • 数据库范式
  • 怎样改变中断优先级?
  • java面试题
  • Vue2 / Vue3 使用自定义配置,实现打印+生成PDF的带水印文件
  • uni-app学习笔记十--vu3 computed的运用(一)
  • 计算机组成原理——主存与CPU的连接
  • 【MPC控制 - 从ACC到自动驾驶】1 ACC系统原理与MPC初步认知
  • uni-app(5):Vue3语法基础上
  • 第2章 数据库设计
  • Serv00 免费邮局 搭建属于自己的域名邮箱 支持 SMTP / Catch-all
  • 自己可以做防伪网站吗/码迷seo
  • 可以把网站建设在云主机上吗/爱站网挖掘词
  • 网站建设的计划书/百度站长工具网站
  • 江苏企业网站制作哪家好/推广赚钱的项目
  • 网站建设定制公司/宣传推广方案
  • 今日头条网站模板/引流推广营销