导航:首页 > 编程语言 > python模块初始化

python模块初始化

发布时间:2022-10-17 19:02:19

A. python 编程, 类初始化问题

1.self.__class__
self是当前,类的实例的变量,self.__class__用于获得对应的类的本身的变量。

2.前面通过
class Circle:
定义而来一个类,叫做Circle
其中,定义了类的变量:
all_circles = []
表示是:一个名叫all_circles的列表,并且初始化赋值为[],表示一个空的列表。

3.all__这是什么用法?
是你看错了。
实际是:
all_circles
这是一个单个的变量而已;
这个变量,是之前类Circle中的变量all_circles。

关于这部分内容,建议你去看看我所总结的:
【整理】Python中:self和init__的含义 + 为何要有self和__init__

【整理】Python中变量的作用域(variable scope)
就懂了。
里面有截图解释的,便于你理解。

(此处不给贴地址,请自己用google搜标题,即可找到帖子地址)

B. Python怎么深入模块进行学习

6.1. 深入模块
除了包含函数定义外,模块也可以包含可执行语句。这些语句一般用来初始化模块。他们仅在 第一次 被导入的地方执行一次。[1]
每个模块都有自己私有的符号表,被模块内所有的函数定义作为全局符号表使用。因此,模块的作者可以在模块内部使用全局变量,而无需担心它与某个用户的全局变量意外冲突。从另一个方面讲,如果你确切的知道自己在做什么,你可以使用引用模块函数的表示法访问模块的全局变量,modname.itemname。
模块可以导入其他的模块。一个(好的)习惯是将所有的 import 语句放在模块的开始(或者是脚本),这并非强制。被导入的模块名会放入当前模块的全局符号表中。
import 语句的一个变体直接从被导入的模块中导入命名到本模块的语义表中。例如:
>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
这样不会从局域语义表中导入模块名(如上所示, fibo 没有定义)。
甚至有种方式可以导入模块中的所有定义:
>>> from fibo import *
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
这样可以导入所有除了以下划线( _ )开头的命名。
需要注意的是在实践中往往不鼓励从一个模块或包中使用 * 导入所有,因为这样会让代码变得很难读。不过,在交互式会话中这样用很方便省力。

C. python模块内全局变量 什么时候初始化

脚本初加载时,python会顺序执行所有可以执行的东西。 如果是函数与类定义,它就顺序将定义放到全局表里。

这里全局变最也是一样。python从import语句开始执行,执行到这句话today 就被初始化了。

如果这个模块被其它模块import ,那个在import 的时候, today会被加载。

不过跨模块的全局变量,在python里有些古怪。要小心使用。

D. python的初始化方法有什么用

1.
在程序执行时一定执行一次的操作

2.
python中初始化init 参数第一个必须要加 self

3.
对变量进行赋值 继承: 子类继承父类

E. python import 模块时怎么给此模块初始化函数赋值

class A:
def __init__(self,newid= None):
self.newid=newid
这个一看就是一个类的初始化属性,你初始化的时候只要import这个对象。
from a import A
obj = A(newid)
这样就传给那个初始化函数了。
这些都是python比较基础的东西,还是建议你找本书看看,至少python的基本语法,类,内置函数这些要高明白。

如果解决了您的问题请采纳!
如果未解决请继续追问

F. Python该怎么入门

Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。
易学:Python极其容易上手,因为Python有极其简单的说明文档 [9] 。
易读、易维护:风格清晰划一、强制缩进
用途广泛
速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。 [7]
免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。
高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。
解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。
运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。

G. python import 模块时怎么给此模块初始化函数赋值

class A:
def __init__(self,newid= None):
self.newid=newid
这个一看就是一个类的初始化属性,你初始化的时候只要import这个对象。
from a import A
obj = A(newid)
这样就传给那个初始化函数了。
这些都是python比较基础的东西,还是建议你找本书看看,至少python的基本语法,类,内置函数这些要高明白。

如果解决了您的问题请采纳!
如果未解决请继续追问

H. python的安装包最后一直初始化怎么解决

当遇到无法导入某个python模块时,可能会是没有安装某个模块,也有可能是某模块在加载过程中失败,也有可能是陷入了循环导入的问题。本文详细解释了这个问题。
1. 模块未安装或者路径不对
ImportError: No mule named myMole

