以上就是给各位分享Python——import与reload模块的区别,其中也会对pythonimportreload进行解释,同时本文还将给你拓展8.15(day16)模块的四种形式,import与
以上就是给各位分享Python——import与reload模块的区别,其中也会对python import reload进行解释,同时本文还将给你拓展8.15(day16)模块的四种形式,import与from,,,import,循环导入,模块搜索路径,Python文件的两种用法,random模块、C调用python——PyImport_ImportModule返回空指针、import、from 模块 import*、reload、nginx restart与reload的区别等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- Python——import与reload模块的区别(python import reload)
- 8.15(day16)模块的四种形式,import与from,,,import,循环导入,模块搜索路径,Python文件的两种用法,random模块
- C调用python——PyImport_ImportModule返回空指针
- import、from 模块 import*、reload
- nginx restart与reload的区别
Python——import与reload模块的区别(python import reload)
原创声明:本文系博主原创文章,转载或引用请注明出处。
1. 语法不同
import sys
reload(''sys'')
2. 导入特性不同
import 和reload都可以对同一个模块多次加载,
但是import多次载入的都是同一个副本,而reload可以在不中止Python程序的情况下重新载入模块(热加载)。
这说明,一旦模块发生了变化,模块新的特性能够通过reload来呈现,而import不可以。
3. 传递性不同
reload加载模块时只重新加载该模块,而不会加载该模块import的其他模块;
显然import模块时,为了使依赖生效,import会将模块中import的其他模块也载入。
4. 需要reload的模块必须先被import
5. import与reload的help文档
1)import
The "import" statement
**********************
import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )*
| "from" relative_module "import" identifier ["as" name]
( "," identifier ["as" name] )*
| "from" relative_module "import" "(" identifier ["as" name]
( "," identifier ["as" name] )* [","] ")"
| "from" module "import" "*"
module ::= (identifier ".")* identifier
relative_module ::= "."* module | "."+
name ::= identifier
Import statements are executed in two steps: (1) find a module, and
initialize it if necessary; (2) define a name or names in the local
namespace (of the scope where the "import" statement occurs). The
statement comes in two forms differing on whether it uses the "from"
keyword. The first form (without "from") repeats these steps for each
identifier in the list. The form with "from" performs step (1) once,
and then performs step (2) repeatedly.
To understand how step (1) occurs, one must first understand how
Python handles hierarchical naming of modules. To help organize modules
and provide a hierarchy in naming, Python has a concept of
packages. A package can contain other packages and modules while
modules cannot contain other modules or packages. From a file system
perspective, packages are directories and modules are files.
Once the name of the module is known (unless otherwise specified, the
term "module" will refer to both packages and modules), searching for
the module or package can begin. The first place checked is
"sys.modules", the cache of all modules that have been imported
previously. If the module is found there then it is used in step (2)
of import.
If the module is not found in the cache, then "sys.meta_path" is
searched (the specification for "sys.meta_path" can be found in **PEP
302**). The object is a list of *finder* objects which are queried in
order as to whether they know how to load the module by calling their
"find_module()" method with the name of the module. If the module
happens to be contained within a package (as denoted by the existence
of a dot in the name), then a second argument to "find_module()" is
given as the value of the "__path__" attribute from the parent package
(everything up to the last dot in the name of the module being imported).
If a finder can find the module it returns a *loader*
(discussed later) or returns "None".
If none of the finders on "sys.meta_path" are able to find the module
then some implicitly defined finders are queried. Implementations of
Python vary in what implicit meta path finders are defined. The one
they all do define, though, is one that handles "sys.path_hooks",
"sys.path_importer_cache", and "sys.path".
The implicit finder searches for the requested module in the "paths"
specified in one of two places ("paths" do not have to be file system
paths). If the module being imported is supposed to be contained
within a package then the second argument passed to "find_module()",
"__path__" on the parent package, is used as the source of paths. If
the module is not contained in a package then "sys.path" is used as
the source of paths.
Once the source of paths is chosen it is iterated over to find a
finder that can handle that path. The dict at
"sys.path_importer_cache" caches finders for paths and is checked for a finder.
If the path does not have a finder cached then
"sys.path_hooks" is searched by calling each object in the list with a
single argument of the path, returning a finder or raises
"ImportError". If a finder is returned then it is cached in
"sys.path_importer_cache" and then used for that path entry. If no
finder can be found but the path exists then a value of "None" is
stored in "sys.path_importer_cache" to signify that an implicit, file-
based finder that handles modules stored as individual files should be
used for that path. If the path does not exist then a finder which
always returns "None" is placed in the cache for the path.
If no finder can find the module then "ImportError" is raised.
Otherwise some finder returned a loader whose "load_module()" method
is called with the name of the module to load (see **PEP 302** for the
original definition of loaders). A loader has several responsibilities
to perform on a module it loads. First, if the module already exists
in "sys.modules" (a possibility if the loader is called outside of the
import machinery) then it is to use that module for initialization and
not a new module. But if the module does not exist in "sys.modules",
then it is to be added to that dict before initialization begins. If
an error occurs during loading of the module and it was added to
"sys.modules" it is to be removed from the dict. If an error occurs
but the module was already in "sys.modules" it is left in the dict.
The loader must set several attributes on the module. "__name__" is to
be set to the name of the module. "__file__" is to be the "path" to
the file unless the module is built-in (and thus listed in
"sys.builtin_module_names") in which case the attribute is not set. If
what is being imported is a package then "__path__" is to be set to a
list of paths to be searched when looking for modules and packages
contained within the package being imported. "__package__" is optional
but should be set to the name of package that contains the module or
package (the empty string is used for module not contained in a
package). "__loader__" is also optional but should be set to the
loader object that is loading the module.
If an error occurs during loading then the loader raises "ImportError"
if some other exception is not already being propagated. Otherwise the
loader returns the module that was loaded and initialized.
When step (1) finishes without raising an exception, step (2) can
begin.
The first form of "import" statement binds the module name in the
local namespace to the module object, and then goes on to import the
next identifier, if any. If the module name is followed by "as", the
name following "as" is used as the local name for the module.
The "from" form does not bind the module name: it goes through the
list of identifiers, looks each one of them up in the module found in
step (1), and binds the name in the local namespace to the object thus
found. As with the first form of "import", an alternate local name
can be supplied by specifying ""as" localname". If a name is not
found, "ImportError" is raised. If the list of identifiers is
replaced by a star ("''*''"), all public names defined in the module are
bound in the local namespace of the "import" statement..
The *public names* defined by a module are determined by checking the
module''s namespace for a variable named "__all__"; if defined, it must
be a sequence of strings which are names defined or imported by that
module. The names given in "__all__" are all considered public and
are required to exist. If "__all__" is not defined, the set of public
names includes all names found in the module''s namespace which do not
begin with an underscore character ("''_''"). "__all__" should contain
the entire public API. It is intended to avoid accidentally exporting
items that are not part of the API (such as library modules which were
imported and used within the module).
The "from" form with "*" may only occur in a module scope. If the
wild card form of import --- "import *" --- is used in a function and
the function contains or is a nested block with free variables, the
compiler will raise a "SyntaxError".
When specifying what module to import you do not have to specify the
absolute name of the module. When a module or package is contained
within another package it is possible to make a relative import within
the same top package without having to mention the package name. By
using leading dots in the specified module or package after "from" you
can specify how high to traverse up the current package hierarchy
without specifying exact names. One leading dot means the current
package where the module making the import exists. Two dots means up
one package level. Three dots is up two levels, etc. So if you execute
"from . import mod" from a module in the "pkg" package then you will
end up importing "pkg.mod". If you execute "from ..subpkg2 import mod"
from within "pkg.subpkg1" you will import "pkg.subpkg2.mod". The
specification for relative imports is contained within **PEP 328**.
"importlib.import_module()" is provided to support applications that
determine which modules need to be loaded dynamically.
Future statements
=================
A *future statement* is a directive to the compiler that a particular
module should be compiled using syntax or semantics that will be
available in a specified future release of Python. The future
statement is intended to ease migration to future versions of Python
that introduce incompatible changes to the language. It allows use of
the new features on a per-module basis before the release in which the
feature becomes standard.
future_statement ::= "from" "__future__" "import" feature ["as" name]
("," feature ["as" name])*
| "from" "__future__" "import" "(" feature ["as" name]
("," feature ["as" name])* [","] ")"
feature ::= identifier
name ::= identifier
A future statement must appear near the top of the module. The only
lines that can appear before a future statement are:
* the module docstring (if any),
* comments,
* blank lines, and
* other future statements.
The features recognized by Python 2.6 are "unicode_literals", "print_function",
"absolute_import", "division", "generators",
"nested_scopes" and "with_statement". "generators", "with_statement",
"nested_scopes" are redundant in Python version 2.6 and above because
they are always enabled.
A future statement is recognized and treated specially at compile
time: Changes to the semantics of core constructs are often
implemented by generating different code. It may even be the case
that a new feature introduces new incompatible syntax (such as a new
reserved word), in which case the compiler may need to parse the
module differently. Such decisions cannot be pushed off until
runtime.
For any given release, the compiler knows which feature names have
been defined, and raises a compile-time error if a future statement
contains a feature not known to it.
The direct runtime semantics are the same as for any import statement:
there is a standard module "__future__", described later, and it will
be imported in the usual way at the time the future statement is
executed.
The interesting runtime semantics depend on the specific feature
enabled by the future statement.
Note that there is nothing special about the statement:
import __future__ [as name]
That is not a future statement; it''s an ordinary import statement with
no special semantics or syntax restrictions.
Code compiled by an "exec" statement or calls to the built-in
functions "compile()" and "execfile()" that occur in a module "M"
containing a future statement will, by default, use the new syntax or
semantics associated with the future statement. This can, starting
with Python 2.2 be controlled by optional arguments to "compile()" ---
see the documentation of that function for details.
A future statement typed at an interactive interpreter prompt will
take effect for the rest of the interpreter session. If an
interpreter is started with the "-i" option, is passed a script name
to execute, and the script includes a future statement, it will be in
effect in the interactive session started after the script is
executed.
See also:
**PEP 236** - Back to the __future__
The original proposal for the __future__ mechanism.
2)reload
reload(...)
reload(module) -> module
Reload the module. The module must have been successfully imported before.
【参考资料】
- https://blog.csdn.net/carolzhang8406/article/details/6855525
8.15(day16)模块的四种形式,import与from,,,import,循环导入,模块搜索路径,Python文件的两种用法,random模块
复习
函数的定义
def 函数名():
code
return 返回值
定义函数的三种方法
- 有参函数
- 无参函数
- 空函数
函数返回值
- return 终止函数
- 返回值 可以返回多个值, 以元组形式存储
- 默认返回None
Nonetype ....
函数调用
函数名()
函数的参数
形参
描述意义
位置形参
一个一个从左到右
默认形参
默认值, 默认形参必须放在位置形参的后面
实参
具有具体的值
位置实参
一个一个从左到右传值给形参
关键字实参
键值对的形式传给形参 ; 关键字实参必须放在位置实参的后面
可变长参数
*
形参
接收多余的位置实参,以元组的形式存储
实参
打散元组,以位置实参的形式传参给形参
**
形参
接收多余的关键字实参,以字典的形式存储
实参
**{''a'':1} --> a=1
打散字典,以关键字实参的形式传给形参(形参必须得有这个key的形参名)
函数对象
- 引用
- 函数的参数
- 函数的返回值
- 容器类元素
函数对象 是 函数名 == 变量名
函数的嵌套
def f1():
def f2():
pass
名称空间和作用域
- 内置
- 全局
- 局部
执行顺序: 内置 --> 全局 --> 局部
查找顺序: 当前 --> 局部 --> 全局 --> 内置
全局作用域:
局部作用域
- 全局作用域(x=1)和局部作用域的(x=3)毫无关联
- 局部作用域1的(x=1)和局部作用与2的(x=3)毫无关联
闭包函数
把函数A和变量x包在函数B内部,然后通过函数B的返回值返回出函数A对象
def B(x):
# x = 1
def A():
print(x)
pass
return A
装饰器
用来给函数加功能的,他的本质也是函数
- 不改变被装饰函数的源代码
- 不改变被装饰函数的调用方式
def outter(func):
def wrapper(*args,**kwrags):
# 逻辑
res = func(*args,**kwargs) # func是被装饰的函数
return res
return wrapper
@outter
def index():
pass
def sanceng(engine):
def outter(func):
def wrapper(*args,**kwrags):
# 逻辑
res = func(*args,**kwargs) # func是被装饰的函数
return res
return wrapper
return outter
@sanceng(engine)
def index():
pass
迭代器
可迭代对象: 具有iter方法的对象, 可迭代对象不一定是迭代器对象
迭代器对象: 具有iter和next方法的对象, 迭代器对象一定是可迭代对象, 迭代器对象加上iter方法还是迭代器本身
for 循环原理
for i in lt:
- 把lt变成迭代器对象
- 然后迭代使用next方法获取每一个元素
- 捕捉异常中断while循环
三元表达式
print(1) if i > 10 else print(2)
列表推导式
[i for i in range(10)] # 0-9已经拿出来了
字典生成式
{k:v for k,v in dic.items()}
生成器表达式
(i for i in range(10)) # 不去使用next取值,是没有值的
生成器
自定制的迭代器
def func():
yield
yield:
1. 暂停函数,遇到下一个yield继续运行函数体代码
- 具有返回值
- 让函数()变成生成器对象
return:
1. 终止函数
- 返回值
递归
函数调用函数本身,但是必须得有结束条件
内置函数
内置函数是直接用的,属于python解释器的
数据类型的内置函数只有数据类型本身才能使用
enumerate()
面向过程编程
流水线
优点: 思路清晰
缺点: 可扩展性差 ; 功能与功能之间不独立 ; 调试麻烦
模块的四种形式
1.自定义模块
2.第三方模块
3.内置模块
4.包,一系列模块组织在一起的文件夹
import 和 form,,,import
# import 与 from import
# import .直接调用模块
# 1.生成名称空间
# 2.运行time.py文件,把time.py文件名称空间放入time名称空间,
# 3.time导入import或from,,,import 的名称空间
# import time
# time.方法() 不能直接用方法名
# form time import gmtime
# print(gmtime())
# 1.内存中生成time名称空间
# 2.
# 3.把gmtime方法直向import和from import .py(当前导入time模块的文件)的名称空间
# 多个时
# from time import gmtime, , ,
循环导入
模块搜索路径
Python文件的两种用法
第一种:执行文件
第二种:模块文件
random模块
# random模块 随机数
# import random 导入
# print(random.random()) 随机0到1的小数
#
# print(random.randint(1,3)) 不会去3
#
# print(random.randrange(1,3)) [1.3)之间整数
#
# print(random.uniform(1,3)) 取小数(1.3)
#
# print(random.choice([1,''23'',[4,5]])) 随机取一个
#
# print(random.sample([1,''23'',[4,5]],2)) 容器中选择多个
#
# lis = [1,3,5,7,9] 打乱容器
# random.shuffle(lis)
# print(lis)
C调用python——PyImport_ImportModule返回空指针
今天调用py文件时 遇到了一点问题,但是不知道问题在哪,所以可以在vs的控制台输出一下py出现的问题
pMod = PyImport_ImportModule("cnn_models_class_old");
if (!pMod) {
if (pMod == nullptr)
{
PyErr_Print();
exit(1);
}
printf("Import Module Failed!\n");
}
import、from 模块 import*、reload
-
import 模块名、from 模块名 import* 均为导入模块,前者调用模块中函数或者变量时需要添加引用,即模块名.调用函数或者变量名
具体用法见下
https://jingyan.baidu.com/article/15622f242e15b6fdfcbea5b5.html
reload 会重新加载已加载的模块,但原来已经使用的实例还是会使用旧的模块,而新生产的实例会使用新的模块;
reload 后还是用原来的内存地址;
reload 不支持 from ××× import ××× 格式的模块进行重新加载。
说明:Python 3.0 把 reload 内置函数移到了 imp 标准库模块中。它仍然像以前一样重载文件,但是,必须导入它才能使用。
方法一:
from imp import reload
reload(module)
方法二:
import imp
imp.reload(module)
nginx restart与reload的区别
service nginx reload:当没有请求时,重新加载配置文件,很安全。
service nginx restart:强制重新启动nginx,很不好,相关于强制关闭nginx,所有正在请求的uri将会丢失。
今天关于Python——import与reload模块的区别和python import reload的讲解已经结束,谢谢您的阅读,如果想了解更多关于8.15(day16)模块的四种形式,import与from,,,import,循环导入,模块搜索路径,Python文件的两种用法,random模块、C调用python——PyImport_ImportModule返回空指针、import、from 模块 import*、reload、nginx restart与reload的区别的相关知识,请在本站搜索。
本文标签: