python 基础
元组
元组一旦创建之后就不能再改变。
元组比列表要拉,支持的操作要少,但是元组不可改变,提供了一种完整性约束,对于编写的更大型的程序来说是方便的。
匿名函数:lambda
匿名就是没有函数名的意思。
你总能用def来代替它们,当你只需要内嵌一小段可执行代码的时候可以稍微用以下lambda,就是会更加简洁一点。
def func(x,y,z):return x+y+z
func(2,3,4)
9
可以用lambda表达式达到相同的效果,通过显式地将结果赋值给一个变量名,之后就能通过这个变量名调用这个函数:
f=lambda x,y,z:x+y+z
f(2,3,4)
9
作用域
-
如果一个变量在def内赋值,它对该函数而言是局部的
-
如果一个变量在一个外层的def中赋值,对于内层的函数来说,它是非局部的。
-
如果一个变量在所有def外赋值,它对整个文件来说是全局的。
-
在def内赋值的变量名与在def外赋值的变量名并不冲突,即使是相同的变量名。在def外被赋值(即,在另外一个def内或者在模块文件的顶层)的变量名X与在def内赋值的变量名X是两个完全不同的变量。
-
任何情况下,一个变量的作用域(它可以被使用的地方)总是由它在代码中被赋值的位置决定的,而与函数调用完全无关。
-
全局作用域的作用范围仅限于单个文件。
别被这里的“全局”所迷惑,这里的全局指的是在一个文件的顶层的变量名仅对于这个文件内部的代码而言是全局的。在python中没有一个跨文件的单一且无所不包的全局作用域概念的。相反,变量名被划分到一个个模块中,并且你必须明确地导入一个模块文件才能使用这个文件中定义的变量名。当你在python中听到“全局”时,你就应该联想到“模块”。
-
赋值的变量名除非被声明为global或nonlocal,否则均为局部变量。
在默认情况下,所有函数定义内的变量名是位于局部作用域(于函数调用相关的)内的。如果你要给一个位于函数外层模块文件顶层作用域中的变量名赋值,就需要在函数内部通过global语句进行声明。如果你要给一个位于外层def作用域中的变量名赋值,从Python3.x开始你可以通过nonlacal语句进行声明。
-
函数的每次调用都会创建一个新的局部作用域。
当每次调用函数时,都会创建一个新的局部作用域,也就是该函数创建的变量存在的命名控件。你可以认为每一条def语句(以及lambda表达式)都定义了一个新的局部作用域,但局部作用域实际上对应于一次函数调用。因为Python允许函数在循环中调用自身(递归),每一次被激活的调用都能拥有一套自己的函数局部变量副本。