当前位置: 首页 > 面试题库 >

了解python的主要方法

赫连秦迟
2023-03-14
问题内容

我是Python的新手,但是我有其他OOP语言的经验。我的课程没有解释python中的主要方法。

请告诉我main方法如何在python中工作?我很困惑,因为我试图将其与Java进行比较。

def main():
# display some lines

if __name__ == "__main__": main()

main是如何执行的,为什么我需要这个奇怪的东西if才能执行main。删除时,我的代码将终止,而不会输出if

最小的代码-

class AnimalActions:
    def quack(self): return self.strings['quack']
    def bark(self): return self.strings['bark']

class Duck(AnimalActions):
    strings = dict(
        quack = "Quaaaaak!",
        bark = "The duck cannot bark.",
    )


class Dog(AnimalActions):
    strings = dict(
        quack = "The dog cannot quack.",
        bark = "Arf!",
    )

def in_the_doghouse(dog):
    print(dog.bark())

def in_the_forest(duck):
    print(duck.quack())

def main():
    donald = Duck()
    fido = Dog()

    print("- In the forest:")
    for o in ( donald, fido ):
        in_the_forest(o)

    print("- In the doghouse:")
    for o in ( donald, fido ):
        in_the_doghouse(o)

if __name__ == "__main__": main()

问题答案:

Python的“ main”方法几乎是该语言(*)所独有的。

语义有些微妙。的__name__,因为它是被导入标识绑定到任何模块的名称。但是,在执行文件时,将其__name__设置为"__main__"(文字字符串:)__main__

这几乎总是用于将应执行的代码部分与定义功能的部分代码分开。因此,Python代码通常包含以下行:

#!/usr/bin/env python
from __future__ import print_function
import this, that, other, stuff
class SomeObject(object):
    pass

def some_function(*args,**kwargs):
    pass

if __name__ == '__main__':
    print("This only executes when %s is executed rather than imported" % __file__)

使用此约定,可以使文件定义供其他程序使用的类和函数,并且还可以包括仅在将文件称为独立脚本时进行评估的代码。

重要的是要了解if __name__,在两种情况下,该行上方的所有代码都正在执行,评估。导入文件或执行文件时,解释器会对其进行评估。如果print在该if __name__行之前放置一条语句,则每当其他任何代码尝试将其导入为模块时,它将打印输出。(当然,这将是 反社会的 。不要那样做)。

我个人喜欢这些语义。它鼓励程序员将功能(定义)与功能(执行)分开,并鼓励重用。

理想情况下,如果从命令行调用,几乎每个Python模块都可以做一些有用的事情。在许多情况下,这用于管理单元测试。如果一个特定的文件定义了仅在系统其他组件的上下文中有用的功能,则仍然可以__name__ == "__main__"用来隔离代码块,该代码块调用适用于此模块的一组单元测试。

(如果您将不具有任何此类功能或单元测试,则最好确保文件模式不可执行)。

摘要:if __name__ == '__main__':有两个主要用例:

  • 允许模块提供要导入其他代码的功能,同时还提供有用的语义作为独立脚本(围绕该功能的命令行包装器)
  • 允许模块定义一组单元测试,这些单元测试与要测试的代码一起存储(与该文件存储在同一文件中),并且可以独立于其余代码库执行。

如果要以类似于某些其他编程语言的方式定义main,这是相当普遍的,def main(*args)并且if __name__ == '__main__':只需调用即可main(*sys.argv[1:])。如果您的.py文件主要旨在用作其他代码中的模块,则可以在套件中def test_module()调用test_module()``if __name__ == '__main__:'

  • (Ruby也实现了类似的功能if __file__ == $0)。


 类似资料:
  • 本文向大家介绍详解python发送各类邮件的主要方法,包括了详解python发送各类邮件的主要方法的使用技巧和注意事项,需要的朋友参考一下  python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点。 一、相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: 1、smtp

  • 问题内容: 到现在为止,我以前以:结束我的Tkiter程序,否则什么都不会出现!参见示例: 但是,当尝试该程序的下一步(使球随着时间移动)时,该书正在阅读,并说要执行以下操作。将绘图功能更改为: 并将以下代码添加到我的程序中: 但是我注意到,添加此代码块使之无用,因为即使没有它,所有内容也会显示出来!!! 此时,我应该提到我的书从未谈论过(也许是因为它使用了Python 3),但是由于我的程序无法

  • 问题内容: sentence = “The quick brown fox jumped over the lazy dog.” characters = {} 我不知道在做什么,其余的一切似乎都非常简单。 问题答案: dict的方法(例如)与索引dict一样,不同之处在于,如果缺少键,则返回默认值(如果不使用键,则返回默认值(如果仅使用一个参数调用,则键为默认值)是)。 因此,一个等效的Pyth

  • 问题内容: 关于启动应用程序作为入口点,主要方法是Java应用程序中最重要的方法。使用此方法之前会发生什么尚不清楚。请有人可以通过以下方法签名来纠正我的看法,从而帮助我理解/阐明使用该方法之前发生的情况: JVM创建至少一个将访问您的主方法的对象。这个(假定的)对象尝试根据该API来访问Java应用程序,该API显然会将您绑定到已知的方法签名 您是否不能限制JVM上的(假定的)单独对象访问包含主要

  • 问题内容: 尝试了解的使用super()。从外观上看,可以创建两个子类。 我很想知道以下两个子类之间的实际区别。 class Base(object): def init(self): print “Base created” class ChildA(Base): def init(self): Base.init(self) class ChildB(Base): def init(self)

  • 问题内容: 我收到此错误消息: 线程“主”中的异常java.lang.RuntimeException:无法编译的源代码- 错误的符号类型:PetTest.main(PetTest.java:18)上的Pet.saySomething Java结果:1 这是我所拥有的:对于课堂, 这是我班上的东西: 我没有发布该程序附带的其他5个类。我知道班上需要修正一些问题,但是我被困住了。在类中,在说缺少方法