Python3函数

一、函数

1. 函数的命名规则

2. 函数的定义与使用

2.1 定义函数

2.2 调用函数

2.3 形参与实参

2.4 可更改与不可更改对象

2.5 函数返回值

3. 函数的参数

3.1 必需参数

3.2 关键字参数

3.3 默认参数

3.4 可变参数

4. 变量的作用域

5. lambda匿名函数

6. 递归函数

7. 高阶函数

8.内置函数

8.1 filter()函数

8.2 map()函数

8.3 reduce()函数


一、函数

  • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
  • 所有的函数都有返回值。如果你没有告诉它们该返回什么,将返回None。
  • def语句中,位于函数名后面的变量通常称为形参,而调用函数时提供的值称为实参。
  • 字符串以及数和元组是不可变的,意味着不能修改它们(即只能替换为新值)。
  • 函数的作用:减少重复代码;方便修改,更易扩展;保持代码一致性。

1. 函数的命名规则

  • 函数名必须以下划线或字母开头,可以包含任意字母、数字和下划线的组合。
  • 不能使用任何标点符号。
  • 函数名区分大小写。
  • 函数名不能是保留字。

2. 函数的定义与使用

2.1 定义函数

Python定义函数使用def关键字,后面必须跟函数名和带括号的形式参数列表和冒号。然后,在缩进块中编写函数体,函数的返回值用return语句返回。

函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量。

格式:def 函数名(参数列表):

                  函数体

2.2 调用函数

调用函数通过函数名和带括号的实参列表

2.3 形参与实参

形参:形式参数,不是实际存在,是虚拟变量,在定义函数和函数体时使用形参,目的时在函数调用时接收实参(实参个数,类型与实参一一对应)

实参:实际参数,调用函数时传给函数的参数,可以是常量、变量、表达式、函数,传给形参

2.4 可更改与不可更改对象

在Python中,字符串、数字和元组是不可更改的对象,而列表和元组是可更改的对象

2.5 函数返回值

可用return 表达式语句用于把函数作为结果值返回。所有的函数都有返回值。

如果没有return语句,默认会返回一个None。

如果return可以返回多个值,会将多个值封装成一个元组返回。

3. 函数的参数

3.1 必需参数

必需参数必须以正确的顺序传入参数,调用时的数量必须和声明时的一样。

3.2 关键字参数

函数调用使用关键字参数来确定传入的参数值,允许函数调用时参数顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。

3.3 默认参数

调用函数时,如果没有传递参数,则会使用默认值。

设置默认参数时需注意:必选参数在前,默认参数在后,否则解释器会报错。

3.4 可变参数

参数前面加一个星号将提供的所有值都放在一个元组中,存放所有未命名的变量参数。如果在函数调用时没有指定参数,则为一个空元组。

参数前面加两个星号会以字典的形式导入,该字典包含了所有未出现在形参列表中的关键字参数。

加一个星号的变量名会存放所有的未命名参数,加两个星号的变量名会存放所有的命名参数

函数参数位置顺序:关键字参数,默认参数,*args,**kwargs

4. 变量的作用域

  • L:local,局部作用域,即函数中定义的变量;
  • E:enclosing,闭包函数外的函数中(嵌套的父级函数的局部作用域),即包含此函数的上级函数的局部作用域,但不是全局的
  • G:global,全部作用域,就是模块级别定义的变量
  • B:built-in:内置作用域系统固定模块里面的变量

优先级:L-->E-->G-->B

全局变量在局部作用域可以访问,但不能被修改

  • 变量查找顺序:L-->E-->G-->B
  • Python 中只有模块,类以及函数才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。

当内部作用域想要修改全局作用域的变量时,就要使用global关键字;

当内部作用域想要修改嵌套作用域的变量时,就要使用nonlocal关键字。

5. lambda匿名函数

匿名函数lambda在创建时不需要命名,所以叫做匿名函数

用lambda关键字表示,冒号左侧表示函数接收的参数,冒号右侧表示函数的返回值

6. 递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

递归函数必须有一个明确的结束条件;递归效率不高,递归层次过深会导致栈溢出(在计算机中,函数调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归层次过深会导致栈溢出)

 

7. 高阶函数

函数名可以进行赋值。函数名既可以作为函数参数输入;也可以作为函数返回值

8.内置函数

8.1 filter()函数

filter()函数用于过滤序列,它接收两个参数(一个函数和一个序列)。

filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。Python2返回列表,Python3返回迭代器对象。

8.2 map()函数

map()函数接收两个参数(一个函数和一个序列)。map()将传入的函数依次作用到序列的每个元素,并把结果作为新的序列返回。Python2返回列表,Python3返回迭代器对象。

8.3 reduce()函数

reduce()函数接收两个参数(一个函数和一个序列),把一个函数作用在一个序列上,把序列前两个数结果继续和序列的下一个元素作累积计算。reduce的结果就是一个值。Python3中必须通过from functools import reduce调用模块。

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值