10 python函数(下)
一、函数的说明文档
函数是纯代码语言,如果需要一行行去阅读才能理解它的意思,就没有效率,我们编写函数是为了提高效率,只要知道怎么使用就可以了,那就需要有文档进行说明。
我们在函数上面停留一会,就会显示该函数的说明文档,比如print函数,下面就是print的说明文档。
说明文档的定义
通过多行注释的形式,对函数进行说明
要形成说明文档,必须放在函数体之前。
def 函数名(参数列表): """ 函数说明 :param 参数列表: :return: """ 函数体 return 函数返回值
def add(x, y):
"""
求 x 和 y 的和
:param x: 参数x的说明
:param y: 参数y的说明
:return: 返回值的说明 返回和
"""
return x + y
print(add(1, 2))
:param:添加参数的说明,参数类型呀,功能啊 都可以放在这里
:return:返回值说明,说明返回的值类型呀,什么数据呀,可以放在这里
二、嵌套函数
所谓嵌套函数就是在一个函数里再调用一个函数,这个很好理解,每个函数可能就是由大大小小的函数构成的,就像一个泡咖啡牛马,他可以有泡咖啡功能,也可以有泡茶功能
在函数名2里调用函数名1,就属于嵌套函数。调用函数名1后,要等待函数名1实行完毕返回才会继续继续函数名2。
def say_hello():
print("hello")
return
def robot():
print("我是机器人")
say_hello()
print("很高兴认识你")
return
robot()
# 我是机器人
# hello
# 很高兴认识你
在执行完第一个输出语句print("我是机器人")后调用say_hello函数,要等待say_hello函数执行完
print("hello")之后才能继续执行print("很高兴认识你")。
三、lambda(匿名函数)
lambda 函数是一种特殊的函数,它很小,没有像普通函数那样正式的名字,所以叫匿名函数。
它只能有一个表达式,不用像平常那样,用 def 关键字来定义函数
通常在一些需要把函数当作参数传递的地方,lambda 函数就会大显身手。像 map ()、filter ()、reduce () 这些内置函数,lambda 函数和它们搭配起来,能发挥出超强的功能!
lambda 函数的特点
- 没有名字:lambda 函数没有自己的名字,想要用它的话,要么把它赋值给一个变量,要么把它当作参数传给其他函数。
- 简洁到极致:lambda 函数一般就只有一行代码,特别适合写那些简单的小功能,简单又高效,就像给编程加上了 “快捷键”!
lambda 函数的语法格式:
lambda 参数列表: 表达式
lambda
是 Python 专门用来定义匿名函数的关键字。参数列表
里可以有零个或者好多参数,这些参数都要放在冒号前面,它们是函数的 “小助手”,帮函数完成任务。表达式
是真正施展魔法的地方,它会计算出一个结果,这个结果就是函数的返回值。
如示例:省掉了def的定义,省掉了return的返回,简写成了一行。
x = lambda a : a + 10
print(x(5)) # 15
与内置函数的联动
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y : x * y, numbers)
print(product) # 120
使用 reduce() 和 lambda 函数计算乘积 :
在上面的实例中,reduce() 函数通过遍历 numbers 列表,并使用 lambda 函数将累积的结果不断更新,最终得到了 1 * 2 * 3 * 4 * 5 = 120 的结果。
四、变量在函数中的作用域
变量的作用域是指变量起作用的范围,主要分为两类:全局变量、局部变量
1、局部变量
所谓局部变量是定义在函数体内的变量,只在函数里生效
主要作用是在函数体内部起到临时存放数据的功能,使用完毕就释放了。
def say_hello():
num = 10
print("say Hello World %d 次" % num)
say_hello()
# say Hello World 10 次
num只能在函数内部使用,如果在外部使用,就会报错
def say_hello():
num = 10
print("say Hello World %d 次" % num)
say_hello()
print(num)
2、全局变量
所谓全局变量,就是在函数内,函数外都能使用的变量,在函数外进行定义
num = 10
def say_hello():
print("say Hello World %d 次" % num)
say_hello()
print(num)
# say Hello World 10 次
# 10
将num移动到函数外面去,函数内外都可以使用了。
3、global关键字
如果我们在函数里修改了全局变量会如何,如下代码
num = 10
def say_hello():
print("say Hello World %d 次" % num)
def say_hi():
num = 20
print("say hi %d 次" % num)
say_hello()
say_hi()
print(num)
# say Hello World 10 次
# say hi 20 次
# 10
在say_hi里,给num赋值了20,在say_hi里生效了,为啥出来后,还是10呢
原来,这里num是两个不同的变量,外部的是全局变量,在say_hi里定义的num是属于say_hi的局部变量,改变的是自己的变量,当然影响不到外部的。
为什么python里不能直接修改外部变量呢,假如可以修改,那我们在函数里面定义的局部变量,再通过外部再定义一次,不就可以修改函数里的变量了么?这得多混乱,所以函数里定义的变量和外部同名也是新的局部变量
那么我们在函数里怎么去修改外部的变量呢?只要加上global关键字就可以了
global 全局变量
num = 10
def say_hello():
print("say Hello World %d 次" % num)
def say_hi():
global num
num = 20
print("say hi %d 次" % num)
say_hello()
say_hi()
print(num)
# say Hello World 10 次
# say hi 20 次
# 20