【Python】笔记13:函数

函数是可重复使用、实现特定功能的代码段。

定义函数时不会执行函数,函数调用时才会执行。

定义函数

使用def语句定义函数,括号里可定义参数,

函数体内缩进,至少有一句语句代码,若没有可用pass占位。可以有return语句,

函数体内第一句语句之前可以注释函数说明(help(函数名)可查看函数说明)。

def 函数名():
    语句 ...


def 函数名(参数):
    """ 函数说明 """ 
    语句 ...
    return 表达式


# 空函数:pass占位,否则报错
def 函数名():
    pass

return语句

  • 没有return语句,默认返回None(即没有返回值)。执行完最后一个语句后,退出函数。
  • 有return语句,返回值为表达式结果,多个返回值可用元组。执行了return语句,退出函数。
  • 只有return,没有表达式,返回None。执行了return语句,退出函数。

参数           【函数可以有参数,也可以没有参数,按需要定义】

定义函数时

(形参)

函数调用时

(实参)

必需参数没有默认值。也称位置参数。

必须有该参数。可用其定义的关键字指定

可选参数

有默认值。也称默认参数。

一定在必需参数后面

若有该参数,用其定义的关键字指定。

若没有,将使用默认值。

不定长参数

*args(args可自定义)

表示位置参数

多个未命名的变量参数。

在函数体内以元组形式呈现

不定长参数

**kwargs(kwargs可自定义)

表示关键字参数

多个命名的变量参数(或者**字典名)。

在函数体内以字典形式呈现

函数调用时,多个必需参数,需注意:(注:用关键字指定的参数,也称关键字参数)

1、必需参数,与定义时的位置保持一致,且一定在关键字参数之前;

2、若必需参数使用关键字指定,定义在其后面的所有参数一定也用关键字指定;

3、只要是关键字参数(不论定义时是必需还是可选),它们之间的位置可以任意,但一定在必需参数(没有用关键字指定)的后面。

调用函数    【必须有圆括号】

函数名( )

函数名(参数1, 参数2, ...)

函数作用域

LEGB规则:(Local -> Enclosed -> Global -> Built in)

查找变量/"名称"时的规则,先在函数或类的方法内部,然后嵌套函数,再模块的全局变量,最后在Python内置模块, 没有则报错“NameError”。

嵌套函数中,若在内层函数修改并使用外层函数的变量,内层函数内使用nonlocal先声明:nonlocal 变量名。

若在函数内修改并使用全局变量,函数体内使用global先声明:global 全局变量。

使用 nonlocal、global 需注意,避免影响其他使用该变量的代码执行结果。



标准函数

abs、round、int、float、str、print、input等。

print              【标准输出函数。将其参数打印在控制台。】

打印时多个参数默认中间空格隔开,可用sep关键字参数修改分隔字符。

默认打印结束会使用换行,可用end关键字参数修改结束字符。

没有参数,为换行。

input                 【标准输入函数。等待用户通过键盘输入文本。】

有一个可选参数,用于提示用户输入。返回字符串。

递归函数

1、执行函数的过程中,调用自身函数;

2、必须有终止条件,避免无限递归,陷入死循环;

3、若规模很大,运行效率不高,可用尾递归优化一般递归;

4、尾递归:特殊的递归函数。最后一步没有任何其他运算,只是调用自身函数。

     Python解释器不支持尾递归优化,可以通过其他方式手动实现。

# 递归,简单样式
def 函数名(参数):

    if 终止条件:
        return 表达式
    else:
        return 函数名(新参数)


# 函数调用
函数名(参数)

嵌套函数

1、函数内有另一个函数;

2、一般的嵌套函数,内层函数需要在外层函数中调用;

3、闭包是特殊的嵌套函数:

  • 外层函数返回的是内层函数名(无括号);
  • 内层函数可使用外层函数的参数和变量;
  • 外层函数调用后得到返回的内层函数再调用(即执行内层函数);
  • 可用于编写惰性求值或延迟求值的代码,也可用于在一系列函数调用中保持某个状态。
# 闭包,简单样式
def 函数名1():
    
    def 函数名2():
        语句...

    return 函数名2


# 函数调用
变量名 = 函数名1()                # 获得返回的内层函数
变量名()                         # 执行内层函数

高阶函数

1、函数的参数接收变量,也接收另一个函数(无括号);

2、可以把接收的函数作为结果值返回;

3、常用高阶函数:

参数返回说明
map函数、可迭代对象可迭代对象每个元素依次调用函数进行处理
functools.reduce函数、可迭代对象每个元素依次调用函数进行累积计算
filter函数(返回布尔类型)、可迭代对象可迭代对象每个元素依次调用函数进行判断,筛选出符合条件的元素
sorted可迭代对象、key函数、reverse(布尔类型)可迭代对象每个元素依次调用函数,根据key函数结果进行排序

匿名函数:lambda

1、语法:lambda 参数 表达式

2、没有函数名;只有一个表达式;没有return语句,但有返回值(即表达式的结果)

3、可以多个参数,lambda 参数1, 参数2 表达式

        也可以没有参数,lambda 表达式

        也可以是默认参数,lambda 参数=值表达式

        也可以不定长参数,lambda *args**kwargs表达式

4、使用:与高阶函数配合使用、赋值给变量(作为普通函数使用)

         若需要赋值,建议使用 def 定义函数 而不是lambda。

# 与高阶函数配合使用。例如:map
list(map(lambda x:x**2, [3,4,5,3,6]))           # 返回:[9, 16, 25, 9, 36]

# 赋值给变量(作为普通函数使用)
square = lambda x:x**2
square(3)                                       # 返回:9
[square(x) for x in [3,4,5,3,6]]                # 返回:[9, 16, 25, 9, 36]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值