美文网首页
day10Function

day10Function

作者: y_j杨健 | 来源:发表于2019-01-05 17:12 被阅读0次
            lambda  匿名函数

1.普通函数:
def 函数名(参数列表):
函数体

2.匿名函数: - 还是函数,只是声明的格式和普通函数不一样 ;只能适用于简单的函数

函数名 = lambda 参数列表:返回值

说明:
函数名 -- 变量名
lambda -- 关键字
参数列表 -- 参数名1、参数名2....
: -- 固定写法
返回值 -- 相当于只有一个return语句的函数体

匿名函数和普通函数调用一样:函数名(实参列表) 也支持位置参数,关键字参数,参数默认值,不定长参数
匿名函数不能通过添加:类型名来说明参数类型

位置参数 和 关键字参数 参数默认值
func1 = lambda x=10,y=30:x+y
func1(10,2)
print(func1(10,2))
print(func1(x=20,y=30))
不定长参数
func2 = lambda *nums: sum(nums)
print(func2(1,2,3,5,8))


print('==========')
func3 = lambda x:print(x)
print(func3(100))

def func3(x):
    # x = 100
    return print(x)  # 100

print(func3(100))

# 100

声明函数就是声明一个类型是function的变量, 函数名实质就是变量名。

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

  1. 全局变量和局部变量
    a. 全局变量 - 没有声明在函数或者类中的变量都是全局变量
    全局变量的作用域是从声明开始,到整个文件结束

b. 局部变量 - 声明在函数或者类中的变量就是局部变量
局部变量作用域是从声明开始到函数结束

总结:当我们调用函数的时候,系统会自动在栈区间专门为这个函数开辟一块独立的内容空间
用来保存在函数中声明的变量(形参也是属于声明在函数中的变量)当函数调用结束后
这个函数对应的栈区间会自动销毁 --- (函数调用过程是一个压栈的过程)

变量a就是全局变量

a = 100
print(a)
  1. 全局变量
    这的y也是全局变量
for y in range(3):
    print(y)
print('外面:',y)

def func2():
    print('函数里面:',y)
func2()
  1. 局部变量
    a. 函数的形参就相当于声明在函数中的变量,所以是局部变量
def func3(num1):
    print(num1)
func3(10)

print(num1) 局部变量不能再函数外面使用

函数中的nums,max1和item都是局部变量

def func4(*nums):
    max1 = nums[0]
    for item in nums:
        if item > max1:
            max1 = item
    print(max1)
    return 10
# func4(1,2,3,85,6,4,22)
print(func4(1,2,3,85,6,4,22))
# print(item)
  1. 如果全局变量和局部变量同名,那么在局部变量的作用域中使用局部变量,在外边使用全局变量
  1. global关键字
    在函数中说明一个变量是全局变量
    global 变量名
    变量名 = 值

注意:只能在函数中使用


bb = 111

def func4():
    global bb   # 在函数中声明一个全局变量
    bb = 222
    print(bb)
func4()
print(bb)

  1. nonlocal
    想要在局部中的局部中 修改 局部变量的值 (一般不用)
    nonlocal 局部变量名
    局部变量名 = 值

def func11():
    abc = 123
    # print('func11',abc)

    def func22():
        nonlocal abc
        abc = 333
        print('func22',abc)
    func22()   #  func22 333

    print('func11',abc)

func11()
# print(func11())

list1 = []
for i in range(5):
    list1.append(lambda x:x*i)
# print(list1)
print(list1[0](3))  #  12  i = 4
print(list1[3](3))   #  12
# list1 = [lambda x:x*2]
# print(list1[0](100))    #  200
# print(list1)

4.变量作为函数的返回值
函数1作为函数2的返回值 - 函数2是返回值高阶函数

def operation(char):
    # char = '-'
    if char == '+':
        def func1(*nums):
            return sum(nums)
        # 将函数作为函数的返回值
        return func1
    elif char == '-':
        def func2(*nums):
            # (10, 3, 4)
            # 如果没有传参
            if not nums:
                return 0

            sum1 = nums[0]
            for index in range(1, len(nums)):
                sum1 -= nums[index]
            return sum1

        return func2


print(operation('+')(1, 2, 3, 4))
print(operation('-')(10, 3, 4))

========排序原理===========

def yt_sorted(iterable, key=None, reverse=False):
    list1 = list(iterable)
    if key:
        for x in range(len(iterable) - 1):
            for y in range(x + 1, len(iterable)):
                item1 = list1[x]
                item2 = list1[y]
                if key(item1) > key(item2):
                    list1[x], list1[y] = list1[y], list1[x]
    else:
        # 快速排序
        for x in range(len(iterable) - 1):
            for y in range(x + 1, len(iterable)):
                if list1[y] < list1[x]:
                    list1[x], list1[y] = list1[y], list1[x]
    if not reverse:
        # 从小到大
        return list1

    else:
        # 从大到小
        return list1[::-1]



print(yt_sorted([1, 20, 9, 10]))
# print(sorted(all_student, key=lambda x: x['age']))
print(yt_sorted(all_student, key=lambda x: x['age'], reverse=True)) 

相关文章

  • day10Function

    1.普通函数:def 函数名(参数列表):函数体 2.匿名函数: - 还是函数,只是声明的格式和普通函数不一样...

网友评论

      本文标题:day10Function

      本文链接:https://www.haomeiwen.com/subject/fscdrqtx.html