问一下如何在python的自带编译器IDLE中换行而不执行呢,有时候要执行反而没有执行
在python的自带编译器IDLE是命令行的方式编写程序的,默认是写完一行,回车就会执行的。你这里nums.sort()只是调用了一个方法,已经执行了,调用方法不会输出,要输出需要使用print,或者直接写nums 所有变量会自动输出。
如果你需要写代码,不想要执行,需要全部写完再执行,那么你可以在options——Edit IDEL 中设置以编辑模式打开IDEL
,然后重启IDEL。
不知道你这个问题是否已经解决, 如果还没有解决的话:函数闭包的概念在初学时容易迷糊,尤其涉及到闭包的作用域和参数问题
python有一个很有意思的地方,就是def函数可以嵌套在另一个def函数之中。调用外层函数时,运行到的内层def语句仅仅是完成对内层函数的定义,而不会去调用内层函数,除非在嵌套函数之后又显式的对其进行调用。
x = 99
def f1():
x = 88
def f2():
print(x)
f2()
f1()
88
可以看出,f1中的嵌套变量x覆盖了全局变量x=99,然后f2中的本地变量按照引用规则,就引用了x=88。
下面我们来说说嵌套作用域的一个特殊之处:
本地作用域在函数结束后就立即失效,而嵌套作用域在嵌套的函数返回后却仍然有效。
def f1():
x = 88
def f2():
print(x)
return f2
action = f1()
action()
88
这个例子非常重要,也很有意思,函数f1中定义了函数f2,f2引用了f1嵌套作用域内的变量x,并且f1将函数f2作为返回对象进行返回。最值得注意的是我们通过变量action获取了返回的f2,虽然此时f1函数已经退出结束了,但是f2仍然记住了f1嵌套作用域内的变量名x。
上面这种语言现象称之为闭包:一个能记住嵌套作用域变量值的函数,尽管作用域已经不存在。