因为我对python很新,所以语言的这个特殊方面对我来说仍然是不透明的.

因此,假设我的项目包含许多包含代码的文件和两个“服务”文件:__ init__.py和__main__.py

在__init__.py中只有:

if __name__ == "__main__":

import package.__main__

__main__.main()

在__main__.py中如下:

import package # ok

import package2 # ok

def main():

package.myfunc1() # can't find reference to myfunc1

package2.myfunc2() # can't find reference to myfunc2

所以我的问题是:为什么两个包都可见而内部函数不是?我已经阅读了谷歌的一些源代码,但仍无法发现它与我的代码之间的区别.我正在使用Python 3.5.1

我假设,__ init__中的代码将启动__main__,而__ main__将启动我的其余功能.

UPD

好吧,如果我把某人与我的代码混淆了,我很抱歉.

支持__init__.py的想法是该文件是在第一个包添加时由IDE创建的,因此我决定在第一个github条目中找到code(我的错,我可以通过复制粘贴重新使用它) ).

严格来说,我只需要python构造,相当于这个C代码:

header.h

void func1(){...} //in code1.c

void func2(){...} //in code2.c

#include "header.h"

int main() //in main.c

{

func1();

func2();

return 0;

}

以下代码

import package

import package2

if __name__ == "__main__":

package.myfunc1()

package2.myfunc2()

与上述问题完全相同,因此问题不在__init__.py中

解决方法:

我做了:

foo/

__init__.py

__main__.py

这2个文件是:

import __main__

print('in init')

print('init name',__name__)

print('main name',__name__)

print('in main')

if __name__=='__main__':

print('in main main block')

如果我直接运行__main__:

1538:~/mypy$python foo/__main__.py

('main name', '__main__')

in main

in main main block

如果我调用目录,它也会做同样的事情.它不会导入__init__.py.

1541:~/mypy$python foo

('main name', '__main__')

in main

in main main block

但是从shell中,它会加载两个文件

1542:~/mypy$python

....

>>> import foo

('main name', 'foo.__main__')

in main

in init

('init name', 'foo')

但是它不使用__main__的if __name__块 – 名称不对,它现在是foo .__ main__.

相关文档

Execute the Python code contained in script, which must be a filesystem path (absolute or relative) referring to either a Python file, a directory containing a __main__.py file, or a zipfile containing a __main__.py file.

This module represents the (otherwise anonymous) scope in which the interpreter’s main program executes — commands read either from standard input, from a script file, or from an interactive prompt. It is this environment in which the idiomatic “conditional script” stanza causes a script to run:

我用__init__.py创建了另一个目录但没有main:

1558:~/mypy$python foo1

/usr/bin/python: can't find '__main__' module in 'foo1'

1558:~/mypy$python

...

>>> import foo1

('in init', 'foo1')

>>>

导入工作,但我无法运行该目录.

标签:python,main,initialization

来源: https://codeday.me/bug/20190608/1201490.html

python中main方法的用法_python __main__和__init__正确用法相关推荐

  1. python中main方法的用法_Python中的main方法

    估计很多人跟我一样初学python看代码的时候先找一下main()方法,从main往下看.但事实上python中是没有你理解中的"main()"方法的.言归正传 if name = ...

  2. python中使用函数的优点_Python基础之函数基本用法与进阶详解

    本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...

  3. python中的方法是什么_Python方法

    1. 对象 = 属性 + 方法 对象是类的实例.换句话说,类主要定义对象的结构,然后我们以类为模板创建对象.类不但包含方法定义,而且还包含所有实例共享的数据. 封装:信息隐蔽技术 我们可以使用关键字 ...

  4. python中的figure什么意思_Python Matplotlib.figure.Figure.text()用法及代码示例

    Matplotlib是Python中的一个库,它是数字的-NumPy库的数学扩展. Figure模块提供了顶层Artist,即Figure,其中包含所有绘图元素.此模块用于控制所有图元的子图和顶层容器 ...

  5. python中values是什么意思_Python values()与itervalues()的用法详解

    dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value: d = { 'Adam': 95, 'Li ...

  6. python中的方法需要定义_Python中规范定义命名空间的一些建议

    API的设计是一个艺术活.往往需要其简单.易懂.整洁.不累赘. 很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的. 也就是说我们只需要暴露这个方法就行,不用关心这个方法是怎 ...

  7. python中的方法什么意思_python中的函数和方法的区别是什么

    python中的函数和方法的区别: 1.函数要手动传self,方法不用传self. 2.如果是一个函数,要用类名去调用,如果是一个方法,要用对象去调用. 举例说明:class Foo(object): ...

  8. python中for循环的代码_Python for循环及基础用法详解

    Python 中的循环语句有 2 种,分别是 while 循环和 for 循环,前面章节已经对 while 做了详细的讲解,本节给大家介绍 for 循环,它常用于遍历字符串.列表.元组.字典.集合等序 ...

  9. python中os.path.isdir()和os.path.isfile()的正确用法

    之前网上查找os.path.isdir()和os.path.isfile()的使用:发现很多是错误的,主要原因是,传入的参数不是绝对路径. 先介绍一下os.listdir()方法,此方法返回一个列表, ...

最新文章

  1. C#String.PadLeft函数,文本对齐以及填补解决方案
  2. RocketMq namesvr 最佳实践
  3. 《JS权威指南学习总结--9.5 类和类型》
  4. Enterprise Services (COM+)服务组件开发异常分析
  5. 能够使用StringBuilder类的常用方法操纵字符串 1215
  6. C# 实现连连看功能
  7. pygame游戏_Pygame游戏——Pong游戏(三)
  8. 渐开线曲线方程c语言,proe常用曲线方程大全
  9. 路由器手机测试网速的软件,4个实用的无线路由器WiFi检测工具,让你网速又快又稳定...
  10. orcadcapture安装_电路原理图设计软件(OrCAD Capture CIS 中文版) 16.6 免费安装版
  11. 简单spring cloud服务升级实现
  12. 高可用架构演进之单元化
  13. python怎么降序输出结果_按降序打印Python
  14. LeetCode42题动态规划 - 接雨水
  15. 杨辉三角(C语言简单版)
  16. 怎么保护地球生物多样性
  17. SourceTree安装跳过注册
  18. 君子慎独,卑以自牧!
  19. 光谷 计算机专业 好的学校,距离光谷最近的十所高校,你的学校上榜了没?
  20. 【机器学习实战】利用sklearn中的随机森林对红酒数据集进行分类预测

热门文章

  1. 律师坚称技术无罪:“钉钉打卡神器”开发者二审被改判四年
  2. GitHub在线开发工具上线,是时候卸载IDE了
  3. JRebel for idea 有时候不生效
  4. 【技术培训】招收Jeecg门徒 ---javaweb初级入门班
  5. 数据结构基础(6) --顺序栈的设计与实现
  6. Linux用户配置文件(第二版)
  7. 对象序列化机制的理解
  8. 第六次会议(4.15)
  9. Web前端开发的四个阶段(小白必看)
  10. 在 ReportViewer 报表中使用表达式