python语句: def greet(a,b=4): print b print greet(3)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python语句: def greet(a,b=4): print b print greet(3)相关的知识,希望对你有一定的参考价值。
输出:
4
None
不是应该只输出:
4
你的意思就是不想输出那个【None】对吧?
首先,在python中,函数原则上都得有一个返回值,并用语句return返回,如果函数内不存在return语句的话,此函数的返回值就是None,所以这就是它为什么会输出None的原因。
验证:
所以你的代码print的时候会是None。
要想达到你预期的结果(即不返回None),也不难,可以这样:
1.在python的交互式界面(IDLE)下直接调用(此法也只能在IDLE下有效),不用print:
2.把print改成return:
参考技术A 比武结束。于生看透这险恶浑混的一切,放弃武状元荣耀,与仆人成伯策马而去。Python def 函数:如何指定函数的结尾?
【中文标题】Python def 函数:如何指定函数的结尾?【英文标题】:Python def function: How do you specify the end of the function? 【发布时间】:2010-12-07 02:38:23 【问题描述】:我刚学python,当函数的“def”结束时感到困惑?
我看到如下代码示例:
def myfunc(a=4,b=6):
sum = a + b
return sum
myfunc()
我知道它不会因为返回而结束(因为我已经看到 if 语句......如果 FOO 比返回 BAR,否则返回 FOOBAR)。 Python 怎么知道这不是一个调用自身的递归函数?当函数运行时,它是否只是继续执行程序直到找到返回值?这会导致一些有趣的错误。
谢谢
【问题讨论】:
这是一个非常好的评论。任何对 Python 的介绍都提到重要的空白是第一个(如果不是第一个)事物之一——毕竟,它是最独特的 Python 特性之一。 到目前为止,我只是在使用这个备忘单:ibm.com/developerworks/library/l-cheatsheet3.html 来尝试学习语法。如果你有好的教程建议我很开放。 Google 获取任何教程。他们可能稍微好一点。备忘单上写着“块在以冒号 (:) 结尾的语句后缩进表示,如...”,因此它不会主动误导您。 最好的方法是深入python 【参考方案1】:在 Python 中,空格很重要。当缩进变小(更少)时函数结束。
def f():
pass # first line
pass # second line
pass # <-- less indentation, not part of function f.
注意,单行函数可以不用缩进写在一行上:
def f(): pass
还有,还有分号的使用,但不推荐:
def f(): pass; pass
上面的三种形式显示了函数的结尾是如何定义的语法。至于语义,在Python中退出函数有三种方式:
使用return
语句。这与您可能知道的任何其他命令式编程语言中的工作方式相同。
使用yield
语句。这意味着该函数是一个生成器。解释它的语义超出了这个答案的范围。看看Can somebody explain me the python yield statement?
只需执行最后一条语句。如果没有更多语句并且最后一个语句不是return
语句,则该函数存在,就好像最后一个语句是return None
。也就是说,如果没有明确的return
语句,函数将返回None
。该函数返回None
:
def f():
pass
这个也是如此:
def f():
42
【讨论】:
【参考方案2】:Python 在缩进方面对空格敏感。一旦缩进级别回落到定义函数的级别,函数就结束了。
【讨论】:
哇...没想到会这样。从来没有听说过缩进被用于除可读性之外的任何东西。谢谢!【参考方案3】:确切地说,一个块在遇到一个与开头缩进最多相同级别的非空行时结束。此非空行不是该块的一部分 例如,以下打印同时结束两个块:
def foo():
if bar:
print "bar"
print "baz" # ends the if and foo at the same time
缩进级别小于或等于 def 和 if,因此结束它们。
没有语句的行,不管缩进,没关系
def foo():
print "The line below has no indentation"
print "Still part of foo"
但是标记块结束的语句必须与任何现有的缩进在同一级别缩进。那么,以下是一个错误:
def foo():
print "Still correct"
print "Error because there is no block at this indentation"
一般来说,如果你习惯了花括号语言,只要像它们一样缩进代码就可以了。
顺便说一句,“标准”缩进方式是仅使用空格,但当然也可以仅使用制表符,但请不要将两者混用。
【讨论】:
【参考方案4】:有趣的是,如果你只是在 python 交互式解释器上打字,你必须在函数后面加上一个空行。这不起作用:
def foo(x):
return x+1
print "last"
虽然它在文件中是完全合法的 python 语法。向解释器键入时也存在其他语法差异,所以要小心。
【讨论】:
我认为这是编写 Python 函数的理智方式。没有空行的“去缩进”似乎是个麻烦事。 这不是与解释器的“句法”差异,而是实际差异——唯一的原因是因为否则将无法在解释器中编写多行函数,并且解释器清楚地表明您仍在使用前导...
编写函数定义的一部分。事实上,PEP8 粗略地概述了何时应该和不应该在函数定义后有空行。【参考方案5】:
空格很重要。当block完成时,就是函数定义完成的时候。
当函数运行时,它会一直运行直到它完成,或者直到遇到return
或yield
语句。如果函数完成而没有遇到return
或yield
语句,则隐式返回None
。
the tutorial 中有更多信息。
【讨论】:
【参考方案6】:所以重要的是缩进。正如这里的其他用户向您指出的那样,当缩进级别与 def 函数声明在同一点时,您的函数已经结束。请记住,您不能在 Python 中混合使用制表符和空格。大多数编辑器对此提供支持。
【讨论】:
【参考方案7】:它使用缩进
def func():
funcbody
if cond:
ifbody
outofif
outof_func
【讨论】:
【参考方案8】:在我看来,最好通过注释明确标记函数的结束
def func():
# funcbody
## end of subroutine func ##
关键是有些子程序很长,不方便向上滚动编辑器查看哪个函数结束。另外,如果你使用Sublime,可以右键->Goto Definition,它会自动跳转到子程序声明处。
【讨论】:
以上是关于python语句: def greet(a,b=4): print b print greet(3)的主要内容,如果未能解决你的问题,请参考以下文章