[关闭]
@SuHongjun 2020-11-17T14:06:01.000000Z 字数 1243 阅读 1270

Python-Day 13:函数--基础知识2

Python 2020春季学期


匿名函数 / lambda 表达式

lambda 表达式的语法格式如下:

  1. name = lambda [list] : 表达式 #[list] 作为可选参数,等同于定义函数时指定的参数列表;

几个例子:

  1. add = lambda x,y:x+y
  2. print(add(3,4))
  3. #相当于:
  4. def add(x, y):
  5. return x+ y
  6. print(add(3,4))
  7. #-----------------------------------
  8. res = (lambda x, y: x+y)(1, 2)
  9. print(res) #输出3
  10. #相当于:
  11. f = lambda x, y: x+y
  12. res = f(1, 2)
  13. print(res)
  14. #相当于:
  15. def add(x,y):
  16. return x+y
  17. f = add
  18. res = f(1, 2)
  19. print(res)

匿名函数 / lambda表达式的实质是:参数化的表达式

局部变量

  1. def f1(x):
  2. a = x**2 #a就是局部变量
  3. return a
  4. a = 6 #此处a为全局变量
  5. y=f1(3)
  6. print(y)
  7. print(a) #此处a也为全局变量
  8. #函数体内不用global、nonlocal声明的变量就是局部变量

global关键词:

  1. def f1(x):
  2. global a #global 声明变量a是全局变量
  3. a = x**2 #此a就不是局部变量,而是全局变量
  4. return a
  5. a = 6 #此处a为全局变量
  6. y=f1(3)
  7. print('y=',y)
  8. print('a=',a) #此处a也为全局变量

函数的嵌套定义:

  1. def f1(x):
  2. global a
  3. a = x**2 #此a就不是局部变量,而是全局变量
  4. def ff(a1): #此处的ff()就是函数嵌套定义
  5. return a1+2
  6. return ff(a) #ff()只能在f1()的函数体内被调用
  7. y=f1(3)
  8. print('y=',y)
  9. print('a=',a) #此处a也为全局变量

nonlocal 关键词:在嵌套的内函数中引用外函数中局部变量的方法

  1. def f1(x):
  2. a = x**2 #此a是局部变量
  3. #nonlocal a #这种声明方法肯定报错,nonlocal只能在嵌套定义的内部函数使用
  4. def ff(a1):
  5. nonlocal a # <-----注意此处,a不是局部变量,但也不是全局变量,而是外部函数的局部变量
  6. print('a=',a,'a1=',a1)
  7. a = a1 // 2 #a同上
  8. print('a=',a,'a1=',a1)
  9. return a+a1 #a同上
  10. print('a=',a)
  11. return ff(a)
  12. a = 10 #此处a为全局变量
  13. print('a=',a) #此处a:为全局变量
  14. y=f1(3)
  15. print('y=',y)
  16. print('a=',a) #此处a:为全局变量

函数的嵌套定义、nonlocal关键词的使用是函数高级特性比如说闭包的基础

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注