python 函数简介
def 是一个可执行的语句,当执行到def时首先创建一个对象并且将其变量(即函数名),此时函数名成了这个函数的应用
函数参数通过赋值(即对象引用)传递的
参数 返回值和变量不是声明
>>>test='a'
>>> if test=='a':
def func():
print test
else:
def func():
print test+'not'
>>> func()
a
>>> othername=func
>>> othername()
a
函数内的本地变量:
在函数内被赋值了的变量
参数是通过赋值传入的所以参数也是本地变量
返回值也是本地变量
>>> a='sdfsdaf'
>>> def cc():
a='324234'
print a
x='324wer'
return x
>>> print a
sdfsdaf
>>> print x //函数外就无法访问函数内的本地变量了
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
print x
NameError: name 'x' is not defined
>>>
函数的命名空间
一个变量的作用域总是由在代码中被赋值的地方所决定的,并且与函数调用完全没有关系,如果一个变量在def内被赋值,它总是被定为的函数内访问,如果在def外被赋值
它就是整个文件全局的并且称之为语义作用域
在默认的情况下,一个函数的所有的变量名都是与函数的命名空间相关联的:
一个在def内定义的变量名能够被def内的代码使用,不能再函数的外部引用这样的变量名
def之中的变量名与def之外的变量名并不冲突,即使是使用在别处的相同的变量名
函数作用域的基础:
函数提供的是嵌套的的命名空间,使其内部使用的变量名本地化,不会与外部的变量名冲突,模块定义的是全局作用域
内嵌的模块是全局作用域,全局作用域的作用域仅局限于单个文件 每次函数的调用都创建了一个新的本地作用域 默认情况下函数内部被赋值的变量名除非声明为全局变量(使用 global)否则均为本地变量 所有的变量名都可以归纳为本地,全局或者内置的
在函数内部定义的任意的赋值操作定义的变量名都将成为本地变量:=语句,import语句,def语句,参数传递 但是在函数内部实地改变对象不会吧变量划分为本地变量