函数

具有一个功能或多个功能的代码块。
函数的意义:可以简化代码的重复使用率,将功能模块化。

一、内置函数

abs()是求绝对值函数

二、自定义函数
1. 语法格式
def 函数(参数名……..)
pass

pass 占位符 (当函数体没有具体内容时,可以先用pass占位)

函数被定义之后,只有调用,才能执行。

2. 参数的使用

(1)位置参数(必须参数)
一旦定义了位置参数,除默认参数以外,必须传入,而且必须按照定义顺序传入。

(2)默认参数
当调用参数的时候,不传入参数,会使用默认参数的值进行赋值。
当默认参数和位置参数一起使用时,位置参数必须放在默认参数之前
定义:
def 函数(参数名=默认参数值,……..)
pass

结论:默认参数不能绑定可变类型,只能使用不可变数据类型
默认参数使用默认值绑定,在定义的时候就绑定了。

(3)命名关键字参数
定义: def 函数名(*,参数名,参数名)
函数体
在*,后面的都是必须以 参数名=参数值 这种形式传入。
调用:如果定义了命名关键字参数,就必须以 参数名=参数值 传入参数

作用:
(1)增加程序可读性
(2)忽略参数的顺序
(3)当参数有默认值时,调用变得更简单
(4)注意,如果定义了命名关键字参数,除了有默认值的情况 ,否则同位置参数一 样,必须传入

位置参数>命名关键字参数

(4)可变参数(* args)
可变参数是用来收集所有的位置参数,形成一个元组。

定义函数时,可变(收集)函数参数中的* ,打包,将位置参数打包成元组传递给函数中的形式参数。
拆包:函数调用时,使用* 对参数进行拆包

(5)关键字参数(** kwargs)
收集所有的 命名关键字参数,打包形成字典,传递给函数的形式参数。

** 打包,将命名关键字参数打包成字典
拆包:在调用的时候,可以将字典拆包成命名关键字参数

位置参数 默认参数 命名关键字参数 可变参数 组合使用,注意:
(1)位置参数要放在最前面
(2)命名关键字参数不能和可变参数一起使用

万能参数:
def a(*args**kwargs)

位置参数 > 命名关键字参数/可变参数 > 关键字参数

三、返回值
所有的函数都有返回值
return

return None
(1)return None
(2)return
(3)没有return
使用return注意:当程序执行return,相当于函数执行结束了。
return可以返回多个值,是元组的形式返回,返回值可以使用单个变量获取,还可以使用跟返回值个数相同的变量分别获取(必须一一对应)
返回值一般采用元组的形式,不采用不采用可变类型作为返回值

四、函数值传递
.python分为可变类型值传递;不可变类型值传递

1.不可变类型的值传递

2.可变类型的值传递

五、命名空间和作用域
命名空间:可以保存名字的容器,包括的名字:变量名,函数名,类名,模块名等
在计算机中,在命名空间中存储名字是以 键–值 存储,以字典结构存储
键—-变量名 值—引用内存的对象地址

对于函数,对于变量来说,在什么地方定义?
函数:第一次写def 就决定了,存在在哪个命名空间中。
变量:当你第一次赋值的时候,决定了在哪个命名空间中。

每一种命名空间都有自己的区域,当定义的函数或者变量或者其他的命名定义到区域内之后,就意味着是对应的命名空间。

1.命名空间的分类
(1)内建命名空间:在python解释器启动的时候,就会创建的命名空间,Python解释器关闭时销毁。
内建函数 print sum
(2)全局命名空间:在读取模块定义的时候创建。当程序运行结束的时候,全局命名空间销毁。
全局变量,顶层函数
(3)局部命名空间:在函数创建的时候被创建,当函数执行之后销毁。
局部变量 函数的参数 嵌套函数
千万注意:命名空间千万不要理解成包含的关系。区别只是在于作用域不同。

2.作用域
作用域:命名空间中的名字起作用的范围。
(1)内建命名空间:所有模块。作用域最大。
(2)全局命名空间:在整个py文件中都起作用(当前模块)。如果需要使用其他全局命名空间的内容,需要import
(3)局部命名空间:只在当前函数内部有效。
作用域也不是包含关系,只是作用范围的大小。

3.访问原则
(1)LEGB原则
①python先到局部命名空间中查找x,如果没有具体的变量或者函数,才去下一个命名空间中查找,如果找到了,则停止查找
②如果在局部命名空间中找不到,到外围命名空间中查找,如果找到了,则停止,否则去下一个命名空间
③如果在外围命名空间中没找到,则到全局命名空间中去找,如果找到则停止,否则去下一个命名空间
④如果全局命名空间中仍然没有找到,则到内建命名空间中查找
⑤如果内建命名空间中仍然没有找到,则报nameError异常

(2)对名称的访问
读取:完全按照LEGB原则
修改:只从当前最小的作用域开始查找,如果找到,则修改,找不到,不会继续向上找,而是在当前的作用域中创建。
如果必须要修改,可以通过global nonlocal
删除:无论如何也只能删除当前空间的名字

(3)global nonlocal
在局部命名空间中,修改全局命名空间的内容 global

在局部命名空间中,修改外围命名空间中的变量 nonlocal

六、lambda表达式(入)
头等函数:变量和函数名一样,也可以像变量名一样,可以被赋值、被传递、可以作为返回值。
lambda表达式格式:
lambda 参数 :返回值表达式
lambda是在函数体比较简单的时候,适合使用

七、递归
函数调用自身
直接递归:A—A
间接递归:A—B—-A
递归一定要有条件,来终止递归,否则递归没有意义。
递推 回归

递归和循环:
循环的思路比较复杂;递归思路简单,执行时间比循环长。

递归深度
递归深度不仅仅包含自己调用自己,还包含调用其他函数

八、函数的注释和文档
文档:

注释
参数 : 参数的类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值