python 函数 本地变量 函数的命名空间 变量的作用域

时间:2022-03-18 22:48:15

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语句,参数传递 但是在函数内部实地改变对象不会吧变量划分为本地变量