Python中的main函数与import用法

目录
  • main函数与import用法
    • 目录结构如下
  • main函数的作用以及解释
    • python 中name == ‘__main__’ 的作用

main函数与import用法

在python中,如果自己封装的库文件中有函数外的语句,那么这些语句是会在库函数被导入时自动执行的,这样就会出现一些奇怪的问题,一个例子如下所示。

目录结构如下

  • A.py
  • B.py

B.py中的内容如下:

def print_B():
    print("B")

print("starting B")

A.py中使用import导入print_B()方法:

from B import print_B
print_B()

结果如下:

starting B
B

可以发现B.py中的函数外语句是会自动先执行的。但有时候我们确实希望直接运行封装的库能够执行某些功能,但又不希望这些功能在被import的时候被触发,这个时候,就可以把这部分功能显式的放在main方法中。

修改后的B.py如下所示:

def print_B():
    print("B")

if __name__ == "__main__":
    print("starting B")

此时运行A.py,结果如下:

B

main函数的作用以及解释

python 中name == ‘__main__’ 的作用

  • 经典的英文解释:Make a script both importable and executable
  • 中文解释:使脚本可以被调用import并且也可以直接运行

1、直接运行

# cat test_fun.py
def fun():
    print(__name__)
    print('this is fun')

if __name__ == '__main__':
    fun()
    print('this is main')
python test_fun.py
__main__
this is fun
this is main

2、被调用import

>>> import test_fun
>>> test_fun.fun()
test_fun
this is fun

调用导入时:此处输出没有显示”main“,也就是说模块name = ‘main’ 下面的代码并未执行,main函数没有执行。

这个功能还有一个用处:

调试代码的时候,在”if name == ‘main‘“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python 没有main函数的原因

    毫无疑问 Python 中没有所谓的 main 入口函数,但是网上经常看到一些文章提"Python 的 main 函数"."建议写 main 函数"-- 有些人是知情的,他的意图可能是模仿那些正宗的 main 函数,但还有不少人明显是被误导了(或自己误解了),就写出来很累赘的代码. 本期"Python 为什么"栏目来聊聊 Python 为什么没有 main 函数? 在开始正题之前,先要来回答这两个问题:所谓的 "main 函数"

  • 学习Python,你还不知道main函数吗

    目录 什么是 Python 函数 Python 中的 main 函数是什么 一个基本的 Python main() Python 执行模式 Python 中的 __main__ 是什么 尽可能使用函数和类 使用 __name__ 来控制代码的执行 创建一个包含要运行代码的函数 main() 从 main() 调用其他函数 Python 中的 main 函数充当程序的执行点,在 Python 编程中定义 main 函数是启动程序执行的必要条件,不过它仅在程序直接运行时才执行,而在作为模块导入时不会

  • Python如何在main中调用函数内的函数方式

    一般在Python中在函数中定义的函数是不能直接调用的,但是如果要用的话怎么办呢? 一般情况下: def a():#第一层函数 def b():#第二层函数 print('打开文件B') b()#第二层中的函数直接调用 结果显示: Traceback (most recent call last): File "C:/Users/rog/Desktop/wenzhang.py", line 4, in <module> b() NameError: name 'b' is

  • 详细聊一聊为什么Python没有main函数

    目录 前言 为什么必须强制main函数作为入口? 总结 前言 众所周知,Python中没有所谓的main函数,但是网上经常有文章提到“ Python的main函数”和“建议编写main函数”. 其实,可能他们是想模仿真正的main函数,但是许多人都被误导(或误解),然后编写了非常笨拙的代码. 在开始讨论之前,我们先来回答以下两个问题: 所谓的“main函数”究竟是什么意思? 为什么有些编程语言必须编写main函数? 一些编程语言将main函数作为程序的执行入口,比如C/C++.C#.Java.G

  • Python中的main函数与import用法

    目录 main函数与import用法 目录结构如下 main函数的作用以及解释 python 中name == ‘__main__’ 的作用 main函数与import用法 在python中,如果自己封装的库文件中有函数外的语句,那么这些语句是会在库函数被导入时自动执行的,这样就会出现一些奇怪的问题,一个例子如下所示. 目录结构如下 A.py B.py B.py中的内容如下: def print_B():     print("B") print("starting B&qu

  • python中的 zip函数详解及用法举例

    python中zip()函数用法举例 定义:zip([iterable, ...]) zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表).若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同.利用*号操作符,可以将list unzip(解压),看下面的例子就明白了: 示例1 x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] x

  • python中time tzset()函数实例用法

    在时间的设置方面,为了能够跟系统时间有更好的区分,我们有时会借用一些函数方法来实现.就拿tzset()来说是设置时间的一种方法,其内在的变量依靠TZ的控制,如果没有设置TZ则以系统时间为准.接下来我们简单就time tzset().TZ进行说明,并对函数的语法.参数.返回值.实例带来使用介绍. 1.说明 tzset()主要用于设置时间变量,它通过获取TZ环境变量初始化tzname变量,在类System-V系统中,它同时设置timezone(相对UTC以西的秒数,向西为正,向东为负)和daylig

  • python中re.findall函数实例用法

    1.findall函数返回字符串中所有匹配结果的正则表达式列表. 2.如果没有分组的正则是返回的正则匹配,分组返回的是分组匹配而非整个正则匹配. 实例 找到所有与pattern匹配的子串(不重叠),并将其放入列表. import re lst = re.findall("[1-9]\d*","qw21313h1o58p4kjh8123jkh8435u") for x in lst: print(x,end=" ") #输出结果:21313 1 5

  • python中去空格函数的用法

    本文简单介绍了Python中去空格函数的用法,这是一个很实用的函数,希望对大家的Python程序设计有所帮助.具体分析如下: 在Python中字符串处理函数里有三个去空格的函数: strip 同时去掉左右两边的空格 lstrip 去掉左边的空格 rstrip 去掉右边的空格 具体示例如下: >>>a=" gho stwwl " >>>a.lstrip() 'gho stwwl ' >>>a.rstrip() ' gho stwwl'

  • 详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 def fun(a,b,c): print(a) print(b) print(c) return a fun(11,22,33) #输出:11 #输出:22 #输出:33 指定参数:输入参数时可以不按照顺序输入 def fun(a,b,c): print(a) print(b) print(c) re

  • Python中使用Lambda函数的5种用法

    引言 Lambda 函数(也称为匿名函数)是函数式编程中的核心概念之一. 支持多编程范例的 Python 也提供了一种简单的方法来定义 lambda 函数. 用 Python 编写 lambda 函数的模板是: lambda arguments : expression 它包括三个部分: · Lambda 关键字 · 函数将接收的参数 · 结果为函数返回值的表达式 由于它的简单性,lambda 函数可以使我们的 Python 代码在某些使用场景中更加优雅.这篇文章将演示在 Python 中 la

  • Python中的枚举函数enumerate()的具体用法

    相比于range,list等简易单词,enumerate仅凭外形都不太让人愿意用.事实上,enumerate还是很好用的. enumerate()是python的内置函数.适用于python2.x和python3.x enumerate在字典上是枚举.列举的意思 enumerate参数为可遍历/可迭代的对象(如列表.字符串) enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用enumerate enumerate()返回的是一

  • 浅谈python中的getattr函数 hasattr函数

    hasattr(object, name) 作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的). 示例: >>> hasattr(list, 'append') True >>> hasattr(list, 'add') False getattr(object,name,default): 作用:返回object的名称为name的属性的属性值,如果属性name存在,则直接返回其

  • Python中字典的浅拷贝与深拷贝用法实例分析

    本文实例讲述了Python中字典的浅拷贝与深拷贝用法.分享给大家供大家参考,具体如下: 最近发现的一个很值得记录的东西就是python字典的浅拷贝问题 首先,明确一下什么是浅拷贝,什么是深拷贝: 简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存 也就是说,在浅拷贝情况下,不同引用指向的是同一块内存,改其中一个引用,那么其他引用也会跟着改变 应用到python 的字典复制过程: # codi

随机推荐