三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

【Python基础】函数使用实战操作详解

【Python基础】函数使用实战操作详解

目录

一、前言

二、Python 函数介绍

2.1 什么是函数

2.2 函数结构

三、函数基本使用

3.1 函数定义

3.2 函数如何调用

3.3 带参数的函数

3.4 函数默认参数

3.5 关键字参数

3.6 位置参数与关键字参数对比

3.7 可变参数(*args 和 **kwargs)

3.8 函数返回值

3.8.1 返回值return 说明

3.8.2 函数返回值特点

3.9 函数作用域

3.10 函数说明文档

3.11 函数的参数类型

3.12 匿名函数

3.12.1 什么是匿名函数

3.12.2 匿名函数特点

3.12.3 匿名函数基本语法

3.12.4 匿名函数带参数

3.12.5 匿名函数与其他内置函数结合使用

四、写在最后


一、前言

在日常项目开发中,函数(方法)可以说无处不在,使用函数可以为项目的开发带来很多好处,让工程代码变得可维护性更好,本篇将详细介绍一下Python中的函数使用。

二、Python 函数介绍

2.1 什么是函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

2.2 函数结构

在pythno 中,一个完整的函数结构如下:

在自定义函数时,可以参考下面的原则:

  • 函数代码块以def关键词开头,后接函数标识符名称和圆括号()

  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

  • 函数内容以冒号:起始,并且缩进。

  • return [表达式]结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

三、函数基本使用

3.1 函数定义

Python 定义函数使用 def 关键字,一般格式如下:

  • 默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的

def 函数名(参数列表): """文档字符串(可选)""" 函数体 return 返回值 # 可选

如下定义一个基本的函数并调用:

def hello() : print("Hello World!") hello() def greet(): """向指定的人打招呼""" return "Hello!" print(greet())

输出结果:

3.2 函数如何调用

定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

如下实例调用了printme()函数:

# 定义函数 def printme( str ): # 打印任何传入的字符串 print (str) return # 调用函数 printme("我要调用用户自定义函数!") printme("再次调用同一函数")

注意事项:

  • 函数必须先定义,在调用

  • 函数定义时,并不会执行,只有在调用函数时,函数体的逻辑才会运行

  • 函数中通过缩进来描述归属关系

3.3 带参数的函数

在真实的项目开发场景下,函数使用时一般会带上参数,默认情况下,带有参数的函数在调用时按顺序传入,下面这个函数,比较两个数的大小并输出

def max(a, b): if a > b: return a else: return b a = 11 b = 21 print(max(a, b))

3.4 函数默认参数

给参数设定一个默认值,外部调用时可省略这个默认参数:

  • 注意:默认参数必须是不可变对象(如None、数字、字符串),不要用列表/字典,否则会有坑

  • 默认参数必须放在没有默认值的参数列表的后面,一个函数在定义时是可以设置多个默认参数的

  • 函数调用时,如果为默认参数传递了值,则会修改默认的参数值;如果没有传递该参数,则直接使用默认值

def power(base, exp=2): return base ** exp print(power(3)) print(power(3, 3))

3.5 关键字参数

调用函数时指定参数名,顺序可任意,这种比较灵活:

  • 调用函数时,通过"形参名=值"的形式传递参数,顺序没有要求

  • 如果同时存在位置参数与关键字参数,位置参数在前,关键字参数在后

def info(name, age): return f"{name} is {age} years old" print(info(age=25, name="Bob"))

当然也可以混用,参考下面的案例

def reg_stu(name, age,gender, city): print(f"注册成功,姓名:{name},年龄:{age},性别:{gender},城市:{city}") return {"name": name, "age": age, "gender": gender, "city": city} #传参方式一:位置参数 stu = reg_stu("张三",18,"男","北京") print(stu) #传参方式二:关键字参数 stu = reg_stu(name="王林",age=28,gender="男",city="北京") print(stu) stu = reg_stu(age=20, gender="女", city="北京", name="李慕婉") print(stu) # 传参方式三:位置参数+关键字参数--->位置参数在前,关键字参数在后 stu = reg_stu("李慕婉", 20, gender="女", city="北京") print(stu)

