python程序的name属性作用是什么_python __name__ == ‘__main__’详细解释+例子

学习过C语言或者Java语言的盆友应该都知道程序运行必然有主程序入口main函数,而python却不同,即便没有主程序入口,程序一样可以自上而下对代码块依次运行,然后python不少开源项目或者模块中依然存在 __name__ == “__main__” 这种写法,具体是上面意思呢?

一.语义解释

1.__name__

__name__ 是python的内置属性,是系统全局变量!每一个py文件都有一个属于自己的__name__:

如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(也称 模块名);

如果py文件直接运行时(Ctrl+Shift+F10),那么__name__默认等于字符串”__main__”;

举个简单的例子:假如你名字是张三,在朋友眼中,你是张三(__name__ == '张三');在你自己眼中,你是你自己(__name__ == '__main__')

2.”__main__”

“_ _main_ _” 实际上就是一个字符串,用来鉴别程序入口,没有太多花里胡哨的东西.

3.__name__ == “__main__”

当.py文件被直接运行 (Ctrl+Shift+F10)时, if  __name__ == “__main__”  之下的代码块将被运行,该语句就相当与python的main主函数入口,示例代码如下:

a.新建一个 my_name.py 文件,作为模块文件:

# !usr/bin/env python

# -*- coding:utf-8 _*-

"""

@file name: my_name.py

Created on: 2020-9-03

Author: Charlie

This program is just a test; you can run it.

@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

"""

import os

import subprocess

import sys

# 定义一个函数并打印 __name__

def prit_name():

print ("my_name.py __name__:", __name__)

if __name__ == "__main__":

# 独立执行

prit_name()

print ("run alonely!")

else:

# 被导入

print ("not run alonely!")

=======================================

b.新建一个 python_main.py 文件,作为启动文件 (Ctrl+Shift+F10):

# !usr/bin/env python

# -*- coding:utf-8 _*-

"""

@file name: python_main.py

Copyright (C) 2020 GRGBanking Corporation

Created on: 2020-9-03

Author: Charlie

This program is just a test; you can run it.

@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

"""

import os

import subprocess

import sys

# 导入 my_name 模块

import my_name

phonebook = {'alice':'123','tom':'456'}

alice_num = phonebook["alice"]

num = 3+6;

# 定义一个函数并打印 __name__

def prit_name():

my_name.prit_name()

print("python_main.py __name__:", __name__)

print ("alice_num = %d",alice_num)

print('%s' % 'alice_num')

print('%s' % alice_num)

print('%d' % 56)

print('%d' % num)

if __name__ == "__main__":

prit_name()

输出结果:

pchui@ubuntu:~/work/RK3399/charlie$ python python_main.py

not run alonely!

('my_name.py __name__:', 'my_name')

('python_main.py __name__:', '__main__')

('alice_num = %d', '123')

alice_num

123

56

9

由此可见,作为启动文件 python_main.py ,该文件的内置属性 __name__ 等于 “__main__”,而my_name.py 作为导入模块,该模块的 __name__ 等于文件名(也称模块名字),所以my_name.py 中的 表达式 if __name__ == “__main__” 并不成立!

当直接将my_name.py作为启动文件时 (Ctrl+Shift+F10),输出:

my_name.py __name__: __main__

如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(也称 模块名);

如果py文件直接运行时(Ctrl+Shift+F10),那么__name__默认等于字符串”__main__”;

二.作用

1.__name__ == “__main__” 作为启动py文件的main函数入口

2.一个项目中必然会包含多个模块文件,每个模块文件在自己写完代码之后会做一些简单的测试用于检测bug 或者 对自己的函数调用写一个简单的示例,而恰到好处的是:__name__ == “__main__”  既不会影响你的测试代码,也不会影响别人调用你的接口函数。

if __name__ == "__main__":

# 独立执行

prit_name()

print ("run alonely!")

else:

# 被导入

print ("not run alonely!")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【youcans 的 OpenCV 例程200篇】173.SEEDS 超像素区域分割

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】173.SEEDS 超像素区域分割 5.4 SEEDS 超像素区域分割 超像素个体应在视觉上一致,特别是颜色应尽可能均匀。SLIC 使用欧几里德距离来度量像素点的相似度,不能反映颜色的方差。 SEED…

能否组成三角形

