GVKun编程网logo

如何使用Python的__import__函数等效于“从模块导入*”?(import python函数)

18

本文将带您了解关于如何使用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函数)

给定一个带有模块名称的字符串,如何将模块中的所有内容导入,就像调用过的一样:

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 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__详解

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 OS 文件/目录方法
Python 面向对象 

Python __import__() 函数

Python 内置函数 Python 内置函数


描述

__import__() 函数用于动态加载类和函数 。

如果一个模块经常变化就可以使用 __import__() 来动态载入。

语法

__import__ 语法:

__import__(name[, globals[, locals[, fromlist[, level]]]])

参数说明:

  • name -- 模块名

返回值

返回元组列表。

实例

以下实例展示了 __import__ 的使用方法:

a.py 文件代码:

#!/usr/bin/env python #encoding: utf-8 import os print (''在 a.py 文件中 %s'' % id(os))

test.py 文件代码:

#!/usr/bin/env python #encoding: utf-8 import sys __import__(''a'') # 导入 a.py 模块

执行 test.py 文件,输出结果为:

 a.py 文件中 4394716136

Python 内置函数 Python 内置函数

Python __init__函数的使用

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__函数的使用等相关知识,可以在本站进行查询。

本文标签: