2018-08-30 day9-函数2

匿名函数

匿名函数的本质还是函数,函数的所有性质都适用(关键字参数和默认值参数)

  • 匿名函数的声明
    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 新名字

你可能感兴趣的:(2018-08-30 day9-函数2)