根据三角形三边长判断是否可以组成一个三角形,如果输入的不对会给出相应的提示。 结果演示 代码演示 package com.nine; import java.util.Scanner; public class ZhiJiao {public static void main(String[] args) {Scanner scan new Scanner(System.in);System…

安卓软件错误log_关于android程序的log错误信息的问题,请明白人看下吧,我是初学者,新建的android项目,一个代码都没改过...

log信息:07-0801:55:43.985:ERROR/vold(27):Erroropeningswitchnamepath/sys/class/switch/test(Nosuchfileordirectory)07-0801:55:43.985:ERROR/vold(27):Errorbootstrappingswit...log信息:07-08 01:55:43.985: ERROR/vold(27): Error opening switch…

【youcans 的 OpenCV 例程200篇】174.LSC 超像素区域分割

【OpenCV 例程200篇 总目录-202206更新】** 【youcans 的 OpenCV 例程200篇】174.LSC 超像素区域分割 5.5 LSC 超像素区域分割 线性谱聚类(Linear Spectral Clustering,LSC)是 SLIC 的改进方案,可以生成紧凑且均匀的超像素&…

修改SqlServer的登录密码

我们每次打开SqlServer数据库的时候首先会让我们登录用户名和密码,那么我们如何修改之前设定的密码呢? 1.打开我们的SqlServer 2.点击安全性,选择自己登录SqlServer的账户双击看到如下页面 3.在密码和确认密码的输入框中修改我们的新密码。…

java递归栈_java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶...

import java.util.Stack;public class ReverseStackRecursive {/*** Q 66.颠倒栈。* 题目:用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。* 颠倒之后的栈为{5,4,3,2,1},5处在栈顶。*1. Pop the top element*2. Reverse the remaining st…

Redis DeskTop Manager 使用教程

redis desktop manager windows 是一款能够跨平台使用的开源性redis可视化工具。 redis desktop manager主要针对redis开发设计,拥有直观强大的可视化界面,具有完善全面的数据操作功能,可以针对目标key执行rename,delete&#xf…

【youcans 的 OpenCV 例程200篇】175.超像素区域分割方法比较

【youcans 的 OpenCV 例程200篇】175.超像素区域分割方法比较 5.2 基于超像素的区域分割 超像素图像分割基于依赖于图像的颜色信息及空间关系信息,将图像分割为远超于目标个数、远小于像素数量的超像素块,达到尽可能保留图像中所有目标的边缘信息的目的…

rtmp协议 java_基于rtmp协议的java多线程服务器

打算设计这个半开源服务的计划已经有很长时间了,大概在两年多前吧,由于一直没有时间,所以拖到现在,最近有时间,可以开始实行这个计划了,当然,现在写的这个服务器还有很多不足的地方,…

java项目添加jar包

java如何导入jar包 X1: 在java工程中怎么导入jar包 1、 项目名称上单击右键,点击properties。 2 、点击“Java Build Path”,点击“Libraries”,点击“Add External JARs” 3 、选择jar X2: eclipse中java工程怎么导…

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 Mean Shift

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法 【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法(框选前景) 【youcans 的 OpenCV 例程200篇】179.图像分割…

java char 空字符串_java判断char是否为空的方法

java判断char是否为空的方法发布时间:2020-06-23 11:47:02来源:亿速云阅读:173作者:Leah这篇文章将为大家详细讲解有关java判断char是否为空的方法,文章内容质量较高,因此分享给大家做个参考,希…

在线答题系统

使用Jquery制作了一个在线答题系统 功能分析 1.开始界面 2.结束界面 3.题目的内容和选项的选择 4.题目的切换 5.分数的计算 6.判断是否选中选项 效果演示 代码演示 一 . html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht…

【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法 【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法&#xff08;框选前景&#xff09; 【youcans 的 OpenCV 例程200篇】179.图像分割…

element 搜索匹配_分享一个element-ui级联选择器的搜索问题,顺便问下有没有解决方案。...

楼主做的是一个三级联动的城市筛选&#xff0c;后台给过来的数据并不全是按照label, value, children的key给到我&#xff0c;数据格式但是官方的props只能指到一级&#xff0c;具体指到2-3级我还不没弄明白。于是 &#xff0c; 需要自己转换:options"options"v-mode…

【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法(框选前景)

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法 【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法&#xff08;框选前景&#xff09; 【youcans 的 OpenCV 例程200篇】179.图像分割…

点击出现小心心

使用鼠标的点击事件&#xff0c;使用鼠标点击任意地方的时候&#xff0c;点击的地方会出现一个小心&#xff0c;每一次出现的小心的颜色都不一样。 原理分析 1.设置点击的范围 2.鼠标点击事件 3.记录鼠标点击的位置在此位置出现一颗小心 4.小心向上浮动并且自动消失 5.小心颜色…

【youcans 的 OpenCV 例程200篇】179.图像分割之 GrabCut 图割法(掩模图像)

【youcans 的 OpenCV 例程200篇】176.图像分割之均值漂移算法 【youcans 的 OpenCV 例程200篇】177.图像分割之 GraphCuts 图割法 【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法&#xff08;框选前景&#xff09; 【youcans 的 OpenCV 例程200篇】179.图像分割…

java多线程 future_Java多线程Future模式

package future;import java.util.Date;/*** 服务器** author wpy**/public class Service {/*** 1.服务器的处理某个业务&#xff0c;该业务可以分成AB两个过程&#xff0c;并且AB两个过程之间不需要彼此的返回结果* 2.A过程需要1秒钟&#xff0c;B过程需要2秒钟&#xff0c;主…

VScode 透明背景设置

我们通常使用VScode开发项目&#xff0c;时间长了不免有些疲惫&#xff0c;在此教给大家一个设置VScode 透明背景的方法&#xff0c;给大家的代码之旅带来一点乐趣。 1.首先在vscode扩展中&#xff0c;找到并下载background这个插件&#xff0c;快捷键Ctrlshiftx 2.完成第一步…