07 - Python函数基础

目录

1. 函数简介
  • 函数分类
2. 函数参数
  • 形参与实参
  • 参数传递方式
  • 不定长参数
3. 函数作用域
  • 全局作用域
  • 函数作用域
  • 命名空间
4. 递归函数
5. 高阶函数
  • 闭包
  • 装饰器

课堂笔记

1. 函数简介
  • 函数(function),为实现某个功能而定义的一段可执行的代码,可对其进行重复调用,属于对象级别
1.1 函数分类
  • 自定义函数,自己定义的函数,一般仅在当前文件中使用
# 语法
def funName(parm1, parm2....):
	expresssions
  • 内置函数,又称为内嵌函数,为编程语言自身预先定义的函数,存在于函数库中,使用时自己调用即可
2. 函数参数
2.1 形参与实参
  • 形参(形式参数),相当于在函数内部定义的参数,但并为赋值
  • 实参(实际参数),定义了形参就必须传递实参,相当于为形参赋值,形参与实参数相对应
2.2 参数传递方式
  • 位置传参,实参与形参的位置相对应给出参数
def f1(name, age):
	print('name =', name, ',age =', age)
f1('葫芦娃', 10)
		
  • 关键字传参,按照形参参数名指定传递参数,参数位置可以任意
def f1(name, age):
	print('name =', name, ',age =', age)
f1(age=10, name='葫芦娃')
2.3 不定长参数
  • *形参 ,*形参 会将获取的参数保存到一个 元组 中,该参数最多只能有一个,
  • ** 形参,**形参 将获取的参数保存到一个 字典 中,其也可以接收关键字参数,将其关键字与值一一映射到字典的key-value中
  • 区别:
    • *形参 只能放在所有位置参数之后,其后面只能放关键字参数以及 **参数,其中 **参数必须放在所有参数最后
    
    def f1(a, *b, c, **d):
        print(a, type(a))       # 1 <class 'int'>
        print(b, type(b))       # (2, 5) <class 'tuple'>
        print(c, type(c))       # 70 <class 'int'>
        print(d, type(d))       # {'d': 25, 'e': 17} <class 'dict'>
    
    f1(1, 2, 5, c=70, d=25, e=17)
    
    
  • 参数解包,传递实参时在变量前加*,这样会自动将序列中参数依次传递
def f1(a, *b, c, **d):
    print(a, type(a))       # 1 <class 'int'>
    print(b, type(b))       # (2, 5) <class 'tuple'>
    print(c, type(c))       # 70 <class 'int'>
    print(d, type(d))       # {'d': 25, 'e': 17} <class 'dict'>
    
# 定义一个元组
t = (2, 5)

# 定义一个字典
d = {'d':25,'e':17}

f1(1, *t, c=70, **d)	# 参数的解包,含义与上面等价
3. 函数作用域
  • 作用域(scope),变量生效的区域
3.1 全局作用域
  • 全局作用域,即函数以外的区域,创建于程序执行时,在程序结束时销毁,定义于全局作用域的变量可在程序任意位置进行访问
3.2 函数作用域
  • 函数作用域,即函数内的区域,每次调用都会产生一个新的作用域,调用结束时会自动销毁,函数作用域内的变量只能用于该函数内部
3.3 命名空间
  • 命名空间,一个用于存储变量的字典,可用于获取当前作用域内的所有变量及值,用locals()实现
4. 递归函数
  • 一种解决问题的方式,将一个大规模的问题分解为一个个小规模的问题,直到问题无法分解时为止
  • 两要素:
    • 边界条件,即当问题分解到不能再分解时的条件,此时可直接返回结果
    • 递归条件,即当问题仍需继续分解时的条件,此时须继续执行递归函数,直到边界条件满足
# 求10的阶乘 10!
# 分解:10! = 10*9! = 10*9*8! ... = 10*9*8..*2*1! = 10*9*8...*2*1

# 定义递归函数
def fac(n):
	if n > 1:		# n > 1 为递归条件
		return n*f(n-1)
	return 1		# n == 1 为边界条件,直接返回结果

print(fac(10))		# 输出 3628800
5. 高阶函数
  • 高阶函数,接收函数作为参数 或将函数作为返回值的函数
# 定义函数
def f():
    def fn():
        print('hello world')
    return fn
    
# 执行f函数
res = f()
res()		# 打印 hello world
5.1 闭包
  • 高阶函数的一种

  • 特点:

    • 可以将数据放到闭包中,防止被随意访问,但可以被之后的函数调用,类似于Java中的私有成员变量
  • 形成闭包条件

    • 函数嵌套
    • 将内部函数作为返回值返回
    • 内部函数必须使用的外部函数的变量
5.2 装饰器
  • 作用:为已经存在的函数或对象添加额外的功能,即起到扩展功能的作用
  • 实例:
# 定义两个操作数数的加法器
def add(a, b):
    return a+b
# 定义三个操作数的乘法器
def mul(a, b, c):
    return a*b*c

# 定义高阶函数,引入装饰器,并使用不定长参数
def f(funName):

    def fn(*args, **kwargs):
        # 为当前函数funName扩展 开始执行 与 执行完毕 两条语句
        print('开始执行...')
        res = funName(*args, **kwargs)
        print('执行完毕...')
        return res

    return fn

res = f(add)
print(res(40, 50))
res = f(mul)
print(res(2, 4, 6))

在这里插入图片描述
为简化工作,python内部自定义了装饰器的使用,用@代替

# 如上,定义相同f高阶函数
......
@f
def add(a, b):
    return a+b

@f
def mul(a, b, c):
    return a*b*c

# 可直接调用,输出结果相同
print(add(40, 50))
print(mul(2, 4, 6))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值