目录
函数基本语法
含义:组织好的,可重复使用的,用来实现特定功能的代码段
函数定义
def 函数名(传入参数1,传入参数2):
函数体
return 返回值
函数调用
函数名(传入参数1,传入参数2)
注意:
- 函数定义时函数的传入参数以及返回值(包括return关键字)可以省略
- 函数定义完成之后只有经过调用才能生效
- 函数的传入参数在函数计算时用来接收函数调用时提供的数据
- 通过return关键字,就能向调用者返回数据(也称返回值)
- 函数体遇到return关键字后就表明函数在这里结束了,之后的代码不执行
- 有返回值的函数可以用一个变量接受该函数的返回值
- 若函数没有使用return关键字返回数据,那么函数也有返回值,这个返回值就是None
#创建一个函数用来统计字符串的长度
def my_len(data):
count=0
for i in data:
count+=1
print(f"字符串{data}的长度是{count}")
#创建一个字符串
str="hello world"
#调用函数
my_len(str)
形式参数和实际参数
- 形式参数:在函数定义时,提供的x、y称之为形式参数,表示声明时将要使用的参数
- 实际参数:函数调用时,提供的参数称之为实际参数,表示函数执行时真正使用的参数
注意:形式参数要和实际参数一一对应
None类型
含义:None作为一个特殊的字面量,表示:空、无意义,其有非常多的应用场景
None主要作用
- 用在函数的返回值上表示无返回值
- 用在if判断上,None等同于False(一般用于在函数中主动返回None,配合if判断做相关处理)
- 用于声明无内容的变量上(定义变量,但暂时不需要变量具有具体值,可以用None代替)
def check_test():
print("用来测试None")
flag=check_test()
print(f"函数的返回值为:{flag},具体类型为:{type(flag)}")
#函数的返回值为:None,具体类型为:<class 'NoneType'>
函数的说明文档
前言:函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低,因此我们可以给函数添加说明文档,辅助理解函数的作用
语法
"""
函数说明
:params x:形参函数x的说明
:params y:形参函数y的说明
:return 返回值的说明
"""
注意:我们可以通过多行注释的形式,对函数进行说明解释
变量的作用域
含义:变量的作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)
变量分类
- 局部变量:定义在函数体内部的变量,即只在函数体内部生效(作用在函数体的内部,在函数运行的时候临时保存数据,当函数调用完成之后立刻就销毁了局部变量)
- 全局变量:指在函数体内外都能生效的变量
global关键字
作用:主要用在函数内部将定义的变量声明为全局变量
不加global关键字
num=200
def test_a():
num=500
print(f"函数内num的值:{num}")
test_a()#500
print(f"外部num的值:{num}")#200
加global关键字
num=200
def test_a():
global num
num=500
print(f"函数内num的值:{num}")
test_a()#500
print(f"外部num的值:{num}")#500
函数的多返回值
前言:若一个函数写了2个return,那么他只会执行第一个return,原因是return可以退出当前函数,导致return下方的代码不执行
多返回值写法
#多返回值函数的定义
def 函数名:
函数语句
return 返回值1,返回值2
#多返回值函数的接收
变量1, 变量2=函数名()
注意:
- 多返回值的接收,写对应顺序的多个变量接收即可
- 多返回值的书写以及多返回值的接收时应该用逗号隔开
- 多返回值的返回类型不受限
#多返回值函数的定义
def test_return():
return "hello",666,True
#多返回值的接收
x,y,z=test_return()
print(x)#hello
print(y)#666
print(z)#True
函数的四种传参方式
前言:根据使用方式上的不同,函数有四种常见的参数使用方式
位置参数
含义:调用函数时根据函数定义的参数位置来传递参数
def user_info(name,age,gender):
print(f"您的名字是:{name},您的年龄是:{age},您的性别是:{gender}")
user_info('Tom',20,'男')
#您的名字是:Tom,您的年龄是:20,您的性别是:男
注意:传递参数和定义的参数顺序及个数必须一致
关键字参数
含义:函数调用时,通过“键=值”的形式传递参数
作用:可以让函数更加清晰,容易使用,同时也清楚了参数的顺序需求
def user_info(name,age,gender):
print(f"您的名字是:{name},您的年龄是:{age},您的性别是:{gender}")
user_info(age=20,name='Tom',gender='男')
#您的名字是:Tom,您的年龄是:20,您的性别是:男
注意:函数调用时,若有位置参数,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
缺省参数
含义:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值
作用:当调用函数时没有传递参数,就会使用默认缺省参数的值
def user_info(name,age,gender='男'):
print(f"您的名字是:{name},您的年龄是:{age},您的性别是:{gender}")
user_info("Tom",20)
#您的名字是:Tom,您的年龄是:20,您的性别是:男
user_info("Tom",20,"女")
#您的名字是:Tom,您的年龄是:20,您的性别是:女
注意:
- 函数定义时,所有的位置参数必须出现在默认参数前
- 函数调用时,若为缺省参数传值则修改默认参数值,否则使用这个默认值
不定长参数
含义:也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景
作用:当调用函数不确定参数个数时,可以使用不定长参数
不定长参数类型
位置传递参数的不定长
def user_info(*args):
print(f"您传的参数为:{args},其类型为:{type(args)}")
user_info('Tom')
#您传的参数为:('Tom',),其类型为:<class 'tuple'>
user_info('Tom',18)
#您传的参数为:('Tom', 18),其类型为:<class 'tuple'>
注意:传进去的所有参数都会被*后面的变量收集(形式参数为*变量名),他会根据传进参数的位置合并成一个元组(tuple),该变量是元组类型一般用args,这就是位置传递
关键字传递参数的不定长
def user_info(**kwargs):
print(f"您传的参数为:{kwargs},其类型为:{type(kwargs)}")
user_info(name='Tom')
#您传的参数为:{'name': 'Tom'},其类型为:<class 'dict'>
user_info(name='Tom',age=20)
#您传的参数为:{'name': 'Tom', 'age': 20},其类型为:<class 'dict'>
注意:关键字传递的不定长参数,参数是键=值形式的情况下,所有的键值对都会被**后面的变量接收(形式参数为**变量名)这个变量一般用kwargs,同时会根据键=值组成字典
匿名函数
函数作为参数传递
前言:函数除了可以将数据传入一个函数内,其实我们也可以将函数本身作为一个参数传入另一个函数内
def test_func(compute):
result=compute(1,2)
print(f"计算结果为:{result}")
def compute(x,y):
return x+y
test_func(compute)
#计算结果为:3
def test_func(compute):
result=compute
print(f"计算结果为:{result}")
def Add(x,y):
return x+y
test_func(Add(1,2))
#计算结果为:3
注意:将函数作为参数传入的作用在于传入计算逻辑,而非传入数据
lambda匿名函数
函数的定义
- def关键字,可以定义带有名称的函数
- lambda关键字,可以定义匿名函数(无名称)
注意:有名称的函数可以基于名称重复使用,无名称的匿名函数,只可以临时使用一次
匿名函数的定义
lambda 传入参数:函数体(一行代码)
注意:
- lambda是关键字,表示定义匿名函数
- 传入参数表示匿名函数的形式参数,如:x,y表示接收两个形式参数
- 函数体,就是函数的执行逻辑,匿名函数只能写一行,无法写多行代码
- 匿名函数用于临时构建一个函数,只用一次的场景
- lambda函数是直接将函数体的结果return的,所以可以直接省略return
def test_func(compute):
result=compute(1,2)
print(f"计算结果为:{result}")
def compute(x,y):
return x+y
test_func(compute)
#计算结果为:3
#通过lambda关键字,传入一个一次性使用的lambda匿名函数
test_func(lambda x,y:x+y)
##计算结果为:3