Python函数类型、定义语法与变量作用域(LEGB)详解

今天早睡
今天早睡
发布时间:2026-10-13 | 6人浏览过
原创

本文详解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函数和变量名解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表