本文将带您了解关于如何使用Python的__import__函数等效于“从模块导入*”?的新内容,同时我们还将为您解释importpython函数的相关知识,另外,我们还将为您提供关于pythonim
本文将带您了解关于如何使用Python的__import__函数等效于“从模块导入*”?的新内容,同时我们还将为您解释import python函数的相关知识,另外,我们还将为您提供关于python import 与 __import__ 学习笔记、Python Importlib模块与__import__详解、Python __import__() 函数、Python __init__函数的使用的实用信息。
本文目录一览:- 如何使用Python的__import__函数等效于“从模块导入*”?(import python函数)
- python import 与 __import__ 学习笔记
- Python Importlib模块与__import__详解
- Python __import__() 函数
- Python __init__函数的使用
如何使用Python的__import__函数等效于“从模块导入*”?(import python函数)
给定一个带有模块名称的字符串,如何将模块中的所有内容导入,就像调用过的一样:
from module import *
即给定的字符串S =“ module”,如何获得以下等效:
__import__(S, fromlist="*")
这似乎没有达到预期的效果(因为它没有导入任何东西)。
答案1
小编典典请重新考虑。唯一比 魔术 更糟糕的import *
是。 __import *
如果您确实要:
m = __import__ (S)try: attrlist = m.__all__except AttributeError: attrlist = dir (m)for attr in attrlist: globals()[attr] = getattr (m, attr)
python import 与 __import__ 学习笔记
python 多文件编程文件调用方式
首先要知道的是在使用python
命令执行python代码时,默认的代码执行方式是脚本的方式.如下:
$ python main.py
Hello World!
需要了解的是,除了通过脚本的方式运行python代码之外,python代码的执行方式还有另外一种方式:
python -m main
Hello World!
与看做脚本执行的方式不同,加了-m 参数后python会将后面的参数main
当做一个模块来执行.当然,执行结果和不加-m
参数时的执行结果没什么不同.但通过比较两者的命令参数时会很明显的发现在不加-m
参数时python执行的是一个文件main.py
,而在添加了 -m
参数以后python执行的是一个模块main
,并非只是去掉后缀这么简单,而是参数的类型发生了根本性的改变.
从一方面来看 通过 python -m
以模块的去调用python不过是多此一举;但是不同于以脚本方式的运行方式,python -m
在以模块方式运行的时候会将当前路径添加到系统参数sys.path
中.这样当代码中存在导入包中的模块时不仅会去python的系统模块库和扩展模块库中查找模块,还会去当前路径及其子路径(不会去查找父路径)中查找合法的包中是否有对应模块存在并且导入.
main.py
import sys
print(sys.path)
当以不同方式去运行时
(python3.6) D:\spyder-workspace\import-test>python main.py
[''D:\\spyder-workspace\\import-test'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\python36.zip'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\DLLs'',
''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\lib'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\lib\\site-packages'']
(python3.6) D:\spyder-workspace\import-test>python -m main.py
['''',
''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\python36.zip'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\DLLs'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\lib'',
''D:\\ProgramData\\Anaconda3\\envs\\python3.6'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\lib\\site-packages'']
D:\ProgramData\Anaconda3\envs\python3.6\python.exe: Error while finding module specification for ''main.py'' (AttributeError: module ''main'' has no attribute ''__path__'')
(python3.6) D:\spyder-workspace\import-test>python -m main
['''',
''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\python36.zip'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\DLLs'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\lib'',
''D:\\ProgramData\\Anaconda3\\envs\\python3.6'', ''D:\\ProgramData\\Anaconda3\\envs\\python3.6\\lib\\site-packages'']
注意:这里当以 pyhton -m main.py 的方式运行时,脚本看似是正常运行了,但是到脚本的最后却报了一个错误,可以想的到的是在以模块方式执行时 python 首先会解析该模块并运行模块中的代码,然后尝试将这个模块加入到运行的模块表中,而模块名是 main.py 时,python 会认为 main 是包名 py 是模块名称,而去尝试查找main模块中应该包含的魔术变量__path__,但是当前的main模块并没有应该是包才拥有的__path__变量,因此会报(module ''main'' has no attribute ''__path__'')
可以看到当以 python -m
方式运行时会在sys.path
中多出一个空字符串
在使用 python 进行多文件编程时, 有很多方式在当前代码中调用其他文件中的代码,其中包括:
方法1
文件结构:
project
|----mods
| |----__init__.py
| |----mod1.py
|----main.py
|----__init__.py
---
入口代码:
from sys import path
__import__()
是一个python内置的函数,用于动态加载模块中的类和函数.
import 语句导入;python 会将每个文件看成一个模块
关于 python import 动态加载性能的问题可以参考这篇博文:
python 动态加载是否影响性能?
Python Importlib模块与__import__详解
Importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同。
以一个例子为证:
以下为我的工程目录结构:
lib/test.py:
name = "Jack"
def getName():
print(name)
return name
demo.py:
name = "Amy"
def getName():
print(name)
return name
Importlib模块的例子:
testImportlib.py:
import importlib
mName = "lib.test"
module = importlib.import_module(mName)
module.getName()
Importlib是python的一个库,通过导入importlib,调用import_module()方法,传入用户想要获取的模块对应的路径字符串,即可获取一个,模块module,module可以调用这个test模块下的所有属性和方法。
运行截图:
__import__的例子:
__import__是python的一个内置方法,直接调用__import__()即可获取一个模块.
testImport.py:
mName = "demo"
module = __import__(mName)
module.getName()
此时调用的是相同目录下的demo模块,可顺利地获取这个模块,那么当不再同一个目录下呢?
修改testImport.py:
mName = "lib.test"
module = __import__(mName)
module.getName()
此时的运行结果为:
出错提示为,当前的模块''lib''没有getName()这个方法,因此没有正确获取到test模块。
继续修改此文件:
mName = "lib.test"
module = __import__(mName,fromlist = (''test'',))
module.getName()
运行结果为:
当加上fromlist属性即可正确获取。
Python __import__() 函数
Python __import__() 函数
Python 内置函数
描述
__import__() 函数用于动态加载类和函数 。
如果一个模块经常变化就可以使用 __import__() 来动态载入。
语法
__import__ 语法:
__import__(name[, globals[, locals[, fromlist[, level]]]])
参数说明:
- name -- 模块名
返回值
返回元组列表。
实例
以下实例展示了 __import__ 的使用方法:
a.py 文件代码:
test.py 文件代码:
执行 test.py 文件,输出结果为:
在 a.py 文件中 4394716136
Python 内置函数
Python __init__函数的使用
class Cat:
def __init__(self,_name):
self.name = _name
def eat(self):
print("i am eating .")
def show(self):
print("name is %s"%self.name)
tom = Cat("tom")
tom.show()
print("------------");
lanmao = Cat("lanpang")
lanmao.show()
python类的创建过程
1.分配内存空间
2.调用__init__方法,并且传递参数
3.将地址返回给变量
__init__函数的使用,使得python中的类更加接近于c++中的类,通过在__init__函数中定义变量达到在类中统一定义属性的目的
今天关于如何使用Python的__import__函数等效于“从模块导入*”?和import python函数的分享就到这里,希望大家有所收获,若想了解更多关于python import 与 __import__ 学习笔记、Python Importlib模块与__import__详解、Python __import__() 函数、Python __init__函数的使用等相关知识,可以在本站进行查询。
本文标签: