【菜鸟教程 – 函数】菜鸟教程 – 函数
文章目录
1. 简介
- 函数的注释:
或者使用:help(print_star().doc) - 返回值 return:
- 如果函数体中包含 return 语句,则 结束函数执行 并返回值;
- 如果函数体中不包含 return 语句,则返回 None 值。
- 要返回多个返回值,使用列表、元组、字典、集合将多个值“存起来”即可。
- 函数也是对象,内存地层分析
2. 变量的作用域
- 全局变量:
- 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块
结束。 - 全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。
- 全局变量一般做常量使用。
- 函数内要改变全局变量的值,使用 global 声明一下
- 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块
- 局部变量:
- 在函数体中(包含形式参数)声明的变量。
- 局部变量的引用比全局变量快,优先考虑使用。
- 如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量
- 若要在函数内改变全局变量的值,增加global关键字声明。
3. 参数的传递:本质是传递地址
- 传递可变对象的引用:
可变对象有:字典、列表、集合、自定义的对象等。
结果为:
- 传递不可变对象的引用:(数字、字符串、元组、function等),由于不可变对象无法修改,系统会新创建一个对象。
4. 浅拷贝和深拷贝
- 内置函数:copy();deepcopy()
浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。
深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象。
- 传递不可变对象包含的子类对象是可变的情况:
5. 参数的几种类型
- 位置参数:
- 默认值参数:
- 命令参数:
- 可变参数:指的是“可变数量的参数”
- param*: 将多个参数收集到一个“元组”对象中。
- param **: 将多个参数收集到一个“字典”中。
- 强制命名参数:在带星号的“可变参数”后面增加新的参数,必须在调用的时候“强制命名参数。
6. lambda匿名函数
7. eval()函数
- 功能:将字符串str当成有效的表达式来求值并返回计算结果。
- 语法:语法: eval( source[, globals[, locals]]) --> value
参数:
source :一个 Python 表达式或函数 compile() 返回的代码对象
globals :可选。必须是 dictionary
locals :可选。任意映射对象
8. 递归(三大要素)
【知乎上关于递归的帖子】https://www.zhihu.com/question/31412436
- 第一要素:明确你这个函数要干什么。
- 第二要素:寻找递归结束条件。
- 第三要素:找出函数的等价关系式。
- 打印菲波那切数列的前n项。使用循环和递归两种方式
def recursion(m):
if m < 2:
return 1
else:
return recursion(m-1) + recursion(m-2)
print(recursion(m=4))
- 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想吃时,只剩下一个桃子了。求第一天共摘多少个桃子。(迭代法)
def recursion(n):
i = n
i -= 1
if i == 0:
return 1
else:
return recursion(i)*2+2
print(recursion(10))
9. 嵌套函数;内部函数;数据隐藏
10. nonlocal / global
- global:函数内要修改全局变量,要声明global。
- nonlocal:如果想修改上一级函数的变量,需要nonlocal来声明。
11. LEGB规则
- Python在查找“名称”时,是按照 LEGB 规则查找的:
Local---->Enclosed ---->Global ---->Built in - Local:指的就是函数或者类的方法内部
Enclosed:指的是嵌套函数(一个函数包裹另一个函数,闭包)
Global:指的是模块中的全局变量
Built in:指的是 Python 为自己保留的特殊名称。
12. 内建函数 (build-in function)
官方内建函数文档: https://docs.python.org/3/library/functions.html
- 查看内建函数(
__builtins__
):
dir()
is a powerful inbuilt function in Python3, which returns list of the attributes and methods of any object (say functions , modules, strings, lists, dictionaries etc.)