使用import和exec运行模块文件的异同

使用import和exec运行模块文件的异同

实例代码

#script1.py
import sys

print(sys.platform)
x = ‘span‘
print(x*8)

在cmd中

>>> import script1
win32
spanspanspanspanspanspanspanspan
>>> exec(open(‘script1.py‘).read())
win32
spanspanspanspanspanspanspanspan

看上去毫无差别,但是

>>> x =  999
>>> import script1
>>> x
999
>>> exec(open(‘script1.py‘).read())
win32
spanspanspanspanspanspanspanspan
>>> x
‘span‘

说明:

exec有着和import类似的效果,但是它从技术上不会导入模块,每次以这种方式调用exec的时候,都会重新运行文件,像在调用它的地方粘贴了代码一样,对于当前正在使用的变量有潜在的默认覆盖的可能,但是import不会如此,每个进程只会运行文件一次,并且把文件生成到一个单独的模板名称空间去,它的赋值不会改变原有作用域中的变量,但是付出的代价是,当import的模块在调用完import后被修改了,需要调用reload方法重载。

时间: 2024-10-15 21:50:06

使用import和exec运行模块文件的异同的相关文章

如何让 node 运行 es6 模块文件,及其原理

如何让 node 运行 es6 模块文件,及其原理 最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机制.而现在我们很多项目都是用 es6 的模块化规范来写代码的,包括 node 项目,所以,node 不能运行 es6 模块文件就会很不便. 让 node 运行 es6 模块文件的方式有两种: 转码 es6 模块为 commonjs 模块 hook node 的 require 机制,直接让 node

使用Runtime.exec()运行windwos dos或linux shell命令

使用Runtime.exec()运行windwos dos或linux shell命令,按实际情况具体测试 实例代码: package com.bookoo.test.command; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter

LINUX设备驱动程序笔记(二)构造和运行模块

         <一>:设置测试系统 首先准备好一个内核源码树,构造一个新内核,然后安装到自己的系统中.           <二>:HelloWorld模块 #include <linux/init.h> //定义了驱动的初始化和退出相关的函数 #include <linux/module.h> //定义了内核模块相关的函数.变量及宏 MODULE_LICENSE("Dual BSD/GPL"); //该宏告诉内核,该模块采用自由许可

无法打开模块文件“C:\Users\fkg\AppData\Local\Temp\.NETFramework,Version=v4.5.AssemblyAttributes.vb”系统找不到指定文件

错误原因:错误5 无法打开模块文件"C:\Users\fkg\AppData\Local\Temp\.NETFramework,Version=v4.5.AssemblyAttributes.vb": 系统找不到指定的文件. 背景:最近在重构的时候遇到了一个问题,提示:对象定义被隐藏.心里一颤,不会是我误删了系统里的东西了吧.还是先从网上查一下吧.后来才知道是Win7系统会涉及到好多权限的问题,需要以管理员身份运行VS2012,然后重启VS就好啦. 找到VS2012,右击选择属性进行如

c# winform 获取当前程序运行根目录,winform 打开程序运行的文件夹

// 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录. System.Environment.CurrentDirectory // 获取应用程序的当前工作目录. System.IO.Directory.GetC

全局变量与类似配置文件的模块文件

# -*- coding: cp936 -*- #python 27 #xiaodeng #全局变量 #重点问题: 1)函数调用的先后顺序导致结果不同 2)使用类似于配置文件的模块文件控制全局变量和控制变量的修改等操作 在文件之间进行通信的最好办法是通过调用函数,传递参数,然后得到返回值 虽然一定程度上,会增加代码量,但是可读性和维护性上会变得非常友好 当人们在阅读第一个文件时,就会看到这个函数,就知道这是一个接口(接入点),并知道将改变变量x的值 当然,我们依然还是要最小化的修改文件之间的变量

无法更新运行时文件夹共享状态:在客户机操作系统内装载共享文件夹文件系统时出错--解决办法

1.问题描述: 在物理主机和虚拟机CentOS6.4共享文件的时候出现:无法更新运行时文件夹共享状态:在客户机操作系统内装载共享文件夹文件系统时出错 其他症状: vmware-hgfsclient  能够看到共享的文件夹名字 mount.vmhgfs  .host:/ /mnt  报错: Error: cannot mount filesystem: No such device 2.解决思路 /etc/vmware-tools/services.sh restart 如果出现FAILD yum

运行ELF文件的应用程序

8.2.3  运行ELF格式的应用程序 首先我们需要提供一些与ELF格式有关的宏定义. 代码8-7 #define ELFCLASSNONE    0 #define ELFCLASS32      1 #define ELFCLASS64      2 #define CHECK_ELF_CLASS(p)              ((p)->e_ident[4]) #define CHECK_ELF_CLASS_ELFCLASS32(p)\ (CHECK_ELF_CLASS(p)==ELFC

python 模块 模块文件

Python 程序架构: 一个程序是一个模块的系统,它有一个顶层脚本文件(启动后可以运行程序)以及多个模块文件,脚本和模块都是包含了Python语句的文本文件,并且Python的标准库提供了一系列的预先编写好的模块 Python 模块概述 一个python包括了多个含有Python语句的文本文件,程序是作为一个主体的的,顶层的文件来构造的,配合有另个或者多个支持的文件,在Python中这些文件称为模块 顶层文件(程序)包含了程序的主要控制流程(运行来启动应用的文件) 模块就是工具的库,这些工具用