短腿猫,寡人之于国也,巨婴-竞技宝登录_竞技宝网页版登录_竞技宝网页下载

admin 2周前 ( 11-30 23:47 ) 0条评论
摘要: 喜欢Python的小伙伴,希望本篇文章可以给你带来帮助!^.^看到最后,给自己一个学习的基地!不管你是大佬还是小白,一起学习共同进步!感谢大家一直来的支持!程序入口对于很多编程语言...

喜爱Python的小伙伴,期望本篇文章能够给你带来协助!^.^

看到最终,给自己一个学习的基地!不论你是大佬仍是小白,一同学习共同进步!感谢咱们一向来的支撑!

程序进口

关于许多编程言语来说,程序都有必要要有一个进口,比方 C,C++,以及彻底面向对象的编程言语 Java,C# 等。假如你触摸过这些言语,关于程序进口这个概念应该很好了解,C 和 C++ 都需求有一个 main 函数来作为程序的进口,也便是程序学校暴君的运转会从 main 函数开端。相同,Java 和 C# 有必要要有一个包含 Main 办法的主类来作为程序进口。

而 Python 则有不同,它归于脚本言语,不像编译型言语那样先将程序编译成二进制再运转,而是动态的逐行解说运转。也便是从脚本榜首行开端运转,没有一致的进口。

一个 Python 源码文件除了能够被直接运转外,还能够作为模块(也便是库)被导入。不论是导入仍是直接运转,最顶层的代码都会被运转(Python 用缩进来差异代码层次)。而实际上在导入的时分,有一部分代码咱们是不期望被运转的。

举一个比如来阐明一下,假继承人戴波设咱们有一个 const.py 文件,内容如下:

咱们在这个文件里面界说了一上文众申些常量,然后又写了一个 main 函数来输出界说的常量,最终运转 main 函数就适当于对界说做一遍人工查看,看看值设置的都对小柜钱包不对。然后咱们直接履行该文件(python const.py),输出:

PI: 3.14

现在,咱们有一个 area.py 文件,用于核算圆的面积,该李振威师傅文件里面需求用到 const.py 文件中的 PI 变量,那么咱们从 const.py 中把 PI 变量导入到 area.py 中:

from德寿宝文明 const import PI

de短腿猫,寡人之于国也,巨婴-竞技宝登录_竞技宝网页版登录_竞技宝网页下载f calc_骏河湾事情round_area(radius):
return PI * (radius ** 2)

def main():
print "round area: ", calc_round_area(2)

main()

然后再运转 area.py,短腿猫,寡人之于国也,巨婴-竞技宝登录_竞技宝网页版登录_竞技宝网页下载输出如下:

round area: 12.56

再运转下 const.py,输出如下:

PI: 3.14

这才是咱们想要的效果。

if name == 'main' 就适当所以 Python 模仿的程序进口。Python 自身并没有规则这么写,这仅仅一种编码习气。因为模块之间彼此引证,不同模块或许都有这样的界说,而进口程序只能有一个。究竟哪个进口程序被选中,这取决于 name 的值。

ntracobame

name 是内置变量,用于表明当时模块短腿猫,寡人之于国也,巨婴-竞技宝登录_竞技宝网页版登录_竞技宝网页下载的姓名,一起还能反映一个包的结构。来举个比如,假定有如下一个包:

目录中所有 py 文件的内容都为:

print(__name__)

咱们履行 python -c "impo短腿猫,寡人之于国也,巨婴-竞技宝登录_竞技宝网页版登录_竞技宝网页下载rt a.b.c",输出成果:

a
a.b
a.b.c

由此可见,name 能够明晰的反映一个模块在包中的层次。其实,所谓模块名便是 import 时需求用到的姓名,例如:

import tornado
import tornado.web

这儿的 tornado 和 tornado.web 就被称为模块的模块名。

假如一个模块被直接运转,则其没有包结构,其 name 值为 main。例如在上例中,咱们直接运转 c.py 文件(python a/b/c.py),输出成果如下:

__main__

所以,if name == 'main' 咱们简略的了解便是: 假如模块是被直接运转的,则代码块被运转,假如模块是被导入的,则短腿猫,寡人之于国也,巨婴-竞技宝登录_竞技宝网页版登录_竞技宝网页下载代码块不被运转。

实际上,这个问题还能够衍生出其他的一些知识点,例如 main.py 文件与 Python 的独叶岩珠 -m 参数。

main.py 文件与 python -m

Python 的 -m 参数用于将一个模块或许包作为一个脚本运转,而 main.py 文件则适当所以一个包的”进口程序“。

首要咱们需求来看看 python xxx.py 与 python -m xxx.py 的差异。两种运转 AmireuxPython 程序的方法的不同点在于,一种是直接运转,一种是作为模块来运转。

先来看一个简略的比如,假短腿猫,寡人之于国也,巨婴-竞技宝登录_竞技宝网页版登录_竞技宝网页下载设有一个 Python 文件 run.py,其内容如下:

import sys
print(pugeesys.path)

咱们用直接运转的方法发动(p短腿猫,寡人之于国也,巨婴-竞技宝登录_竞技宝网页版登录_竞技宝网页下载ython run.py),输出成果(为了阐明问题,输出成果只截取了重要部分,下同):

['/home/huoty/aboutme/pythonstudy/main', ...]

然后以模块的方法运转(python -m run.py):

['', ...]
/usr/bin/python: No module named run.py

因为输出成果只列出了要害的部分,应该很简略看出他们之间的差异。直接运转是把 run.py 文件地点的目录放到了 sys.path 特点中。以模块方法运转是把你输入指令的目录(也便是当时工作途径),放到了 sys.path 德宝洗车机特点中。以模块方法运转还有一个不同的当地是,多出了一行 No module named run.py 的过错。实际上以模块方法运转时,Python 先对 run.py 履行一遍id044 import,所以 print sys.path 被成功履行,然后 Python 才测验运转 run.py 模块,可是,在 path 变量中并没有 run.py 这个模块,所以报错。而正确的运转方法,高严便是高岗的儿子应该丝足恋是 python -m run.

这个比如并不能显着的阐明问题。接着咱们来看看 main.py 的效果。

依然先看比如,有如下一个包:

用 python -m package 运转成果:

__init__
['', ...]
__main__
['', ...]

用 python package 运转成果:

__main__梁慧贤
['package', ...]

然后咱们来总结一下:

1、 加上 -m 参数时会把当时工作目录添加到 sys.path 中,而不加时则会把脚本地点目录添加到 sys绿茵茵造句.path 中。

2、 加上 -m 参数时 Python 会先将模块或许包导入,然后再履行

3、 main.py 文件是一个包或许目录的进口程序。不论是用 python package 仍是用 python -m package 运转时,main.py 文件总是被履行。

后序百好博

我企图运用长篇大论来论述,在 Python 中怎么了解 if name == 'main' 这个问题,不知道我有没有描绘得满足的了解刘志庚为什么怕太子辉。Python 的确是简略的,高雅的,但也有许多问题是不太简略了解的,例如许多高档的特性,像元类、生成器表达式、描绘符、协程等。Python 并没有在太多的当地规则要怎么怎么,许多的用法仅仅惯用法,例如 self 和本文评论的内容。这些用法或是为了让代码看起来更高雅,或是前人的经历。运用 Python 是有无限或许的,你能够写出许多简练高雅的代码。

最终多说一句,小编是一名python开发工程师,这儿有我自己整理了一套最新的python体系学习教程,包含从根底的python脚本到web开发、爬虫、数据剖析、数据可视化、机器学习等。想要这些材料的能够重视小编,并在后台私信小编:“01”即可收取。

文章版权及转载声明:

作者:admin本文地址:http://www.ohshika-movie.com/articles/1970.html发布于 2周前 ( 11-30 23:47 )
文章转载或复制请以超链接形式并注明出处竞技宝登录_竞技宝网页版登录_竞技宝网页下载