85. if __name__ == "__main__"的作用和原理(适合小白)

安迪python学习笔记 安迪python学习笔记 2023-05-13 13:06 Posted on 云南


  • 1. 代码体验

  • 2. `__name__`的作用

    • 2.1 模块知识回顾

    • 2.2 `__name__`的作用

  • 3. `if __name__ == "__main__"`语句

    • 3.1 def语句自定义函数知识回顾

    • 3.2 代码解析

  • 4. 实操练习


1. 代码体验

在讲解知识之前,我们先体验if __name__ == "__main__"语句的代码输出效果。

【准备工作】

  1. 新建一个名为85的文件夹;

  2. 85的文件夹中新建2个py文件:一个命名为测试.py,另一个名为85.py

【在测试.py文件中编写代码】

a = 8000
print("a的值为:",a)

【终端输出】

a的值为: 8000

在85.py文件中编写代码】

import 测试

【总结】

观察输出结果,发现测试.py85.py的输出结果是一致。

【在测试.py文件中编写代码】

a = 8000
print("a的值为:",a)
print(__name__)

【终端输出】

a的值为: 8000
__main__

__name__的写法】

  1. 先敲2条小横线。

注意注意注意是2条短的小横线,不是长的那个横线哦!

  1. 在敲name

  2. 在敲2条小横线。

Image
85-1

在85.py文件中编写代码】

import 测试

【总结】

观察输出结果,发现此时2个py文件输出的值已经不一样了。

测试.py输出的是:

a的值为: 8000
__main__

85.py文件输出的是:

a的值为: 8000
测试

为什么增加了一个__name__2个py文件输出结果就不一样了呢?

为什么输入的是__name__输出的却是__main__呢?

我们来看看__name__有什么神奇的地方?

2. __name__的作用

2.1 模块知识回顾

模块是几个函数和类的集合。

在Python中一个py文件就是一个模块。Image

Python模块(每个.py文件)里可以写入一段可以直接执行的程序(也称为脚本),也可以定义一些变量、类或函数,让别的模块导入和调用,类似于库函数。

但不是所有程序员都是大公无私愿意把自己所有的代码都分享给其他人的。

有的程序员他写完了.py文件,他也愿意给你分享他的成果,但不是全部。

假设他只让你调用它80%的代码,另外20%是他要保护起来,不给你调用,那这个时候就可以用系统变量__name__来保护它另外20%的代码。

2.2 __name__的作用

在我们创建.py文件时程序会自动加载一些系统变量,__name__就是其中之一。

__name__的作用是显示当前程序运行在哪一个模块中。

__name__ 它可以标识模块的名字,可以显示一个模块的某功能是被自己执行还是被别的文件调用执行。

main [meɪn]:主要的。

【概括如下】

1.如果运行的是自己写的模块,那__name__ 等于'__main__'

2.当文件被当做模块导入时其他文件时:__name__等于文件名(模块名)。

一个py文件就是一个模块。

85.py是Python的一个模块。

测试.py也是Python的一个模块。

测试.py文件中用print函数输出__name__属性值,输出的是__main__。这是因为它运行的是自己的模块,我们也可以称为主程序入口。

85.py文件中,输出的是测试,即调用的模块名。因为85.py文件调用的是测试.py文件。因此输出的是模块名测试

3. if __name__ == "__main__"语句

if __name__ == "__main__"是Python中的一个特殊语句。

用于判断当前模块是否是主程序入口,即运行的是自己的模块还是调用的其他模块。

main [meɪn]:主要的。

如果当前模块是主程序入口,则执行if语句块中的代码。

如果当前模块是被其他模块导入的,则不执行if语句块中的代码。

【概括如下】

  1. .py文件作为脚本运行时,if __name__ == '__main__' 中的代码会被执行。

  2. .py文件是被import语句调用到其他.py文件中时,if __name__ == '__main__':中的代码不会被执行。

【在测试.py文件中编写代码】

def  he():
    a = 4
    print(a+a)
if __name__ == "__main__" :
    he()

【终端输出】

8

在85.py文件中编写代码】

import 测试

测试.py文件终端输出的是8

在85.py文件终端是没有任何输出的。

分析代码前,我们先回顾下自定义函数的语法。

3.1 def语句自定义函数知识回顾

【参考链接如下】

54.python的def语句自定义函数

【自定义函数的语法】

Image
85-3

def语句自定义函数由7部分组成:

  1. 关键字 def

define[dɪˈfaɪn]:定义。

def 是 define 的缩写,def为子定义函数的关键词。

  1. 函数名。

函数名和变量名一样,也是自己命名的。

  1. 形式参数。

  2. 英文冒号:

  3. 四个空格的缩进。

  4. 函数体。