3.6 位置参数与关键字参数对比

两者对比与适用场景:

  • 一切以代码结构清晰明了(可读性)、便于维护(维护性)为目标

  • 如果参数比较少(不超过3个),可直接使用位置参数

  • 如果参数数量较多,建议使用关键字参数

3.7 可变参数(*args 和 **kwargs)

也叫不定长参数或者可变参数,用于函数定义及调用时参数个数不确定(0个或多个)的场景

  • *args:接收任意数量的位置参数,打包成元组

  • **kwargs:接收任意数量的关键字参数,打包成字典

  • 传递的所有匹配的位置参数都会被args变量收集,这些参数会合并封装为一个元组,args是元组类型(注意并不会封装关键字参数)

  • args只是约定俗成的变量名,并不是关键字,这里可以使用任何合法的变量名(如*data)

def sum_all(*args): return sum(args) print(sum_all(1,2,3,4)) # 10 print() def show_info(**kwargs): for k, v in kwargs.items(): print(f"{k}: {v}") print(show_info(name="Tom", city="Beijing"))

如果是不定长参数与关键字参数一起使用,使用形式如下

注意:

  • 参数是以"键=值"形式传递的关键字参数,这些"键=值"参数都会被kwargs接受,并合并封装为一个字典类型

  • kwargs只是约定俗成的变量名,并不是关键字,这里可以使用任何合法的变量名(如 **options)

3.8 函数返回值

在很多情况下,在工程中定义函数的时候是需要返回值的。

3.8.1 返回值return 说明

return [表达式]语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的 return 语句返回 None。之前的例子都没有示范如何返回数值,以下实例演示了 return 语句的用法:

# 可写函数说明 def sum( arg1, arg2 ): # 返回2个参数的和." total = arg1 + arg2 print ("函数内 : ", total) return total # 调用sum函数 total = sum( 10, 20 ) print ("函数外 : ", total)

运行结果:

3.8.2 函数返回值特点

对函数返回值来说,具有如下特点:

  • 使用return返回结果,可以返回任意类型(数字、字符串、列表、函数等)。

  • 没有return或只写return,函数返回None

  • 可以返回多个值(实际是返回一个元组):

在下面的函数中,入参是一个列表

def get_min_max(lst): return min(lst), max(lst) a, b = get_min_max([1,5,3]) # a=1, b=5 print(a,b)

运行结果如下:

注意:

  • return语句只有返回功能,而没有输出打印的功能,如果要输出,需要结合print()函数来实现

  • 函数可以有多个返回值,多个返回值最终封装到元组中

3.9 函数作用域

变量的作用域指的是变量的作用范围(标识这个变量在哪里可以使用,在哪儿不可以使用)。

基本特点:

  • 局部变量:在函数内部定义的变量,称之为局部变量,只能在该函数内部使用,外部无法访问(函数执行完毕后,会自动销毁其内部局部变量)

  • 全局变量:在函数之外定义的变量,称之为全局变量,在整个文件中(包括函数内)都可以使用(通常定义在文件的顶部)

比如在下面的函数中,x是一个全局变量,函数内部和外部都可以访问

x = 10 print(x) def change(): global x x = 20 change() print(x) # 20

运行结果:

注意事项:

  • 尽量避免在函数中使用全局变量,因为会使代码难以维护和调试

  • 考虑使用函数参数和返回值来传递数据,而不是依赖全局变量

  • global主要用在程序的状态、配置和计数器等场景中

3.10 函数说明文档

函数的说明文档(Docstring)是写在函数开头,用三个引号包裹的字符串,用于解释函数的功能、参数、返回值等信息,方便调用者清楚函数的具体作用及细节。

定义一个带说明的函数

def rec(l,r): """ 根据长度和宽度,计算长方形面积 :param l: 长 :param r: 宽 :return: """ return l * r help(rec)

当执行的时候,就可以把这个函数的作用输出出来

3.11 函数的参数类型

函数支持的普通参数包括:数字、布尔、字符串、列表、元组、集合、字典等。也支持特殊的参数:函数,即函数也可以作为参数传入。

