day11-总结_function

recode

0.什么是函数,什么时候需要使用函数

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

1.函数的声明

"""
def 函数名(参数列表):
    函数体
"""

2.函数的调用

"""
1)语法:函数名(实参列表)

2)调用过程:
回到函数声明的位置
让实参给形参赋值(传参)  -  保证每个参数都有值
执行函数体
确定返回值  -  看执行函数的时候有没得有遇到return,遇到了return后面是什么返回值是什么
               没有遇到就是None
回到函数调用的位置,接着往后执行   -   这个时候函数调用表达式的值才是函数的返回值
"""

3.函数的参数

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

2)参数默认值
注意:没有默认值的参数要放在前面

3)参数类型说明:给参数赋默认值,形参名:类型

4)不定长参数(用的比较少)
*参数名  -  参数变成元祖;给这个参数赋值只能用位置参数
**参数名 -  参数编程字典;给这个参数赋值只能用关键字参数
"""

4.返回值

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

匿名函数

1.什么是匿名函数

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

2.语法

"""
lambda 形参列表: 返回值

说明:lambda   -  关键字固定写法
     形参列表 -  和普通函数形参列表一样.变量名1,变量名2...
                 (参数相关的语法中,除了':类型名'队参数类型进行说明以外,别的语法都适用)
     :        -  固定写法
     返回值   -  相当于普通函数中return后面的语句
注意:匿名函数能做的事情普通函数都能做,但是多行代码的普通函数,匿名函数没法实现
"""

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

# 函数(实参列表)     -   函数不一定是函数名,可以是通过任何方式获取的function的值
# python中,声明函数其实可以看成是类型声明类型是function的变量;匿名函数可以看成是function类型的数据(类似100是int类型的数据)
# 变量名 = lambda 形参列表: 返回值   -  通过变量名()调用匿名函数
a = 100
b = 12.5
c = 'abc'                    # 类型是str的值
d = [10, 20, 30, 'abc']      # 类型是list的值
e = {'a': 10, 'b': 20}       # 类型是dict的值
f = lambda x, y: x+y         # 类型是function的值
print(type(c), type(f))

函数是类型为function的特殊变量

1.函数作为变量

python中声明函数其实就是在声明一个类型是function的变量,函数名就是变量名.所以普通变量能做的事情,函数都能做

声明一个函数func1,有一个参数一个返回值:
func1是类型是function的变量,他里面存的数据是一个函数,函数名叫func1,有一个参数n


def func1(n):
    return n*n

2.普通变量能做的函数都能做

# 1)用一个变量给另外一个变量赋值
print('=======')
list1 = [1, 2]
list2 = list1


def func2(n):
    return n * 2


a1 = func2
print(type(a1))
print(a1(2))
# 2)变量可以作为列表的/元素,作为字典的值等
list1 = [1, 2]
dict1 = {'a': list1}


def func3(n):
    return n * 3


dict1 = {'a': list1, 'b': func3}
dict1['a'].append(100)
print(dict1)
dict1['b'](9)
print(dict1['b'](9))  # func3(9)

# 变量可以重新赋值,重新赋值后覆盖以前的值


def func4():
    print('==========')


func4()
func4 = 4
print(func4)

# 3)变量作为函数的实参
# 将函数作为实参传递给另一个函数(实参高阶函数:闭包)
num3 = [1, 2, 3]
print(sum(num3))


def func5(a):
    # a = print
    a('abc')    # print('abc')


func5(print)

##应用:sort方法的使用
# 列表.sort(key)  -  key需要穿一个类型是function的值(函数),需要这个函数有一个参数和一个返回值
#                    参数指向的是列表中的每个元素,返回值是排序的时候的比较对象
nums = ['2', '31', '5', '56', '8',  '54', '19']
nums.sort()
print(nums)
nums.sort(key=lambda x: int(x))
print(nums)
students = [{'name': 'xiaoming', 'age': 23, 'score': 90},
            {'name': 'huahua', 'age': 30, 'score': 45},
            {'name': 'zhangsan', 'age': 20, 'score': 75}
            ]
students.sort(key=lambda x: x['score'])  # 返回值(x['age'])决定列表中的元素按什么排序
print(students)


def func6(x):
    return x['name'][-1]


students.sort(key=func6)
print(students)


def my_max(list2,key=None):
    list1 = list(list2)
    num1 = list1[0]
    if key:
        for item in list1:
            if key(item) > key(num1):
                num1, item = item, num1
    else:
        for item in list1:
            if item > num1:
                num1, item = item, num1
    return num1


list2 = ['12', '1', '24', '90']
print(my_max(list2, key=lambda x: int(x)))

# i = 0 1 2 3 4
# 0 3 6 9 12
# 9
# 0
# 6
print('============')
list3 = []
for i in range(5):
    list3.append(lambda x: x*i)


print(list3[3](3))
print(list3[0](3))
print(list3[2](3))
print(list3)
"""
i = 0 list3 = [lambda x: x*i]
i = 1 list3 = [lambda x: x*i,lambda x: x*i]
...
i = 4 list3 = [lambda x: x*i,lambda x: x*i,lambda x: x*i,lambda x: x*i,lambda x: x*i]
list3[0] = lambda x: x*i
list3[0](3) = lambda x=3: 3*4  #注意哦,循环结束后 i == 4
"""

action_scope

1.什么是作用域:变量的使用范围

2.全局变量和局部变量

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

b.局部变量:在函数中声明的变量就是局部变量.
           局部变量的作用域:从声明开始到函数结束都可以使用
"""
aa = 100
def ai():
    # 不能在函数中直接修改一个全局变量的值,而是重新声明一个新的局部变量
    aa = 100   # 声明一个变量aa,这是一个新的变量,和函数外的全局变量aa不是同一个
    print(aa)

ai()
print(aa)

3.global和nonlocal

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

你可能感兴趣的:(day11-总结_function)