匿名函数
匿名函数的本质还是函数,函数的所有性质都适用(关键字参数和默认值参数)
- 匿名函数的声明
lambda 参数列表:返回值
- 说明
lambda:用于声明匿名函数关键字
参数列表:参数1,参数2...
返回值:表达式(return 语句)
- 匿名函数的调用
函数名(实参列表)
my_sum = lambda *x:sum(x)
print(my_sum(1,2,3,4,5))
result:
(15, 3.0)
- python中可以有多个返回值
return (返回值1,返回值2...) #多个返回值以元组的形式返回
- 案例
func3 = lambda list2:(sum(list2),sum(list2)/len(list2))
print(func3([1,2,3,4,5]))
result:
(15, 3.0)
变量的作用域
函数的调用过程就是一个压栈的过程
- 每次调用一个函数,系统就会在内存区域的栈中开辟空间,保存函数调用过程中的数据。当调用完成后,对应的栈区间自动销毁
- 函数调用保存在栈中的数据:形参,函数中声明的变量
作用域
一个变量能够使用的范围
全局变量和局部变量
-
全局变量 声明在
函数
或类
以外的变量。其作用域为从声明到程序结束。值得注意的是,if、while和for语句中的变量也是全局变量。 - 局部变量 声明在函数或类内的变量。其作用域为从声明开始到函数结束(类结束)
- 全局变量和局部变量重名,那局部变量在作用域内使用
global和nonlocal
- global是全局变量关键字。在局部区域内声明全局变量,在它之后局部变量就成为全局变量
global 变量名
变量名 = 值
- nonlocal 是关键字,意义是在函数的子函数中声明一个变量,使它能够在整个函数中修改值
nonlocal变量名
变量名 = 值
- 案例
num1 = 100
num2 =10
def func2():
num1 = 200
global num2
num2 += 100
print(num1)
print(num2)
func2()
print(num1)
print(num2)
result:
200
110
100
110
递归函数
- 在一个函数的函数体中调用函数本身,这样的函数即为递归函数
1.找临界值(循环结束的值)
2.确定关系(如f(n)和f(n-1)层次的关系)
3.通过f(n-1)来实现f(n)
#斐波那契数列
def fibonacci(n):
if n == 1 or n == 2:
return 1
elif n > 2:
return fibonacci(n-1)+fibonacci(n-2)
else:
return False
print(fibonacci(7))
result:
13
- 在实际开发中,递归是能不用就不用。每递归一次就开辟一次空间,消耗内存。
模块和包的使用
- 函数:对实现某一特定功能的代码块的封装
- 模块:将变量、函数和类进行封装,一个py文件都是一个模块
- 引用其他的模块
a. import 模块 -- 导入全部内容,通过模块.内容使用
b. from 模块 import 模块中内容 -- 导入特定的内容,可直接使用内容
c. from 模块 import * -- 导入模块中全部内容
- 将不希望被别的模块导入或执行的代码放到if语句中。需要导入的放if外。
每个模块都有一个__name__属性,该属性的值默认就是当前模块的文件名
但是在当前模块被执行的时候,__name__属性的值就为__main__
- 导入模块重命名
import 模块 as 新名字
from 模块 import 内容 as 新名字
网友评论