5. 函数
什么是?
函数(function) 是组织好的、可重复使用的、用于执行特定任务的代码块。
分类
- 内置函数:无需任何操作,直接就能使用
- 模块提供的函数:需要导入指定模块后,才能使用
- 自定义函数:程序员自己定义的函数(先定义后再使用)
内置函数: https://docs.python.org/zh-cn/3.13/builtins/functions.html
模块: https://docs.python.org/zh-cn/3.13/py-modindex.html
定义函数
def hello():
...
函数体函数调用
函数名()参数的使用
传参当前不能多也不能少
def order(age, name):
函数体
# 调用
order(25, '张三') # 位置参数
order(age=25, name='张三') # 也可以这么写、可以不按形参顺序来
order(25, name='张三') # 写法3:有名字的参数放在后面

可选参数必须放在后面
可变参数
定义函数时,在形参名前加*,可以接收任务数量的位置参数,并打包成一个元组
def test(*args):
print(args)
test(1, 2, 3, 4)定义函数时,在形参名前加**,可以接收任意数量的关键字参数,并打包成一个字典
def test(**keywords):
# {'name': 'PyCharm', 'age': 18, 'height': 176}
print(keywords)
test(name = 'PyCharm', age = 18, height = 176)可变位置参数、可变关键字参数,可以同时使用,但必须先写可变位置参数

返回值
函数执行完毕后,会把执行结果交给调用者,这个执行结果就是返回值
通过return 关键字返回结果(return 会结束函数执行,并把return 后的值,作为函数的返回值)
一般来说,一个函数没有return 的话,默认就是返回None的,此时说函数没有返回值也行,但准确的说:应该是返回了None(空值)
def test(n1, n2):
return n1 + n2
res = test(1, 2)
# 3
print(res)全局作用域 VS 局部作用域
什么是?
变量能起作用的范围(变量在哪里能用,在哪里不能用)
全局作用域
整个.py文件最外层的范围,就是全局作用域
全局作用域和全局变量,会在程序开始时创建,在程序结束后销毁
局部作用域
函数的内部范围,就是局部作用域
局部作用域和局部变量,会在函数调用时创建,在函数执行结束后销毁
global在函数使用方式
在函数内部声明 n 是全局变量,允许函数修改外面的 n
n = 100
def test ():
# 声明n是全局的n
global n
n = 200
print(n, '我是test函数的n')
test()
# 200
print (n)
嵌套函数

递归调用
是指函数内部调用自己的一种操作
def print_callback(n):
print(n)
if (n - 1 > 0):
print_callback(n - 1)
print_callback(5)
# 5 4 3 2 1在函数体内调用了自身后,如果后面还有代码,就会把待执行放进“收集器”中等待执行、是一个栈结构,采用先进后出的;
这里准确的说:叫函数调用栈;每次递归调用,都会在调用栈里压入对应的信息,因此递归必须涉及到:多次压栈和出栈。
def print_callback(n):
if (n - 1 > 0):
print_callback(n - 1)
print(n)
print_callback(5)
# 1 2 3 4 5函数的文档说明
def print_callback(n):
"""
递归例子
:param n: 递归次数
:return: int
"""
if (n - 1 > 0):
print_callback(n - 1)
print(n)
print_callback(5)鼠标放到调用函数上

