python-迭代各种导入
如果我做了类似的事情python-迭代各种导入,python,variables,import,iteration,Python,Variables,Import,Iteration,如果我做了类似的事情 import my_import from my_import import * my_import.k = 6 for each x in [list of imports] x.k = 6 我可以通过如下操作更改导入中的变量 import my_import from my_import import * my_import.k = 6 for each x in [list of imports] x.k = 6 如果我想更改我使用的每个导
import my_import
from my_import import *
my_import.k = 6
for each x in [list of imports]
x.k = 6
我可以通过如下操作更改导入中的变量
import my_import
from my_import import *
my_import.k = 6
for each x in [list of imports]
x.k = 6
如果我想更改我使用的每个导入的k值,是否有一种方法可以迭代所有导入并在每个导入中设置k值
基本上,我在寻找类似的东西
import my_import
from my_import import *
my_import.k = 6
for each x in [list of imports]
x.k = 6
这是有原因的,但这是一个危险的游戏
import my_import1
import my_import2
import my_import3
import sys
# Check if you don't believe me
print(my_import1.x)
print(my_import2.x)
print(my_import3.x)
# Grab the interesection of all loaded modules and globals in this scope
allmodules = [sys.modules[name] for name in set(sys.modules)&set(globals())]
for module in allmodules:
module.x = 10000
# Check if you don't believe me
print(my_import1.x)
print(my_import2.x)
print(my_import3.x)
输出:
1
2
3
10000
10000
10000
需要注意的是,它还将抓取“sys”并对其进行修改。也许可以在模块密钥名称中添加“内置”检查 有一些理由想要这样,但这是一场危险的游戏
import my_import1
import my_import2
import my_import3
import sys
# Check if you don't believe me
print(my_import1.x)
print(my_import2.x)
print(my_import3.x)
# Grab the interesection of all loaded modules and globals in this scope
allmodules = [sys.modules[name] for name in set(sys.modules)&set(globals())]
for module in allmodules:
module.x = 10000
# Check if you don't believe me
print(my_import1.x)
print(my_import2.x)
print(my_import3.x)
输出:
1
2
3
10000
10000
10000
需要注意的是,它还将抓取“sys”并对其进行修改。也许可以在模块密钥名称中添加“内置”检查 有一些理由想要这样,但这是一场危险的游戏
import my_import1
import my_import2
import my_import3
import sys
# Check if you don't believe me
print(my_import1.x)
print(my_import2.x)
print(my_import3.x)
# Grab the interesection of all loaded modules and globals in this scope
allmodules = [sys.modules[name] for name in set(sys.modules)&set(globals())]
for module in allmodules:
module.x = 10000
# Check if you don't believe me
print(my_import1.x)
print(my_import2.x)
print(my_import3.x)
输出:
1
2
3
10000
10000
10000
需要注意的是,它还将抓取“sys”并对其进行修改。也许可以在模块密钥名称中添加“内置”检查 有一些理由想要这样,但这是一场危险的游戏
import my_import1
import my_import2
import my_import3
import sys
# Check if you don't believe me
print(my_import1.x)
print(my_import2.x)
print(my_import3.x)
# Grab the interesection of all loaded modules and globals in this scope
allmodules = [sys.modules[name] for name in set(sys.modules)&set(globals())]
for module in allmodules:
module.x = 10000
# Check if you don't believe me
print(my_import1.x)
print(my_import2.x)
print(my_import3.x)
输出:
1
2
3
10000
10000
10000
需要注意的是,它还将抓取“sys”并对其进行修改。也许可以在模块密钥名称中添加“内置”检查 如果您只想更改导入的模块对象的属性值,可以使用函数
\uuuuu import\uuuu()
和map()
尝试此代码:
您可以通过逐个导入这些模块来检查结果,并输出k:
In [3]: import my_import1, my_import2, my_import3
In [4]: print my_import1.k
1000
In [5]: print my_import2.k
1000
In [6]: print my_import3.k
1000
实际上,您可以将map()函数更改为列表理解或生成器,,代码将非常类似于您要求的代码样式:
#List Comprehension
In [7]: for module in [__import__(m) for m in moduleNames]:
...: module.k = 2000
...:
In [8]: print my_import1.k
2000
In [9]: print my_import2.k
2000
In [10]: print my_import3.k
2000
In [11]:
#Generator
In [11]: for module in (__import__(m) for m in moduleNames):
....: module.k = 3000
....:
In [12]: print my_import1.k
3000
In [13]: print my_import2.k
3000
In [14]: print my_import3.k
3000
In [15]:
顺便说一句,列表理解和生成器非常相似<当您需要处理大量模块且无需一次导入所有模块时,更推荐使用strong>生成器。它更高效且节省内存。如果您只想更改导入的模块对象的属性值,可以使用函数
\uuuu import\uuuu()
和map()
:
您可以通过逐个导入这些模块来检查结果,并输出k:
In [3]: import my_import1, my_import2, my_import3
In [4]: print my_import1.k
1000
In [5]: print my_import2.k
1000
In [6]: print my_import3.k
1000
实际上,您可以将map()函数更改为列表理解或生成器,,代码将非常类似于您要求的代码样式:
#List Comprehension
In [7]: for module in [__import__(m) for m in moduleNames]:
...: module.k = 2000
...:
In [8]: print my_import1.k
2000
In [9]: print my_import2.k
2000
In [10]: print my_import3.k
2000
In [11]:
#Generator
In [11]: for module in (__import__(m) for m in moduleNames):
....: module.k = 3000
....:
In [12]: print my_import1.k
3000
In [13]: print my_import2.k
3000
In [14]: print my_import3.k
3000
In [15]:
顺便说一句,列表理解和生成器非常相似<当您需要处理大量模块且无需一次导入所有模块时,更推荐使用strong>生成器。它更高效且节省内存。如果您只想更改导入的模块对象的属性值,可以使用函数
\uuuu import\uuuu()
和map()
:
您可以通过逐个导入这些模块来检查结果,并输出k:
In [3]: import my_import1, my_import2, my_import3
In [4]: print my_import1.k
1000
In [5]: print my_import2.k
1000
In [6]: print my_import3.k
1000
实际上,您可以将map()函数更改为列表理解或生成器,,代码将非常类似于您要求的代码样式:
#List Comprehension
In [7]: for module in [__import__(m) for m in moduleNames]:
...: module.k = 2000
...:
In [8]: print my_import1.k
2000
In [9]: print my_import2.k
2000
In [10]: print my_import3.k
2000
In [11]:
#Generator
In [11]: for module in (__import__(m) for m in moduleNames):
....: module.k = 3000
....:
In [12]: print my_import1.k
3000
In [13]: print my_import2.k
3000
In [14]: print my_import3.k
3000
In [15]:
顺便说一句,列表理解和生成器非常相似<当您需要处理大量模块且无需一次导入所有模块时,更推荐使用strong>生成器。它更高效且节省内存。如果您只想更改导入的模块对象的属性值,可以使用函数
\uuuu import\uuuu()
和map()
:
您可以通过逐个导入这些模块来检查结果,并输出k:
In [3]: import my_import1, my_import2, my_import3
In [4]: print my_import1.k
1000
In [5]: print my_import2.k
1000
In [6]: print my_import3.k
1000
实际上,您可以将map()函数更改为列表理解或生成器,,代码将非常类似于您要求的代码样式:
#List Comprehension
In [7]: for module in [__import__(m) for m in moduleNames]:
...: module.k = 2000
...:
In [8]: print my_import1.k
2000
In [9]: print my_import2.k
2000
In [10]: print my_import3.k
2000
In [11]:
#Generator
In [11]: for module in (__import__(m) for m in moduleNames):
....: module.k = 3000
....:
In [12]: print my_import1.k
3000
In [13]: print my_import2.k
3000
In [14]: print my_import3.k
3000
In [15]:
顺便说一句,列表理解和生成器非常相似<当您需要处理大量模块且无需一次导入所有模块时,更推荐使用strong>生成器。它效率更高,节省内存。为什么你认为你需要这样做?@jonrsharpe我正在尝试为学生的作业自动评分。大约有90个文件具有不可预测的名称,并且假定每个文件的顶部都有一个名为“k”的变量。虽然我一次只需要导入其中一个文件,但我觉得更可能的是会有迭代所有导入的功能,而不是以某种方式使用单个变量或其他东西来切换导入模块的名称。不过,我可能错了,在这种情况下,我很想知道如何做。更明智的做法是构造赋值,这样就不必注入这样的变量-为什么不,例如,将它作为某个
main
entry point函数的参数?@jornsharpe当我意识到这一点时,我不是做作业的人,我只是评分员。学生们被要求将k设置为某个值,但也被要求在文件的顶部使其易于更改,因此我们需要检查他们的函数是否可以使用不同的k值(最好不要手动更改每个值)。@jonrsharpe这是Harvey Mudd的教科书/实验练习的创作者:!给学生的唯一额外指示是使k可变,如果他们遵循实验室提供的规范,很可能会在他们编写的函数之外设置k-如果他们直接遵循实验室,他们可能只会在提交中硬编码数字“5”。CS学生简介:你认为你为什么需要这样做?@jornsharpe我正在尝试为学生的作业自动评分。大约有90个文件具有不可预测的名称,并且假定每个文件的顶部都有一个名为“k”的变量。虽然我一次只需要导入其中一个文件,