python学习笔记(8)——函数的基本使用(2)

一、函数的返回值

        函数中return语句会在函数结束时将数据返回给程序,同时让程序回到函数被调用的位置继续执行。

例如:

def filter_sensitive_words(words):
    if"草" in words:
        new_words = words.replace("草","*")
        return new_words
result = filter_sensitive_words("粮草先行")
print(result)

        上述代码中的filter_sensitive_words函数会接收从外界输入的字符串,将该字符串中的”草“转换为”*“,并使用return语句返回替换后的字符串。

        函数可以没有return,此时函数并不返回数值,returm语句也可以返回多个值,那么这些值将会被保存到元组之中。

        例如,使用return语句返回游戏角色目前所处位置的x坐标和y坐标。

def move (x,y,step):
    nx = x + step
    ny = y - step
    return nx,ny
result = move(200,300,50)
print(result)

运行结果:

 二、变量作用域

2.1 全局变量与局部变量

1.局部变量

        局部变量是指在函数内部定义的变量,它只能在函数内部被使用,函数执行结束后局部变量会被释放,此时无法进行访问。不同函数内部也可以包含同名的局部变量,这些局部变量的关系相互独立互不影响。例如以下代码:

def test_one():
    number=10
    print(number)
def test_two():
    number=20
    print(number)
test_one()
test_two()
print(number)

        test_one()函数中定义了一个局部变量number,test_two()函数中也定义了一个局部变量number,分别在每个函数内部访问number。程序在执行test_one()函数时访问了其局部变量number,并且答应了number的值。test_two()函数同理,但是因为使用了局部变量,在结果成功访问了number之后接下来程序在test_two函数歪直接使用print()函数访问了局部变量number导致出现异常,英雌说明在函数外部无法访问局部变量。 

2.全局变量

        全局变量可以在整个程序的范围内起作用,它不会受到函数范围的影响

number=10
def test_one():
    print(number)
test_one()
print(number)

运行结果:

         程序在执行test_one()函数时成功访问了全局变量,并且打印了number的值:程序在执行完test_one函数后再次成功的访问了全局变量,因此全局变量是可以在程序中任意位置被访问。

LEGB原则:

L是local,指局部变量,作用于函数内部。

E是Enclosing function locals可能是嵌套函数内,比如python嵌套函数。

G是Global,是全局变量,定义在函数体外,在整个文件中都可以访问。

B是Buildin,Python内置模块的名字空间函数名称等,比如dict、len()等。

Python的命名空间实际是一个字典,字典内保存了变量名称与对象之间的映射关系,因此,查找变量名就是在命名空间字典中查找键-值对。

Python有多个命名空间,因此,需要有规则来规定,按照怎样的顺序来查找命名空间,LEGB就是用来规定命名空间查找顺序的规则。LEGB规定了查找的顺序为:local>enclosing function locals>global>builtin

 3.global关键字

        global关键字u可以将局部变量声明为全局变量。当局部变量在函数外部时函数内部无法修改。因此使用global关键字将局部变量修改为全局变量。

number=10
def test_one():
    global number
    number +=1
    print(number)
test_one()
print(number)

运行结果:

 4.nonlocal关键字

        使用nonlocal关键字可以在局部作用域中修改嵌套作用域中的声明变量

def test():
    number=10
    def test_in():
        nonlocal number
        number =20
    test_in()
    print(number)
test()

示例代码:

         以上定义的test()函数中嵌套了函数test_in(),test()函数中声明了一个变量number,在test_in()函数中使用nonlocal关键字修饰了变量number,并修改了number的值,调用test_in()函数输出后变量bumber的值。

总结:

        (1)简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放,若有全局同名变量,其值保持不变。

        (2)简单数据类型变脸在用global保留字声明后,作为全局变量使用,函数退出后该变量保留且值被函数改变,

        (2)对于组合数据类型的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可以直接使用并修改全局变量的值。

        (4)如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅仅对全局变量进行操作,函数退出后局部变量被释放,全局变量值不变

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值