Python for C++;还是Java程序员 我有C++和java和Objo C编程的背景,但是我发现很难学习Python,基本上是在它的“main函数”或程序开始执行的地方。所以有任何教程/书可以教Python给那些有C++或java背景的人。基本上可以显示你在C++中是如何做的,以及如何在Python中完成。

Python for C++;还是Java程序员 我有C++和java和Objo C编程的背景,但是我发现很难学习Python,基本上是在它的“main函数”或程序开始执行的地方。所以有任何教程/书可以教Python给那些有C++或java背景的人。基本上可以显示你在C++中是如何做的,以及如何在Python中完成。,python,Python,好的,我想我没有把问题的标题或问题放对,基本上我对“Main”函数感到困惑,否则从python官方文档中除了这个概念之外,其他事情都很明显 多亏了大家是一个好的开始。我不推荐给没有编程经验的人,但是如果你以前用另一种语言编写代码,它将帮助你快速学习Python熟语。 我也在一年前开始了Python,也有C++背景。p> 我已经了解到,Python中的一切都很简单,如果做得对,您不必太担心,很可能是这样。大多数事情都是自然发生的 我不能说我读过一本书什么的,我经常在freenode上缠着pytho

好的,我想我没有把问题的标题或问题放对,基本上我对“Main”函数感到困惑,否则从python官方文档中除了这个概念之外,其他事情都很明显


多亏了大家

是一个好的开始。我不推荐给没有编程经验的人,但是如果你以前用另一种语言编写代码,它将帮助你快速学习Python熟语。

我也在一年前开始了Python,也有C++背景。p> 我已经了解到,Python中的一切都很简单,如果做得对,您不必太担心,很可能是这样。大多数事情都是自然发生的

我不能说我读过一本书什么的,我经常在freenode上缠着python的家伙,看了很多其他很棒的代码

祝你好运:)

我是第二个资源。至于主要功能,没有一个。“main”函数是您在运行的脚本中编写的内容

因此helloworld.py如下所示:

print "Hello World"
你用它来运行它

python helloworld.py

就这样

当您通过Python解释器运行脚本(或从另一个脚本导入该脚本)时,它实际上从头到尾执行所有代码——从这个意义上说,Python脚本没有“入口点”

因此,为了解决这个问题,Python会自动创建一个
\uuuuu name\uuuuuu
变量,并在您自己运行脚本(而不是导入该脚本)时,用值
“\uuuuuu main\uuuuuu”
填充它。这就是为什么您会看到许多脚本,如:

def foo():
    print "Hello!"

if __name__ == "__main__":
   foo()
其中,所有函数/类定义都位于顶部,脚本中的最后一项是类似的if语句。您可以保证Python将从上到下执行脚本,因此它将在那里读取您的所有定义。如果需要,可以在所有函数定义中混合实际的函数代码

如果该脚本名为
bar.py
,您可以在命令行中执行
python bar.py
,您将看到脚本打印出
“Hello!”


另一方面,如果您从另一个Python脚本导入bar,则在执行
bar.foo()
之前,不会打印任何内容,因为
\uuuuu name\uuuuuu
不再是
“\uuuu main\uuuuuu”
,并且if语句失败,因此,<代码> > Foo>代码>从未执行过。

< P>如果您对C++和java等几种语言很熟悉,您可能会发现遵循该规则是很容易的。从词汇结构和语法到更高级的概念,它是以一种自下而上的经典语言描述风格编写的


前面提到的方法采用自上而下的方法学习语言,从一个对初学者来说不太清楚的完整程序开始,深入到它的细节。

我想最简洁的评论是,入门点是脚本的第一行,它不是函数或类。你不一定需要使用if hack,除非你想这样做,而且你的脚本是要导入的。

回答得很好,但没有人指出我认为对那些有Java或C++等其他语言背景的Python程序员来说,一个关键的洞见是什么:
import
def
class
都不是“编译器指令”、“声明”或其他神奇的咒语:它们和其他任何语句一样都是可执行语句。例如,
def
语句:

def f(x): return x + 23
f = lambda x: x + 23
几乎完全等同于赋值语句:

def f(x): return x + 23
f = lambda x: x + 23
(从风格上来说,
def
更可取,因为它使
f.\uuuu name\uuuu
更有意义——这是“几乎”的部分;
lambda
相当有限,只有在您真正渴望创建匿名函数而不是普通命名函数时才应该使用)。同样

class X(object): zap = 23
等同于任务:

X = type('X', (), {'zap': 23})
(同样,在风格上,
class
更可取,提供更多的通用性,比如
def
它允许装饰等等;我想说的是这里有语义等价性)

因此,当您运行一个
.py
文件,或者在程序运行中第一次导入它时,Python会一个接一个地执行它的顶级语句——在正常良好的Python风格中,大多数是赋值、
def
class
import
,但至少有一个是调用(通常是对函数的调用)要执行该函数的代码体(
def
,如
lambda
,只需编译该代码;已编译的代码对象仅在调用函数或lambda时执行)。其他答案已经提出了一些实际考虑因素,例如测试
\uuuuu name\uuuuuu
,以便制作一个可以直接运行或导入的模块,等等


<>最后,最好在函数(或类中的方法)中拥有所有的“重要”代码,而不仅仅是风格上的,而是因为函数中的代码执行得快得多(因为Python编译器可以自动优化对局部变量的所有访问)。例如,考虑……:/P>
import time

lotsotimes = range(1000*1000)

start = time.time()
for x in lotsotimes:
  x = x + x
stend = time.time()

print 'in module toplev: %.6f' % (stend - start)

def fun():
  start = time.time()
  for x in lotsotimes:
    x = x + x
  stend = time.time()

  print 'in function body: %.6f' % (stend - start)

fun()
在我的笔记本电脑上,使用Python 2.6,这会发出:

in module toplev: 0.405440
in function body: 0.123296
因此,对于执行大量变量访问而其他很少的代码,在函数中运行它而不是作为模块顶级代码运行它可以将其速度提高3倍以上

详细说明:在模块级,所有变量都不可避免地保存在一个字典中,因此每个变量的访问都是dict访问;函数的局部变量被优化到一个特殊数组中,因此访问是必要的