day11 匿名函数

0.什么是函数 ,什么是使用函数

  • 都实现某一特定功能的代码段的封装

1.函数的声明

"""
def 函数名 (参数列表):
    """函数说明文档"""
    函数体
"""

2.函数的调用

"""
1) 语法: 函数名(实参列表)
  1. 调用过程:(重点!!!!)
    回到函数的位置
    让实参给形参传值 - 保证每个 参数都有值
    执行函数体
    确认返回值 - 看执行函数的时候有没有遇到 return 遇到了return 后面是什么返回值就是什么
    没有遇到return 后面就是None
    回到函数调用的位置,接着网名执行 - 这个时候函数调用的返回值才是函数的返回值

"""

3.函数的参数

"""

  • 1)位置参数和关键字参数
    注意:两个同时存在的时候 位置参数要在关键字参数的前面

    1. 参数的默认值
      注意:没有默认值的要放到前面
  • 3)参数类型的说明:给参数赋默认值,形参名;类型

    1. 不定长参数
      *参数名 - 参数变成元祖 - 只能用位置参数传参
      **参数名 - 参数变成字典 - 给这个参数赋值只能关键字参数赋值

"""

4.返回值

"""

    1. 怎么确定函数的返回值(见函数调用过程)
    1. 怎么获取函数的返回值(通过获取函数调用表达式的值)
    1. 声明函数的时候,什么时候需要函数的返回值;把谁作为函数的返回值(看会不会产生新的数据)

1.什么是匿名函数

  • 没有函数名的函数就是匿名函数 (匿名函数还是函数!!!!!!)

2.语法

"""
变量名  =  lambad 形参列表 : 返回值

  • 说明: lambda - 关键字 ,固定写法
    形参列表 - 和普通函数的形参列表是一样的 . 变量名1,变量名2,(可设置默认值,)
    (参数相关的语法中(除了不可以通过 : 说明类型名以外),其他语法都可以)
    : - 固定写法
    - 返回值 - 相当于普通函数中return后面的语句
  • !! :只有 一条代码的函数 才能转换成 匿名函数

  • 注意:匿名函数做的事情普通函数都能做,但是多行代码的普通函数,匿名函数没法实现
    """

3.调用 (和普通函数一样)

  • 函数(实参列表) --- 函数不一定是函数名 可以通过任何方式获取到的类型的function的值
  • python 中,声明函数可以看成是声明类型是function的变量,
  • 匿名函数可以看成是function类型的数据,(类似100是int类型的数据)
变量名 = lambda 参数列表 : 返回值 --- 通过变量名() 来调用匿名函数

=== 函数作为变量(重点!!!!)

  • python 中声明函数其实就是声明类型是function的变量,函数名就是变量名.

  •   所有普通变量能做的事情函数都能做
    
  • 声明一个函数func1,有一个参数一个返回值;

  • func1 是类型是function的变量,他里面存的数据是一个函数,函数名叫func1 ,有一个参数n

def func1(n):
    return n*n

  • 2.普通变量能做到的函数都能做
    1. 用一个变量给另外一个变量赋值
      list1 = [1,2,3]
      list2 = list1
  • 2)变量可以作为列表或者元祖的元素,作为字典的值等
list1 = [1,2]
dict1 = {'a' : list1}

  • 3)变量作为函数的实参

!!!! 将函数作为实参传递给另外一个函数 (实参高阶函数)

def dun4(a):
    # a = print
    a('abc')  #print('abc)
    # a就是print了

应用 :sort方法高级使用

  • 列表.sort(key=) - key需要传一个类型是function的值(函数)要求有一个参数和一个返回值 参数指向的是列表中每个元素,返回值是排序的时候的比较对象
stu = [{'mingzhi':'abc','age':18,'scorre':50},
       {'mingzhi':'cde','age':115,'scorre':20},
       {'mingzhi':'abt','age':19,'scorre':80}]



stu.sort(key = lambda item:item['age'])
print(stu)

def x1(x2):    # x2 是列表 字典里的每一个 元素
    return x2['scorre']   # 返回值 每一个字典的  'scorre' 值

stu.sort(key = x1)      #   调用函数   x1   就是 字典的socorre的值
print(stu)

stu.sort(key = lambda item:item['mingzhi'][-1])
print(stu)

print(max([1,2,3,4,5,7],key = lambda x : int(x)))

# 尝试实现自己的max 函数
def yt_max(seq,key = None):
    """求一个序列的最大值"""

    # max1 =

4) 变量作为函数的返回值


# 读程序
list3 = []
for i in range(5):
    list3.append(lambda x: x*i)
"""
list = []
i = 0  

"""

list3[3](3)   #12
list3[0](3)    #12
list3[2](3)   #12

1.作用域 ;变量的使用范围

2.全局变量和局部变量

"""
a.全局变量:python中除了在函数中或者类声明的变量,都是局部变量.
        全局变量的作用域:从声明开始到文件结束的然后位置都可以使用

b.局部变量:在函数中声明变量就是局部变量.
        从声明开始到函数结束都可以使用

"""





# ==============局部变量=============
def func2(m1):
    #形参 m1  是局部变量
    print(m1)
    m2 = 200
    print(m2)

print()

aa = 100

def dunc11():
    #不能在函数中直接修改一个全局变量的值,而是重新声明一个新的局部变量
    aa = 200
    print(aa

# 3.global和nonlocal
# global:想要在一个函数中修改一个全局变量的值,或者想要在函数中声明一个全局变量

"""
1) global:想要在一个函数中修改一个全局变量的值,或者想要在函数中声明一个全局变量
global 变量名
变量名 = 值


nonlocal : 局部的局部中修改一个局部的值

nonlocal 变量名
变量名 = 值

"""
def qq():

你可能感兴趣的:(day11 匿名函数)