Jea*_*ius 7 python variables function
我正在努力学习Python中的练习41,而且我很难绕过这样一个事实:整个事情都依赖于一个正在运行的函数,因为它被赋值为变量的值.我写了一个小脚本来确认它是如何工作的,它确实:
def pants():
print "Put on some pants!"
def shorts():
print "And don't forget your underwear!"
zap = pants()
thing = shorts()
Run Code Online (Sandbox Code Playgroud)
结果如下:
Put on some pants!
And don't forget your underwear!
Run Code Online (Sandbox Code Playgroud)
显然这种情况发生了,但我无法理解为什么语言会这样运作 - 语言背后的逻辑是什么,使得这种语言成为一种有价值的操作方式.我认为这对我来说是有帮助的,可以理解为什么会这样,而不仅仅是"这就是它的工作方式".
为清楚起见:我问(我猜)为什么函数正在运行,当我正在做的就是将它作为某个值赋值.print语句就在那里,所以我可以看到该函数确实正在运行.
事实上,我实际上并没有真正跑步
裤子()短裤()
那令我困惑.
要制作一个折磨人的比喻,如果我在家烘焙饼干是"cookies()",而我周六要做饼干,我可能最终会相信
星期六=饼干()
但只是想"嘿,周六是饼干日"与实际烘焙饼干不一样......所以为什么只是说
星期六=饼干()
实际上烘焙饼干,而不是仅仅使用变量"cookies()"设置星期六以供以后使用?
El *_*rto 16
当您使用括号时(),函数将被调用.如果要将该函数分配给变量以重复使用它,则应删除括号.
例:
def pants():
print "Put on some pants!"
def shorts():
print "And don't forget your underwear!"
zap = pants
thing = shorts
Run Code Online (Sandbox Code Playgroud)
然后当你想调用这些函数时:
zap()
thing()
Run Code Online (Sandbox Code Playgroud)
显然这种情况发生了,但我无法理解为什么语言会这样运作 - 语言背后的逻辑是什么,使得这种语言成为一种有价值的操作方式.我认为这对我来说是有帮助的,可以理解为什么会这样,而不仅仅是"这就是它的工作方式".
语言需要某种方式来区分函数和调用函数的行为.这就是括号提供的内容.
f = foo
Run Code Online (Sandbox Code Playgroud)
现在f必然是功能本身.该功能foo可以通过执行f().
f = foo()
Run Code Online (Sandbox Code Playgroud)
这会调用函数foo并将返回值绑定到f.
请注意,无论是否将返回值绑定到名称都无关紧要.简单写作
foo()
Run Code Online (Sandbox Code Playgroud)
也将执行该函数,但返回值将被忽略.
虽然看起来你的功能似乎没有返回任何东西,但实际上它们确实存在.引用Python.org文档:
return语句返回一个函数的值.不带表达式参数的return返回None.从函数末尾掉落也会返回None.
所以你的功能看起来像这样:
def pants():
print "Put on some pants!"
return None
def shorts():
print "And don't forget your underwear!"
return None
Run Code Online (Sandbox Code Playgroud)
你的作业分配给zap任何pants回报(即价值pants())和thing任何shorts回报.在你的情况下,两者都是None,但当然必须运行函数才能弄明白(*).毕竟,这可能是因为pants回报42在闰年,而且shorts回报'Foobar'每当一些随机数生成器"卷" 6.
(*)题外话:"必须运行"这些功能不应被视为普遍适用.在纯粹的环境中,除了Python的细节(我知之甚少)之外,编译器可能会意识到两个函数是相同的None,并且在程序运行时不会导致调用.但是,打印某些东西(或检查当前年份是闰年,还是掷骰子)的功能并不纯粹.
| 归档时间: |
|
| 查看次数: |
4593 次 |
| 最近记录: |