a = b() 与a = b的区别

本文介绍了Python中模块的执行与导入方式,重点讲解了如何使用__name__属性确保模块既能独立运行又能被其他模块正确导入。通过示例演示了if __name__ == '__main__':的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

a = b(),是将b的返回值赋值给a,这里函数b会执行一次。

a = b,是将函数b指向变量a,当指向过程结束后a()与b()的过程是一样的。

这里有更详细的说明http://www.jb51.net/article/121528.htm#comments

文章中有提到装饰器函数的最里层return func(*args,**kw)其实是在赋值,并在赋值过程中执行了,我感觉不是在赋值,而是return的本意就是执行func(*args,**kw)并将返回值返回。

__main__这个代表有特殊用途的变量。_private和__private代表私有变量,不应该被引用(但是不是引用不到)

转载自廖雪峰老师教程下的回答 点击打开链接
关于代码if name == 'main': 可能看了之后可能挺晕的,下面举几个例子解释下,希望能让大家对这行的代码的功能有更深的认识,还是那句话,欢迎大家指正定会虚心接受。

先编写一个测试模块atestmodule.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

def addFunc(a,b):  
    return a+b  

print('atestmodule计算结果:',addFunc(1,1))

再编写一个模块anothertestmodule.py来调用上面的模块:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

import atestmodule

print('调用anothermodule模块执行的结果是:',atestmodule.addFunc(12,23))

在刚才两个模块的路径(我的路径为:“C:\work”)中打开cmd,用命令行运行atestmodule.py:

C:\work>python atestmodule.py
atestmodule计算结果: 2

在刚才两个模块的路径中打开,用命令行运行anothertestmodule.py:

C:\work>python anothertestmodule.py
atestmodule计算结果: 2
调用test模块执行的结果是: 35

#显然,当我运行anothertestmodule.py后第一句并不是调用者所需要的,为了解决这一问题,Python提供了一个系统变量:__name__

#注:name两边各有2个下划线__name__有2个取值:当模块是被调用执行的,取值为模块的名字;当模块是直接执行的,则该变量取值为:__main__

于是乎,被调用模块的测试代码就可以写在if语句里了,如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

def addFunc(a,b):  
    return a+b  

if __name__ == '__main__':  
    print('atestmodule计算结果:',addFunc(1,1))

当再次运行atestmodule.py:

C:\work>python atestmodule.py
atestmodule计算结果: 2

#结果并没有改变,因为调用atestmodule.py时,__name__取值为__main__,if判断为真,所以就输出上面的结果

当再次运行atestmodule.py:

C:\work>python anothertestmodule.py
调用test模块执行的结果是: 35

#此时我们就得到了预期结果,不输出多余的结果。能实现这一点的主要原因在于当调用一个module时,此时的__name__取值为模块的名字,所以if判断为假,不执行后续代码。

所以代码if name == 'main': 实现的功能就是Make a script both importable and executable,也就是说可以让模块既可以导入到别的模块中用,另外该模块自己也可执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值