目录
函数基本语法
函数定义
函数调用
形式参数和实际参数
None类型
None主要作用
函数的说明文档
语法
变量的作用域
变量分类
global关键字
不加global关键字
加global关键字
函数的多返回值
多返回值写法
函数的四种传参方式
位置参数
关键字参数
缺省参数
不定长参数
不定长参数类型
位置传递参数的不定长
关键字传递参数的不定长
匿名函数
函数作为参数传递
lambda匿名函数
函数的定义
匿名函数的定义
含义:组织好的,可重复使用的,用来实现特定功能的代码段
def 函数名(传入参数1,传入参数2):
函数体
return 返回值
函数名(传入参数1,传入参数2)
注意:
#创建一个函数用来统计字符串的长度
def my_len(data):
count=0
for i in data:
count+=1
print(f"字符串{data}的长度是{count}")
#创建一个字符串
str="hello world"
#调用函数
my_len(str)
注意:形式参数要和实际参数一一对应
含义:None作为一个特殊的字面量,表示:空、无意义,其有非常多的应用场景
def check_test():
print("用来测试None")
flag=check_test()
print(f"函数的返回值为:{flag},具体类型为:{type(flag)}")
#函数的返回值为:None,具体类型为:
前言:函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低,因此我们可以给函数添加说明文档,辅助理解函数的作用
"""
函数说明
:params x:形参函数x的说明
:params y:形参函数y的说明
:return 返回值的说明
"""
注意:我们可以通过多行注释的形式,对函数进行说明解释
含义:变量的作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)
作用:主要用在函数内部将定义的变量声明为全局变量
num=200
def test_a():
num=500
print(f"函数内num的值:{num}")
test_a()#500
print(f"外部num的值:{num}")#200
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',),其类型为:
user_info('Tom',18)
#您传的参数为:('Tom', 18),其类型为:
注意:传进去的所有参数都会被*后面的变量收集(形式参数为*变量名),他会根据传进参数的位置合并成一个元组(tuple),该变量是元组类型一般用args,这就是位置传递
def user_info(**kwargs):
print(f"您传的参数为:{kwargs},其类型为:{type(kwargs)}")
user_info(name='Tom')
#您传的参数为:{'name': 'Tom'},其类型为:
user_info(name='Tom',age=20)
#您传的参数为:{'name': 'Tom', 'age': 20},其类型为:
注意:关键字传递的不定长参数,参数是键=值形式的情况下,所有的键值对都会被**后面的变量接收(形式参数为**变量名)这个变量一般用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 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