博客
关于我
Python函数之返回值、作用域和局部变量
阅读量:797 次
发布时间: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 操作Redis
    查看>>
    Python 操作sqlite数据库及保存查询numpy类型数据(一)
    查看>>
    Python 操作sqlite数据库及保存查询numpy类型数据(二)
    查看>>
    Python 数据文件与网络数据序列化存储详解
    查看>>
    Python 数据结构与算法详解
    查看>>
    Python 数据采集、清洗、整理、分析以及可视化实战
    查看>>
    Python 数据预处理
    查看>>
    python 文件类型检测 linux和windows都可以用
    查看>>
    Python 无法安装包
    查看>>
    python 日历小部件 - 返回用户选择的日期
    查看>>
    Python 日志管理封装
    查看>>
    python 时间函数小总结
    查看>>
    Python 是否优化尾递归?
    查看>>
    Python 更新set
    查看>>
    Python 最强 IDE 详细使用指南!
    查看>>
    Python 有一个不可变的列表吗?
    查看>>
    Python 机器学习入门之 pandas 的使用
    查看>>
    Python 机器学习实战
    查看>>
    python 杀死子进程_subprocess.popen.kill杀死所有子进程
    查看>>
    Python 条件语句与循环结构详解
    查看>>