博客
关于我
Python函数之返回值、作用域和局部变量
阅读量:798 次
发布时间:2023-03-08

本文共 2491 字,大约阅读时间需要 8 分钟。

函数返回值

函数返回值是一个程序设计中的重要概念,简单来说,就是函数执行后想要传递给外部的结果。要实现这一点,程序员会使用 return 语句。

return 的作用

return 语句的作用是告诉程序在某个点停止执行,并将一个值传递给调用者。这个值可以是任意类型的数据,包括简单的数据类型(如整数、字符串)或复杂的数据结构(如列表、字典、元组等)。

return 的使用场景

假设你有一个函数 stu_info,它接收三个参数:姓名、年龄和课程。函数的目的是根据年龄判断是否符合某个条件,并返回一个布尔值。

def stu_info(name, age, course):
print(name, age, course)
if age > 18:
return True
else:
return False

当调用 stu_info('hope', 19, 'life') 时,函数会输出 hope 19 life,然后因为 age > 18 为 True,所以返回值是 True。

如果函数没有使用 return 语句,那么它默认返回 None。例如:

def stu_info(name, age, course):
print(name, age, course)
return 'good', 'work'

在上述代码中,函数会返回一个元组 ('good', 'work')。需要注意的是,一旦 return 语句被执行,后续代码不会执行。因此,如果在函数中多次使用 return,只有最后一个返回值才会被发送到调用者。

注意事项

  • 函数执行终止:一旦 return 语句被执行,函数会立即停止执行,并将结果返回给调用者。
  • 默认返回值:如果函数中没有使用 return 语句,或者没有主动返回任何值,函数会默认返回 None。

  • 作用域

    作用域(scope)是程序设计中的一个核心概念,它决定了变量、函数和其他程序元素在代码中可以被访问和使用的范围。

    作用域的定义

    在程序中,变量和函数的名字并不总是有效可用的。作用域是限定这些名字可用范围的区域。比如,在函数内部定义的变量,其作用域仅限于该函数;而在程序顶层定义的变量,其作用域则覆盖整个程序。

    作用域与函数的关系

    在 Python 中,函数可以看作是一个独立的作用域。函数内部的变量和函数在其自身的作用域中定义,而外部的变量和函数则在全局作用域中定义。函数通过作用域链来查找变量和函数。

    代码示例

    age = 21  # 全局变量
    def func1():
    age = 19 # 局部变量
    print('func1输出:', age) # 输出:19
    def func2():
    print('func2输出:', age) # 输出:19
    return func2
    return func2
    val = func1() # 调用 func1 并将返回值赋给 val
    val() # 等价于调用 func2,并输出全局变量 age
    print('全局输出:', age) # 输出:21

    在上述代码中:

    • func1 定义了一个局部变量 age,其值为 19。
    • func2 也是一个局部函数,它使用 func1 中的 age 变量。
    • func1 返回 func2 函数名。
    • 调用 func1 会返回 func2,然后调用 val 会调用 func2,输出全局变量 age。

    函数局部变量和全局变量

    定义

    • 局部变量:在函数内部定义的变量。
    • 全局变量:在程序顶层定义的变量。

    区别

  • 作用域:全局变量的作用域是整个程序,而局部变量的作用域仅限于函数内部。
  • 查找规则:在函数内部,如果变量名既存在局部变量中,又存在全局变量中,则优先使用局部变量。
  • 全局变量的修改

    在函数内部,不能直接修改全局变量,除非使用 global 关键字。例如:

    name = 'life'  # 全局变量
    def change_name():
    global name
    name = 'poem' # 修改全局变量
    print('函数里面-》', name) # 输出:poem
    change_name()
    print('函数外面-》', name) # 输出:poem

    注意事项

    • 如果函数内部多次修改全局变量,可能会导致意外结果。
    • 不建议在函数内部频繁修改全局变量,除非有特殊需求。

    函数内部修改列表

    有时候,我们需要在函数内部修改列表中的元素。例如:

    names = ['dream', 'hope', 'life']
    def change_name():
    names[-1] = 'poem'
    print(names) # 输出:['dream', 'hope', 'poem']

    在上述代码中,names 是全局变量。函数 change_name 修改了 names 的最后一个元素,成功完成了修改。

    如果尝试在函数内部删除列表元素,可能会出现错误:

    names = ['dream', 'hope', 'life']
    def change_name():
    del names[1] # 这里会报错,因为 `names` 是全局变量,不能在函数内部删除
    names = ['Dream', 'Poem'] # 只能赋值全局变量,无法修改

    因此,在函数内部修改列表元素时,应当谨慎操作,确保不会破坏全局变量或其他相关逻辑。


    总结

    函数返回值、作用域、局部变量和全局变量是编程中的核心概念。理解这些概念有助于更好地设计和优化代码。

    • return 语句用于将函数的执行结果返回给调用者。
    • 作用域 决定了变量和函数的可用范围。
    • 局部变量 只在函数内部生效,而全局变量则在程序顶层生效。
    • 在函数内部修改全局变量时,应当谨慎操作,避免潜在问题。

    转载地址:http://ywlfk.baihongyu.com/

    你可能感兴趣的文章
    python--003--百分号字符串拼接、format
    查看>>
    Python--10、线程
    查看>>
    Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
    查看>>
    python--基本代码规范
    查看>>
    Python--抽象类接口类
    查看>>
    PYTHON--欧拉习题二
    查看>>
    python--高级应用总结
    查看>>
    python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
    查看>>
    Python-Asyncio TypeError:无法在‘;等待‘;表达式中使用对象DICT
    查看>>
    Python-AttributeError:‘;dict&39;对象没有属性‘;序列‘;
    查看>>
    Python-ldap:是否可以在不显式写入密码的情况下进行绑定?
    查看>>
    python出现 unknown encoding: idna 的处理方法
    查看>>
    Python出现 RuntimeError: dictionary changed size during iteration 的解决方法
    查看>>
    Python-numpy(2)数组的操作
    查看>>
    Python-Numpy的tile函数用法
    查看>>
    python-open函数
    查看>>
    Python-Pandas-将特定函数应用于给定级别-多索引数据框架
    查看>>
    python-queue队列通信
    查看>>
    python-ros No module named PyKDL
    查看>>
    python-social-auth 是否需要会话
    查看>>