函数体就是我们要实现的功能。

  1. return后接返回值。如果没有要返回的值,return可以省略。

【函数的调用语法】

函数名(参数)

参数可以有,也可以没有。

调用函数的语法非常简单,函数名加参数即可。

3.2 代码解析

【源代码】

def  he():
    a = 4
    print(a+a)
if __name__ == "__main__" :
    he()

【代码解析】

def  he():

def关键字自定义了一个函数。

函数名为he

【温馨提示】

  1. 自定义函数没有参数时也必须有英文圆括号。

  2. 括号后紧跟英文冒号:

  3. 自定义函数要严格遵循冒号和四个空格的缩进语法。

a = 4

定义了一个变量a,并给a赋值为4。

注意该语句前有4个空格的缩进。

print(a+a)

print(a+a)就是自定义函数he的函数体。

自定义函数he要实现的功能就是求2个a的和。

【温馨提示】

自定义函数的特点是写好备用。

自定义函数要有调用语句才会执行函数里面的代码。

if __name__ == "__main__" :

增加这个判断语句就是判断运行的模块是否是主程序入口。

如果是主程序,__name__ 等于'__main__',那么程序执行if条件判读语句下面的代码块。

he()

条件成立,则执行he()语句。

这是一个函数调用语句,语法为函数名()

【总结】

如果上面的if语句成立,则调用he函数,调用he函数,才会执行里面的print语句,才会有值输出。

而在85.py文件中,它是调用测试.py模块。

.py文件是被import语句调用到其他.py文件中时,if __name__ == '__main__':中的代码不会被执行。

85.py模块同样也是运行的测试.py文件中的代码,但在85.py中if 条件语句不成立,则he()没有被调用,因此没有任何输出。

【总结】

这就是`if name == 'main'语句的作用:用于判断当前模块是否是主程序入口。

学到这里其实大家能理解该if语句的解语法和输出效果,但大家会感觉到判断了主程序好像也没什么作用。

我们现在接触的都是单个py文件,即单个模块。但当我们需要完成大型的项目,需要对多个py文件进行打包处理时,该if条件判断语句会起到非常关键的作用。最简单的描述就是它可以锁定主程序中的变量、函数等等不被其他调用模块所改变,从而避免变量名重复带来的错误。

但其实不仅仅如此,上面的表述也不完全准确,只是帮助大家理解而已。

4. 实操练习

【目标任务】

输入两个整数a,b,输出两个数加、减、乘、幂运算的结果。

【输入】

请输入整数a

请输入整数b

【备注】因为有幂运算,b的数值尽量小于5。

【输出】

第一行输出a +b的结果

第二行输出a - b 的结果

第三行输 a * b 的结果

第四行输 a ** b 的结果

【幂运算如下】

print(2**2)
print(2**3)
print(2**4)
print(2**5)

【终端输出】

4
8
16
32

a ** b中的b表示次方数。

2**5的表示2的5次方。

【示例】

输入

3

2

输出

5

1

6

9

【体验代码】

calculate[ˈkælkjuleɪt]:计算,运算。

def cal(a,b):
    # 在此处输入你的代码
    print("a+b=",a+b)
    print("a-b=",a-b)
    print("a*b=",a*b)
    print("a**b=",a**b)

if __name__ == '__main__':
    a = int(input("请输入整数a的值:"))  # 输入后用int函数将字符串转为整数
    b = int(input("请输入整数b的值:"))  # 输入后用int函数将字符串转为整数
    cal(a,b)        # 调用你定义的函数进行数学运算

【终端输出】

a+b= 5
a-b= 1
a*b= 6
a**b= 9

【代码解析】

def cal(a,b):

自定义了一个函数cal,参数为a和b。

# 在此处输入你的代码
print("a+b=",a+b)
print("a-b=",a-b)
print("a*b=",a*b)
print("a**b=",a**b)

自定义函数的函数体,功能是实现两个整数加、减、乘、幂运算的结果。

if __name__ == '__main__':

if条件判断语句,判断是否在主程序中运行,这里可以不加的。

a = int(input("请输入整数a的值:"))  # 输入后用int函数将字符串转为整数
b = int(input("请输入整数b的值:"))  # 输入后用int函数将字符串转为整数

用input函数实现从终端输入整数的值。

注意input函数得到的是字符串变量,要用int函数将字符串数据转换为整数类型数据。

cal(a,b)        # 调用你定义的函数进行数学运算

【函数的调用语法】

函数名(参数)

cal(a,b)调用我们定义的函数。


收录于合集 #入门语法
 92
上一篇84.input输入函数知识拓展下一篇86. print输出函数知识拓展(有练习题)

Scan to Follow