有两种可能,一是该模块没有安装,一般可以用
pip install %mole_name%

来解决。注意有时候模块安装包名并不等于要导入的模块名。这种情况下可以通过pip search | list命令来尝试找到正确的包。
另一种情况就是包虽然安装了,但当前运行的程序加载的路径有错。python运行时将从以下位置尝试加载python moles:
* 当前目录
* 环境变量$PYTHONPATH所指示的值,这是一个由“:”分隔的字符串,各个子字符串都是文件系统的一个路径。
* 标准库目录,如dist-site-packages下的模块。
* 在.pth文件中指定的路径,如果存在.pth文件的话。
可以使用以下方式来查看python运行时的包含路径:
?

12

import sysprint(sys.path)

在运行出错的脚本装头部加上这一段代码,然后在控制台中查看打印出来的python类库路径,检查安装包是否已包含在上述路径中。
***可以通过下面的方式将未包含在路径中的模块临时包含进来:***
sys.path.append("path/to/mole")

另外,还可以在shell窗口中查看当前的python包含路径:
echo $PYTHONPATH
2. 无法导入已存在的模块
如果要导入的模块包含了native代码,并且native代码加载(初始化)失败时,就会导致这种错误。使用ssl,
gevent等涉及native的模块时,如果对应的native程序并未安装,则会出现这样的错误。
另一种错误情况是,使用相对路径导入时,父模块还未导入成功。见下面的代码:
?

12345

main.pymypackage/ __init__.pymymole.pymyothermole.py

mymole.py如下所示:
?

123456789101112

#!/usr/bin/env python3 # Exported functiondef as_int(a): return int(a) # Test function for mole def _test(): assert as_int('1') == 1 if __name__ == '__main__': _test()

以及myothermole代码如下所示:
?

1234567891011121314

#!/usr/bin/env python3 from .mymole import as_int # Exported functiondef add(a, b): return as_int(a) + as_int(b) # Test function for mole def _test(): assert add('1', '1') == 2 if __name__ == '__main__': _test()

如果执行mypackage/myothermole,则会报以下错误:
Traceback (most recent call last):
File "myothermole.py", line 3, in
<mole>
from .mymole import as_int
SystemError: Parent mole
'' not loaded, cannot perform relative import
[这篇文章](#Relative imports in
Python 3)给出了更详细的解答。
3. 循环导入
这种错误称之为"circular (or cyclic) imports"。是python独有的一种导入错误,在象java这样的语言中就不存在。
假设有如下两个文件,a.py和b.py:
?

1234567

#a.pyprint "a in"import sysprint "b imported: %s" % ("b" in sys.moles, )import bprint "a out"print b.x

以及:
?

12345

#b.pyprint "b in"import aprint "b out"x = 3

执行python a.py,将得到以下结果:
?

123456789101112131415

$ python a.pya in b imported: Falseb ina inb imported: Truea outTraceback (most recent call last): File "a.py", line 4, in <mole> import b File "/home/shlomme/tmp/x/b.py", line 2, in <mole> import aFile "/home/shlomme/tmp/x/a.py", line 7, in <mole> print b.xAttributeError: 'mole' object has no attribute 'x'

出现这种情况的原因是产生了循环导入。循环导入,以及在导入过程中python进行了加锁操作,最终导致在模块b未导入完成时就引用了其中的名字。
判断导入错误是否是因为循环导入引起的,主要看堆栈中是否出现两次重复的导入。比如上述堆栈中a.py出现两次,因此可以判断是这个文件引起的循环导入。
要解决这个问题,可以把模块看成一种资源,对所有要引入的模块进行编号,再按静态资源排序法顺次导入,就可以避免循环导入。

I. Python中的init.py有什么作用

你指的应该是是__init__.py文件,以下下详细解释:


__init__.py该文件的作用就是相当于把自身整个文件夹当作一个包来管理,每当有外部import的时候,就会自动执行里面的函数。

它具有以下几个作用:


1. 标识该目录是一个python的模块包(mole package)

