网站首页 > 技术文章 正文

在 Python 中,函数被视为一等公民。意味着在python中,函数在整个过程中被统一处理。它们可以存储在 数据结构 中、作为参数传递或在控制结构中使用。
函数具有以下特征:
- 函数是对象类型的一个实例。
- 可以将函数存储在一个变量中。
- 你可以将函数作为参数传递给另一个函数。
- 你可以从一个函数中返回另一个函数。
- 你可以将它们存储在诸如哈希表、列表等数据结构中。
嵌套函数
将一个 函数定义 在另一个函数中被称为嵌套函数。嵌套函数可以访问封闭范围的变量。使用嵌套函数是为了保护它们免受函数外部造成的影响。
# Python program to illustrate nested functions
def outerFunction(text):
text = text
def innerFunction():
print(text)
innerFunction()
if __name__ == '__main__':
outerFunction('Hey !')
在上面的示例中,innerFunction()已在 outerFunction()中定义,使其成为内部函数。要调用 innerFunction(),我们必须首先调用 outerFunction()。outerFunction()将继续调用 innerFunction(),因为它已在其中定义。重要的是必须调用外部函数,以便内部函数可以执行。
嵌套函数中的变量范围
我们可以找到变量并在需要时访问它的位置称为变量的范围。我们知道如何访问函数内部的全局变量,但是,如何访问外部函数的变量呢?
def f1():
s = 'hello world'
def f2():
s = '你好'
print(s)
f2()
print(s)
# Driver's code
f1()
你好
hello world
在上述示例中,可以看到,f1和f2都定义了s变量,s是不可变类型,s在各自的函数范围内起作用,不会被相互改变。
如果将s换成可变数据类型,结果就不一样了。
def f1():
s = ['hell world']
def f2():
s[0] = '你好'
print(s)
f2()
print(s)
# Driver's code
f1()
['你好']
['你好']
以上示例中,变量s换成了列表类型,嵌套函数改变了s变量的值。当s为不可变类型如字符串时,嵌套的函数也可以改变s变量的值,我们可以使用 ** nonlocal ** 关键字在嵌套函数中进行变量声明。
Python 闭包
闭包是一个函数对象,即使封闭作用域中的变量值不在内存中,它也能记住这些值。
闭包与普通函数不同,它允许函数通过闭包对那些捕获的变量的值或引用的副本进行访问,即使在这些变量的作用域之外调用该函数。
def outerFunction(text):
text = text
def innerFunction():
print(text)
return innerFunction
if __name__ == '__main__':
myFunction = outerFunction('你好')
myFunction()
你好
上面的代码中,函数 innerFunction 应当只能在outerFunction 函数范围内被调用,但是通过使用闭包,我们可以轻松扩展其范围,在函数outerFunction之外调用innerFunction。
以下示例是输出函数执行情况的日志,在嵌套函数中返回了另一个函数用于动态输出函数的调用过程。
为什么使用嵌套函数
内部类在 Python 中被使用有几个原因:
- 封装:将一个类封装在另一个类中,提供更好的结构并隐藏内部类以防止外部访问。
- 逻辑分组:将相关的类分组在一起,使代码更加模块化和更易于理解。
- 访问外部类:内部类可以访问外部类的成员,这在某些设计模式中很有用。

- 上一篇: 一文解读Python嵌套循环实现冒泡排序
- 下一篇: Python(for和while)循环嵌套及用法
猜你喜欢
- 2024-12-30 在 Python 中使用 f-String 格式化字符串
- 2024-12-30 CSnakes:在.NET项目中嵌入Python代码的工具
- 2024-12-30 10个小技巧,让你的 Python 代码更加优雅
- 2024-12-30 什么是Python中的DSL领域特定语言?
- 2024-12-30 python笔记:for循环嵌套。end=""的作用,图形打印
- 2024-12-30 PyScript:让Python在HTML中运行(python处理html文件)
- 2024-12-30 PythonNet:实现Python与.Net代码相互调用!
- 2024-12-30 Python嵌入版(python嵌入版区别)
- 2024-12-30 Python教程-嵌套字典(python字典嵌套字典取值)
- 2024-12-30 Python短文,Python中的嵌套条件语句(六)
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)