在下面的演示代码中,既有普通函数的参数传递,也有函数作为参数的传递

def circle_area(r): area = 3.14 * r ** 2 return area print(circle_area(5)) def calc_score(score_list): min_s = min(score_list) max_s = max(score_list) avg_s = round(sum(score_list) / len(score_list), 1) return max_s, min_s, avg_s s_list = [589, 609, 605, 643, 677, 455, 477, 489, 503] max_score, min_score, avg_score = calc_score(s_list) def add (x, y): return x + y def subtract (x, y): return x - y def calc(x,y,oper): return oper(x,y) result = calc(10, 20, add) print(result)

函数作为参数传递的一个典型场景就是递归,如下:

def cal(n): if n ==1: return 1 else: return n * cal(n-1) res = cal(5) print(res)

3.12 匿名函数

3.12.1 什么是匿名函数

Python 中使用lambda来创建匿名函数。

  • lambda 函数是一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式。

  • 匿名函数不需要使用def关键字定义完整函数。

  • lambda 函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用,例如在 map()、filter()、reduce() 等函数中。

3.12.2 匿名函数特点

lambda函数特点:

  • lambda 函数是匿名的,它们没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用。

  • lambda 函数通常只包含一行代码,这使得它们适用于编写简单的函数。

  • 匿名函数中可以返回结果,也可以不返回结果。返回结果时,不需要写return,表达式的运行结果就是要返回的结果。

3.12.3 匿名函数基本语法

lambda 基本格式如下:

lambda arguments: expression

参数解释:

  • lambda是 Python 的关键字,用于定义 lambda 函数。

  • arguments是参数列表,可以包含零个或多个参数,但必须在冒号(:)前指定。

  • expression是一个表达式,用于计算并返回函数的结果。

下面这个 lambda 函数没有参数:

f = lambda: "Hello, world!" print(f()) # 输出: Hello, world!

3.12.4 匿名函数带参数

带参数的匿名函数更常见,以下实例使用 lambda 创建匿名函数,设置一个函数参数 a,函数计算参数 a 加 10,并返回结果:

x = lambda a : a + 10 print(x(5))

lambda 函数也可以设置多个参数,参数使用逗号,隔开:

以下实例使用 lambda 创建匿名函数,函数参数 a 与 b 相乘,并返回结果:

x = lambda a, b : a * b print(x(5, 6))

以下实例使用 lambda 创建匿名函数,函数参数 a、b 与 c 相加,并返回结果:

x = lambda a, b, c : a + b + c print(x(5, 6, 2))

3.12.5 匿名函数与其他内置函数结合使用

lambda 函数通常与内置函数如 map()、filter() 和 reduce() 一起使用,以便在集合上执行操作。如下:

numbers = [1, 2, 3, 4, 5] squared = list(map(lambda x: x**2, numbers)) print(squared) # 输出: [1, 4, 9, 16, 25]

使用 lambda 函数与 filter() 一起,筛选偶数:

numbers = [1, 2, 3, 4, 5, 6, 7, 8] even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) print(even_numbers) # 输出:[2, 4, 6, 8]

下面是一个使用 reduce() 和 lambda 表达式演示如何计算一个序列的累积乘积:

from functools import reduce numbers = [1, 2, 3, 4, 5] # 使用 reduce() 和 lambda 函数计算乘积 product = reduce(lambda x, y: x * y, numbers) print(product) # 输出:120

在上面的实例中,reduce() 函数通过遍历 numbers 列表,并使用 lambda 函数将累积的结果不断更新,最终得到了1 * 2 * 3 * 4 * 5 = 120的结果。

补充:什么时候使用匿名函数

  • 建议使用匿名函数的情况:函数逻辑简单,只在一个地方调用(常作为高阶函数的参数)

  • 建议使用命名函数的情况:函数逻辑复杂,需要多步操作,需要多个地方重复使用或需要加文档说明的场景

四、写在最后

本文通过较大的篇幅详细介绍了Python中函数的使用,希望对看到的同学有帮助,本篇到此结束,感谢观看。

← 返回列表