python第二阶段学习-函数

函数

函数结构

自定义函数写上帮助内容,便于自己和他人阅读:
函数名称.help()调用

def 函数名称(参数):
    """
    设置参数,可用help()调用显示
    :param 参数:
    :return:
    """
    代码1
    代码2
    return 返回值

函数作用域

全局变量以及局部变量

函数使用外部变量时,可以传参,要么进行全局变量

data = 100  # 口袋里面的money

def bonus(value):
    """奖金"""
    global data
    # 计算奖金和口袋的总余额
    data = data + value
    print(f'口袋余额{data}元')

def fine(value):
    """罚款"""
    global data
    data = data - value
    print(f'口袋余额{data}元')

bonus(1000)
fine(9999)

当使用可变数据类型,不需要global申明

data = []

def a():  # 当使用的是可变数据类型,不需要global声明
    # global data
    data.append(1)
    pass

a()
print(data)

#--------------------------------------------------
输出结果:
[1]

函数传参

多参数传参

def func(a, c):
    return a, c

a, c = func(1, 2)
print(a, c)

默认值传参以及关键字传参

传参
name = '小明'
age = 18
gender = '女'

# gender='男' 设置默认值  默认值后面跟默认值
def func(name,age,  gender='男'):  # 传参:位置 顺序 个数
    print(name, age, gender)

# 调用
func(name,age=age)

输出结果为:

小明 18

不确定参数传参

*args:不定长传参

def burden(*args):  # 打包和不打包
    print(f"爆炒土豆里面的配料有 {'/'.join(args)}")
    print(f"爆炒土豆里面的配料有 {args}")

burden('辣椒粉', '番茄酱', '葱丝', '孜然')  # 不知道里面会加什么

kwargs:不定长关键字传参
键值对kwargs:key=value
其内部的结果:kwargs:是字典

# **kwargs  不定长关键字参数

def burden(**kwargs):
    print(kwargs)

# 需要以关键字传入
burden(data1='辣椒粉', data2='番茄酱', data3='葱丝', data4='孜然') # **kwargs的关键字传入
# 键值对传入是用等号赋值的形式,而不是字典的形式,传入的不是字典而是键值对

递归

递归特点:

1.函数内部调用自己
2.必须要有出口,无限循环的是报错,不算递归

def total(data):
    if data == 1:
        return 1
    return data + total(data - 1)

print(total(5))

匿名函数

匿名函数定义

匿名函数作用: 优化代码 减少内存的使用 匿名函数一般使用在函数的里面
从其他函数转换而来 函数的简易写法
函数只能有一个返回值 ,只能有一句代码

匿名函数结构

原函数:

def func(a, b):
    return print(a + b)

func(1, 2)

匿名函数

# (lambda a, b: print(a + b))(1, 2)
func = (lambda a, b: print(a + b))
func(1, 2)

匿名函数应用

常作为函数传参使用

list1 = [['a-1', 10], ['d-2', 80], ['c-6', 20], ['b-0', 40]]
list1.sort(key=lambda i: i[0][2])  # 根据数据的具体值进行排序
# 其中i为传入参数,i[0][2]为输出参数
print(list1)
  1. map()函数映射
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# map(匿名表达式,需要映射的数据)
print(list(map(lambda x: str(x+1), list1)))  # 可迭代对象
print(list1)

3.其他函数

from functools import reduce
# 从 functools库里面 导入(import) reduce

list1 = [1, 2, 3, 4]  # sum()
print(reduce(lambda a, b: a * b, list1))

# filter 过滤数据
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(filter(lambda s: s % 2 != 0, list1)))

函数嵌套

一闭三器

装饰器

装饰器是函数嵌套,在一个函数中有另一个函数,函数只是声明
其目的是在不改变源代码的情况下为源代码增添新功能

def func(fun1):

    def inner(*args):
        res = fun1(*args)
        return res

    return inner


# @func  # fun1 = func(fun1)
# def fun1(a, b):
#     return a + b

@func
def fun1(a, b):
    c = a + b
    return c


@func  # 2
def fun2(a, b, c):
    c = a - b + c
    return c

print(fun1(1, 2))
print(fun2(2, 1, 3))

其具体流程是调用fun1(1,2)时,现在外面寻找fun1=func(fun1),调用func函数。在里面遇到inner函数的声明,没有运行里面的代码,然后返回的时候调用了inner函数,再运行里面的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值