python学习笔记(8)---函数

一、函数

python中使用关键字def开头,后续的代码使用缩进符区分函数内容,如有返回值则使用return返回,如无返回值可直接不写

def 函数名(多个参数):	#如无可不填
	代码
	(return 值)

#实例
def demo():
	print("这是一个demo")
	return 1

二、调用

函数的调用可以直接使用 函数名() 的方法调用

注意:在python中,函数的定义必须在调用的前面(代码行数在前)因为python解析器是从头向后解析的,如果在调用函数钱未定义,会被认为是无此函数

三、参数

1、必备参数

只函数参数出必须填写的参数,位置和数量要和函数定义时的内容完全一致,如不填写会直接报错

def Demo(name, age):
	print(f"我是{name},今年{age}岁")

demo("张三", 18)

2、 默认参数

在定义函数时,为参数设置了一个初始值,此时可以直接调用,不用传入参数,但是使用函数时,会将参数按照顺序进行赋值,所有只有后面的参数才可以不填,前面的必须填写

def demo1(name="张三",age=18):
    print(f"大家好,我是{name},今年{age}岁了")
    
demo1()
# 大家好,我是张三,今年18岁了
demo1(name="李四")
# 大家好,我是李四,今年19岁了

3、不定长参数

python自定义函数中有两种不定长参数,第一种是*XXX,在传入额外的参数时可以不用指明参数名,直接传入参数值即可。第二种是**XXX,这种类型返回的是字典,传入时需要指定参数名。
加了一个星号变量在函数中作为元组导入,用于存放所有未命名的参数。家了两个星号的参数会以字典的形式导入,存放已命名的变量参数。
另外,函数的输入参数必须按照确定参数、单星号变长、双星号变长的顺序输入

def demo2(num, *args, **kwargs):
    print(num)
    print(args)
    print(kwargs)

demo2(11, 22, 33, a=18, b=19, c=20)
输出:
11
(22, 33)
{'a': 18, 'b': 19, 'c': 20}

4、变量作用域

每一个变量都有使用的范围,如果仅出现在函数内的变量,函数外就不能够使用,在函数外的变量,函数内的同名变量,也不是同一个变量;但是在函数内对函数外的变量增加一个关键字global,标明此变量为函数外的变量。

四、递归

所谓递归,即使函数自己调用自己,可以看作是一种另外意义上的while循环,必须要有打断自身无限循环的方法;
所以函数的递归有三大原则:

1、递归必须有停止条件
2、函数递归的状态改变必须是朝着停止递归的方向前进
3、函数的递归必须递归的调用自身

五、闭包

函数的闭包是只在函数内部再次定义了一个函数,外部的函数会将内部函数作为返回值return,内部函数会在修改外部函数的部分信息

def outer():
    num = 10
    def inner():
        nonlocal num  # 声明使用外部变量 num 不重新定义
        num = 100
 
    print(f'调用inner之前:{num}')
    inner()
    print(f'调用inner之后:{num}')
    return inner
 
 
func = outer()	
func()	
#输出:
#调用inner之前:10
#调用inner之后:100

六、装饰器

装饰器的本质上是一个闭包函数,但是区别在于闭包函数是先完成外部函数,再去完成内部函数,装饰器则是在现有函数的基础上,在外部增加写新的功能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值