函数

Python里万物皆对象,函数也是对象。

一 函数的定义

  • 函数以 def 关键词开头,后面接 函数名 和 圆括号() 以及冒号:
  • 冒号下几行都是描述函数的具体操作内容;最后以 return 结尾;return 后若不带任何值或者表达式,则函数返回 none 。

二 函数的调用

三 函数文档



help(函数名)



四 参数

  • 什么是形参和实参?

函数定义过程中的参数是形参,在实际调用函数时传入的参数是实参。

1.位置参数

最普通的就是位置参数了。

2. 默认参数

在函数定义的时候,先给参数赋一个值,作为默认值;若调用函数时没有指定参数值,就使用默认值。



def printinfo(name, age=8):     #name是位置参数,age=8 是默认参数
    print('Name:{0},Age:{1}'.format(name, age))


printinfo('小马')  # Name:小马,Age:8
printinfo('小马', 10)  # Name:小马,Age:10

def printinfo(name, age):
    print('Name:{0},Age:{1}'.format(name, age))

# 函数调用时允许参数值的位置顺序和函数定义时不同,但需要在调用时把参数名指定出来
printinfo(age=8, name='小马')  # Name:小马,Age:8



3. 可变参数

可变参数就是指传入的参数值是任意数量,0也可;所有参数自动组装成元组

可变参数的特征是前面加一个 * 号(加了 * 的变量名会存放所有未命名的参数):




Python函数后面的三个冒号内 python函数参数带冒号_lambda表达式双冒号使用条件


4. 关键字参数

关键字参数的特征是在参数前面加两个 * 号;

所有参数自动组装成字典,可传入任意数量的参数


Python函数后面的三个冒号内 python函数参数带冒号_默认参数_02


可变参数和关键字参数的异同:

同:都可以传入任意数量的参数;

异:关键字参数传入的每个参数都需要指定一个关键字;且关键字和值组装成字典,而可变参数是组装成元组。

注意关键字参数传入参数时,不可传入重复的关键字:


Python函数后面的三个冒号内 python函数参数带冒号_默认参数_03


5. 命名关键字参数

使用场景是:想要限制关键字参数的命名的时候。

命名关键字参数的特征是:


*,参数名


没错!就是在参数名前加 * 和逗号


Python函数后面的三个冒号内 python函数参数带冒号_可变参数_04


6. 参数组合

位置参数、默认参数、可变参数、关键字参数、命名关键字参数,这5种中的4种都可以一起使用。但是参数定义的顺序必须是:

  • 位置参数、默认参数、可变参数、关键字参数;
  • 位置参数、默认参数、命名关键字参数、关键字参数。

总结:位置参数和默认参数总是排前面,关键字参数总是排最后,中间可变参数和命名关键字参数二选一。

五 函数的返回值


Python函数后面的三个冒号内 python函数参数带冒号_默认参数_05


Python函数后面的三个冒号内 python函数参数带冒号_Python函数后面的三个冒号内_06


六 变量作用域

一 局部变量和全局变量

局部变量:只能在被声明的函数内部使用

全局变量:可以在整个程序范围内使用

当局部变量想变成全局变量的时候,可以使用global 或者 nonlocal 关键字


Python函数后面的三个冒号内 python函数参数带冒号_可变参数_07


二 内嵌函数


Python函数后面的三个冒号内 python函数参数带冒号_小马_08


内嵌函数只能在函数内被调用

三 闭包


Python函数后面的三个冒号内 python函数参数带冒号_小马_09


闭包是函数式编程一种重要的语法结构,是特殊的内嵌函数;

如果在一个内部函数里对外层的非全局变量进行了引用,就称这个内部函数为闭包;通过闭包可以访问外层的非全局变量,这个作用称为 闭包作用域。

如果要修改闭包作用域内的变量需要 nonlocal关键字:


Python函数后面的三个冒号内 python函数参数带冒号_小马_10


四 递归

如果一个函数在内部调用自身,就是一个递归函数。


Python函数后面的三个冒号内 python函数参数带冒号_默认参数_11

学习资料里的递归写法

Python函数后面的三个冒号内 python函数参数带冒号_小马_12

害 我自己写的递归

Python函数后面的三个冒号内 python函数参数带冒号_可变参数_13

我写的斐波那契数列

Python函数后面的三个冒号内 python函数参数带冒号_默认参数_14


Lambda表达式

Python有2类函数:

一类就是使用def关键字定义的正规函数;一类是使用lambda关键字定义的匿名函数。

匿名函数是没有函数名的函数;它拥有自己的命名空间,无法访问参数列表以外或者全局命名空间里的参数。

一 匿名函数的定义

Lambda关键字后面的是 参数,冒号后面的是 表达式(同时也是返回值)


Python函数后面的三个冒号内 python函数参数带冒号_默认参数_15


Python函数后面的三个冒号内 python函数参数带冒号_可变参数_16


二 Lambda函数的应用

在 fileter() 和map() 函数中的应用:

  • filter(function, iterable) 过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。


Python函数后面的三个冒号内 python函数参数带冒号_可变参数_17


  • map(function, *iterables)根据提供的函数对指定序列做映射。


Python函数后面的三个冒号内 python函数参数带冒号_小马_18


  • 除此之外还可以自己定义其他的高阶函数...

python学习第7天,python打卡第7天~

AI训练营Python-阿里云天池tianchi.aliyun.com

Python函数后面的三个冒号内 python函数参数带冒号_Python函数后面的三个冒号内_19