文章目录
前言
本章内容为函数的基础知识点和函数的用法
函数: 对某一个特定的功能或者代码快进行封装,在需要使用该功能时直接调用
一、定义函数
函数代码块以def
关键词开头,后接函数标识符名称和圆括号()
。
例子:老奶奶每天都要骑自行车去菜市场买菜,买菜的时候讨价还价,买完回家。
print("1.其自行车")
print("2.去菜市场")
print("3.讨价还价")
print("4.回家")
但是,假如今天孙子闹脾气,要哄孙子。
print("1.其自行车")
print("2.去菜市场")
print("3.讨价还价")
print("4.回家")
print("哄哄孙子")
第二天又要跟老头吵架
print("1.其自行车")
print("2.去菜市场")
print("3.讨价还价")
print("4.回家")
print("打老头")
但是每天都要出去买菜,我们就可以把买菜定义成函数
def buy_cai():
print("1.骑自行车")
print("2.去菜市场")
print("3.讨价还价")
print("4.回家")
我们就可以简化后续代码:
buy_cai()
print("哄哄孙子")
buy_cai()
print("打老头")
1.骑自行车
2.去菜市场
3.讨价还价
4.回家
哄哄孙子
1.骑自行车
2.去菜市场
3.讨价还价
4.回家
打老头
二、函数的参数
定义函数的时候,可以根据需求在def ()
的括号中添加参数,来举个例子。
定义一个函数来实现两个数之间的四则运算,(基本的+,-,*,/
功能)。
我需要两个参数来接收需要计算的两个数字,还需要一个参数来接收我的运算符,如:
def jisuan(a, opt ,b):
if opt == "+":
print(a + b)
elif opt == "-":
print(a - b)
elif opt == "*":
print(a * b)
elif opt == "/":
print(a / b)
else:
print("你瞎写")
jisuan(99, "+", 66)
但是参数有几种分类,实际参数和形式参数。实际参数又分位置参数和关键字参数;形式参数又分为默认值参数和动态参数。下面来介绍这几种类型参数。
1.实际参数
1.1位置参数
上面的jisuan(a, opt ,b)
函数中的a
、opt
、b
就是位置参数,顾名思义位置参数就是按照位置传递信息。
来定义一个中午吃什么的函数:有主食、菜,再来个汤和饭后甜点
def chi(zhu, fu, tang, tian):
print(zhu, fu, tang, tian)
我中午想吃:大米饭、韭菜炒鸡蛋、西湖牛肉羹、布朗尼。按照函数的参数定义的位置来传递我的数据就可以这样:
chi("大米饭", "韭菜炒鸡蛋", "西湖牛肉羹", "布朗尼")
1.2关键字参数
顾名思义,按照关键字的内容传递参数。
比如上面的吃饭函数,
chi(zhu="大米饭", tang="西湖牛肉羹", fu="烤牛肉", tian="布朗尼")
1.3混合参数
用关键字来传递数据,可以不按参数的顺序定义。
当然我们也可以混合使用:
chi("大米饭", "韭菜炒鸡蛋", tang="西湖牛肉羹", tian="哈根达斯")
需要注意的是:混合参数(位置参数在前,关键字参数放后面)
2.形式参数
2.1默认值参数
在函数声明的时候给变量一个默认值,如果实参不传递信息,此时默认值生效,反之则为实参所传递的信息。默认值参数在位置参数后
声明一个函数,统计班里同学的姓名、年龄、性别。但是在理工科班级男生比较多,女生比较少。我们可以,在性别设置默认值参数为男。如:
def lurn(name, age, gender="男"):
print(name, age, gender)
lurn("张三", 18)
lurn("李四", 18)
lurn("王五", 18)
lurn("赵敏", 18, "女")
lurn("陈", 18, "女")
张三 18 男
李四 18 男
王五 18 男
赵敏 18 女
陈 18 女
2.2动态传参
在函数中,动态传参指的是通过一种机制,使函数能够接受任意数量的参数,而不需要提前声明参数的个数。有两种方式实现动态传参。
2.2.1*args
使用*args
:这种方式允许函数接受任意数量的位置参数,它会将这些参数打包成一个元组传递给函数。在函数定义时,*args表示可变数量的位置参数。
def chi(*food): # *表示位置参数的动态传参,*接收到的值会被统一放在一个元组里
print(food)
chi("大米饭", "紫菜蛋花汤")
('大米饭', '紫菜蛋花汤')
2.2.2**kwargs
使用**kwargs
:这种方式允许函数接受任意数量的关键字参数,它会将这些参数打包成一个字典传递给函数。在函数定义时,**kwargs
表示可变数量的关键字参数。
def chi(a, b, *args, c="哈哈", **kargs):
args = list(args)
print(a, b, args, c, kargs)
chi(1, 2, 3, 4, 5, c="haha", hello=1, hello1=2)
1 2 [3, 4, 5] haha {'hello': 1, 'hello1': 2}
在这里做个总结,顺序:位置 > *args > 默认值 > **kwargs
3.函数的返回值
函数执行之后,会给调用方一个结果,这个结果就是返回值return
def func(a, b):
return a + b
ret = func(12, 12)
print(ret**3)
13824
return
可以返回值、计算式、元组、列表、bool值等等。- 如果只输入一个
return
默认返回None
。 - 函数只要执行到了return,函数就会立即停止并返回内容,函数内的return的后续代码不会执行
def func(a, b):
print(a + b)
return # 会让程序停止,后续代码不会执行,有点像循环里的break
print(1) # 并没有打印数字1
ret = func(12, 12)
print(ret)
24
None
4.匿名函数
在Python中,匿名函数通常使用lambda
关键字来创建。匿名函数也被称为lambda函数,它是一种简单的、一行的函数,常用于临时需要一个小函数的地方。匿名函数的语法如下:
lambda 参数1,参数2,…: 返回值
lambda
是关键字,表示你正在定义一个匿名函数。arguments
是函数的参数,可以有零个或多个参数,参数之间用逗号分隔。expression
是函数的返回值,通常是一个表达式,匿名函数会计算这个表达式并返回结果。
add = lambda x, y: x + y
print(add(3, 4)) # 输出: 7
5.高阶函数
在Python中,高阶函数是指可以接受一个或多个函数作为参数,或者返回一个函数作为结果的函数。
5.1返回函数作为结果
也可以叫做函数的嵌套。函数可以作为返回值进行返回,并在外部调用
def func():
b = 10
def inner():
print(123)
print(inner)
return inner # ******此时func()的返回值为 inner函数*******
b1 = func() # b1此时就是嵌套的函数inner
b1()
print(b1)
5.1函数作为参数传递
高阶函数也可以接受其他函数作为参数,用于自定义行为。
def func1():
print(1)
def func2():
print(3)
def func3():
print(5)
print(4)
func3()
print(6)
print(2)
func2()
print(7)
func1()
1
2
3
4
5
6
7