Python函数类型、定义语法与变量作用域(LEGB)详解
本文详解Python中函数的四种类型及def定义语法,深入解析变量名解析的LEGB原则(Local、Enclosing、Global、Built-in)。通过多个代码示例演示全局变量、局部变量及global声明的实际行为,帮助开发者掌握变量作用域与函数调用机制。
Python函数类型与定义语法
1、Python函数
函数是Python中用于代码复用和减少冗余的基本程序结构,其核心作用是将相关功能进行封装并支持参数化调用。
在Python中,主要可以创建以下4种类型的函数:
1)、全局函数:定义在模块级别,每个模块构成一个全局作用域,因此其作用范围通常限制在单个程序文件内。
2)、局部函数:定义在其他函数内部,属于嵌套函数。
3)、lambda函数:通过表达式形式创建的匿名函数。
4)、方法:与特定数据类型紧密关联的函数,通常只能与该数据类型实例结合使用。
此外,Python提供了大量内置函数供开发者直接调用。
Python中变量的创建、修改和查找均在名称空间中进行。代码中变量名被赋值的位置决定了该变量可访问的作用域范围。
Python函数的执行环境
如图所示,函数可以通过多种方式接收输入参数并产生输出结果:

创建函数的基本语法格式如下:
def funcName(arg1,arg2, ...):
suite
语法详细说明:
1)、def是一个可执行语句,可以出现在任何允许使用语句的地方,甚至允许嵌套在其他语句(如if或while)中。
2)、def语句会创建一个函数对象,并将其赋值给一个变量名(即函数名)。
3)、return语句用于返回结果对象,为可选参数。若函数中无return语句,则自动返回None对象。当需要返回多个值时,使用逗号分隔,这些值会被组合成一个元组对象返回。
4)、def语句执行完毕后,程序中可通过在函数名后附加括号来调用该函数。每次调用函数时,都会创建一个新的本地作用域。除非变量被显式声明为全局变量,否则在函数内赋值的变量均为本地变量。
5)、所有的变量名均可归纳为本地(Local)、全局(Global)或内置(Built-in,由__builtin__模块提供)三类。
python函数用法示例
例1:在交互式模式下创建并调用函数
In [1]: def printname():
...: raw_input('Please Inputyour name:')
...:
In [2]: printname()
Please Input your name:Fieldyang
例2:编辑test.py,测试全局变量和函数内本地变量的交互
[root@test 0527]# vim test.py
#!/usr/bin/python27
x = 27
def f1():
x= 52
print x
f1()
print x
[root@test 0527]# chmod +x test.py
[root@test 0527]# ./test.py
52 #调用函数产生的输出,函数内变量
27 #print产生的输出,本地变量
例3:编辑test.py,测试全局变量和函数内变量的作用域差异
[root@test 0527]# vim test.py
#!/usr/bin/python27
x = 27
def f1():
y= 52
print "def y = %d,global x = %d" % (y,x)
f1()
print "global x = %s." %x
print y
[root@test 0527]# ./test.py
def y = 52,global x = 27
global x = 27.
Traceback (most recent call last):
File "./test.py", line 9, in <module>
print y
NameError: name 'y' is not defined
#函数内部可以使用全局变量,局部同名变量不会影响全局变量;并且当全局变量未定义时,函数内部无法自行使用与函数内同名的变量(会报错)。
#若需在函数内部将变量声明为全局变量,可使用global关键字,则该变量在程序全局范围内均可调用其最新值。
例4:编辑test.py,定义全局变量
[root@test 0527]# vim test.py
#!/usr/bin/python27
x = 27
y = 66
#本地变量,函数内部声明“global y”后该参数不会被调用
def f1():
global y
y= 52
print "global y = %d,global x = %d" % (y,x)
f1()
print "global x = %s." %x
print "global y = %s." %y
[root@test 0527]# ./test.py
global y = 52,global x = 27
global x = 27.
global y = 52.
变量名解析的LEGB原则
2、变量名解析
1)、LEGB原则:
Local-->Enclosing functionlocals-->Global-->Built-in
变量名引用分为三个作用域层级进行查找。
查找顺序依次为:本地(Local)、外层函数(Enclosing)、全局(Global)、内置(Built-in)。作用域层级越小,查找优先级越高。
2)、变量名解析示例
例1:函数嵌套的使用场景
[root@test 0527]# vim test2.py
#!/usr/bin/python27
#
z = "From global :"
m = 666
def f1():
x= "From function f1 :"
y= 222
print "%s y = %d" % (x,y)
print "%s m = %d" % (z,m)
def f2():
x = "From function f2 :"
print "%s y = %d" % (x,y)
f2()
f1()
print "%s m = %d" % (z,m)
[root@test 0527]# chmod +x test2.py
[root@test 0527]# ./test2.py
From function f1 : y = 222
From global : m = 666
From function f2 : y = 222
From global : m = 666
以上这篇基于Python函数和变量名解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