如果你是使用python的相关IDE来进行开发,那么如果目录中存在该文件,该目录就会被识别为 mole package 。


2. 简化模块导入操作

假设我们的模块包的目录结构如下:

.

└── mypackage
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py


如果我们使用最直接的导入方式,将整个文件拷贝到工程目录下,然后直接导入:


from mypackage.subpackage_1 import test11

from mypackage.subpackage_1 import test12

from mypackage.subpackage_2 import test21

from mypackage.subpackage_2 import test22

from mypackage.subpackage_3 import test31

from mypackage.subpackage_3 import test32

这样的话,看起来就会很麻烦,查找的时候也会麻烦,此时__init__.py就起到了简化的作用。


2.1init.py 是怎么工作的?

实际上,如果目录中包含了__init__.py时,当用 import 导入该目录时,会执行__init__.py里面的代码。我们在mypackage目录下增加一个__ init __.py文件来做一个实验:

.
└── mypackage
├── __init__.py
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py

mypackage/__init__.py里面加一个print,如果执行了该文件就会输出

print("You have imported mypackage")

下面直接用交互模式进行 import

>>> import mypackage
You have imported mypackage

很显然,__init__.py在包被导入时会被执行。

2.2 控制模块导入

我们再做一个实验,在 mypackage/init.py 添加以下语句:

from subpackage_1 import test11

我们导入 mypackage 试试:

>>> import mypackageTraceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/home/taopeng/Workspace/Test/mypackage/__init__.py", line 2, in <mole>
from subpackage_1 import test11ImportError: No mole named 'subpackage_1'

报错了。。。怎么回事?
原来,在我们执行import时,当前目录是不会变的(就算是执行子目录的文件),还是需要完整的包名。

from mypackage.subpackage_1 import test11

综上,我们可以在init.py 指定默认需要导入的模块

2.3 偷懒的导入方法

有时候我们在做导入时会偷懒,将包中的所有内容导入

from mypackage import *

这是怎么实现的呢?__all__变量就是干这个工作的。
__all__关联了一个模块列表,当执行from xx import *时,就会导入列表中的模块。我们将__init__.py修改为 :

__all__ = ['subpackage_1', 'subpackage_2']

这里没有包含subpackage_3,是为了证明__all__起作用了,而不是导入了所有子目录。

>>> from mypackage import *

>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']

>>>

>>> dir(subpackage_1)['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__']

子目录的中的模块没有导入!!!
该例子中的导入等价于:from mypackage import subpackage_1, subpackage_2
因此,导入操作会继续查找 subpackage_1 和 subpackage_2 中的__init__.py并执行。(但是此时不会执行 import *)
我们在 subpackage_1 下添加__init__.py文件:

__all__ = ['test11', 'test12']# 默认只导入test11

from mypackage.subpackage_1 import test11

再来导入试试

>>> from mypackage import *

>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']

>>>

>>> dir(subpackage_1)['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'test11']

如果想要导入子包的所有模块,则需要更精确指定。

>>> from mypackage.subpackage_1 import *

>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'test11', 'test12']


3. 配置模块的初始化操作

在了解了__init__.py的工作原理后,应该能理解该文件就是一个正常的python代码文件。
因此可以将初始化代码放入该文件中。



阅读全文

与python模块初始化相关的资料

热点内容
除了滴滴app哪里还能用滴滴 浏览:397
截图怎么保存文件夹然后压缩 浏览:8
幻影服务器怎么样 浏览:27
具体哪些广东公司招程序员 浏览:869
嵌入式编译器教程 浏览:305
ssl数据加密传输 浏览:86
51单片机定时器方式2 浏览:330
命令行查看开机时间 浏览:812
python微博复杂网络分析 浏览:550
rf3148编程器 浏览:505
浙江标准网络服务器机柜云主机 浏览:587
设置网络的服务器地址 浏览:600
java图形界面设计 浏览:751
纯前端项目怎么部署到服务器 浏览:538
瓜子脸程序员 浏览:505
如何保证服务器优质 浏览:94
小微信aPP怎么一下找不到了 浏览:299
算法纂要学术价值 浏览:977
程序员你好是什么意思 浏览:803
倩女幽魂老服务器如何玩 浏览:563