Python函数的使用

函数

函数

​ 是组织好的,可重复使用的,用来实现特定功能的代码段。

好处

​ 可以让我们得到一个针对特定需求、可供重复利用的代码段。

​ 提高程序的复用性,减少重复性代码,提高开发效率。

定义

def 函数名(传入参数):
    函数体
    return 返回值

案例

# 定义一个函数,输出相关信息
def say_hi():
    print("Hello World")
# 调用函数(函数名加参数)
say_hi()

注意事项

  • 如果参数不需要,可以省略
  • 如果返回值不需要,可以省略
  • 函数必须先定义后使用

函数的参数

传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据。

案例

# 定义2数相加的函数,通过参数接收被计算的2个数字
def add(x,y):
    result = x + y
    print(f"{x} + {y} 的结果是:{x+y}")

# 调用函数,传入被计算的2个数字
add(1,2)
add(3,4)

函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数。

函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时真正使用的参数值。

注意事项

  • 参数之间使用逗号进行分隔
  • 传入的时候,按照顺序传入数据,使用逗号分割

函数的返回值

通过返回值可以将结果返回给调用者接收。

使用关键字 return 来返回结果。

函数题在遇到 return 后就结束了,所以写在 return 后的代码不会执行。

None 类型

如果函数没有使用 return 语句返回数据,那么函数也有返回值。

Python 中有一个特殊的字面量 None,其类型是<class ‘NodeType’>,没有返回值的函数,实际上就是返回了:None 这个字面量。

None 表示空的、无实际意义的意思。

函数返回的None,就表示这个函数没有返回什么有意义的内容,也就是返回了空的意思。

应用场景

  • 用在函数无返回值上
  • 用在 if 判断上
    • 在 if 判断中,None 等同于 False
    • 一般用于在函数中主动返回 None,配合 if 判断做相关处理
  • 用于声明无内容的变量上
    • 定义变量,暂时不需要变量有具体值,可以用 None 来代替

函数说明文档

函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。

我们可以给函数添加说明文档,辅助理解函数的作用。

语法如下:

def function(x,y):
    """
    函数说明
    :param x: 形参x的说明
    :param y: 形参y的说明
    :return: 返回值的说明
    """
    函数体
    return 返回值

通过多行注释的形式对函数进行说明解释,内容写在函数体之前。

案例

def add(x,y):
    """
    添加函数
    :param x: 形参x表示相加的其中一个数字
    :param y: 形参y表示相加的另一个数字
    :return: 返回值是2数相加的结果
    """
    result = x + y
    print(f"{x} + {y} 的结果是:{x+y}")
    return result

函数的嵌套调用

所谓函数嵌套调用指的是一个函数里面又调用了另一个函数。

def fun_b():
    print("我是方法b")

def fun_a():
    print("我是方法a")
    # 嵌套调用函数 fun_b
    fun_b()
	print("我执行完啦")
    
fun_a()

在函数a中调用了另一个函数b,那么先把函数b中的任务都执行完毕后才会回到上次函数a执行的位置。

函数变量作用域

变量作用域指的是变量的作用范围(变量在哪可用,在哪里不可用)。

主要分为两类:局部变量和全局变量。

局部变量

所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效。

def testA():
    num = 100
    print(num)

testA()
# 除了函数体,局部变量就不能使用了
print(num) # 报错,name num is not defined

作用

在函数体内部,临时保存数据,当函数执行完毕后立刻销毁局部变量。

全局变量

全局变量指的是在函数体内外都能生效的变量。

# 全局变量
num = 200

def testB():
    print(f"testB:{num}")

def testC():
    print(f"testC:{num}")

testB()
testC()
print(num)

global 关键字

global 关键字声明变量是全局变量

num = 200

def testC():
    global num
    num = 500
    print(f"testC:{num}")

testC()
print(num)

函数多返回值

如果有多个返回值,可以使用逗号隔开,在调用函数的位置,写对应顺序的多个变量接收即可(支持不同类型的数据return)。

# 都使用多个变量,接收多个返回值,可以是不同类型
def test_return():
    return 1,"hello",True

x,y,z = test_return()
print(f"test_return()返回值有三个,分别为{x},{y},{z}")

函数多种传参方式

位置参数

位置参数指调用函数时根据函数定义的参数位置来传递参数。

注意:传递的参数和定义的参数的顺序及个数必须一致。

# 位置参数
def user_info(name,age,gender):
    print(f"您的名字是{name},年龄是{age},性别是{gender}")

user_info("jqz",21,'男')

关键字参数

函数调用时通过”键=值“形式传递参数。

可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

# 关键字参数
def user_info(name,age,gender):
    print(f"您的名字是{name},年龄是{age},性别是{gender}")

# 关键字传参
user_info(name="jqz",age=21,gender='男')
# 可以不按照固定顺序
user_info(age=21,gender='男',name="jqz")
# 可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info("jqz",gender='男',age=21)

缺省参数

缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值。

注意:所有位置参数必须出现在默认参数前,包括函数定义和调用。

# 缺省参数
def user_info(name,age,gender='男'):
    print(f"您的名字是{name},年龄是{age},性别是{gender}")
# 不给默认值传参
user_info("jqz",age=21)
# 给默认值传参
user_info("jqz",age=21,gender='女')

不定长参数

不定长参数也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。

作用:当调用函数时不确定参数个数时,可以使用不定长参数。

不定长参数的类型:1、位置传递 2、关键字传递

位置传递

传进的所有参数都会被args变量手机,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是位置传递。

# 不定长-位置不定长,*号
# 不定长定义的形式参数会作为元组存在,接收不定长数量的参数传入
def user_info(*args):
    print(f"args参数的类型是:{type(args)},内容是:{args}")

user_info(1,2,3,"hello","男孩")


关键字传递

参数时“键=值”形式的情况下,所有的“键=值”都会被kwargs接收,同时会根据“键=值”组成字典。

# 不定长-关键字不定长,**号
def user_info(**kwargs):
    print(f"args参数的类型是:{type(kwargs)},内容是:{kwargs}")

user_info(key1 = 1,key2=2,key3=3,key4="hello",key5="男孩")

匿名函数

函数作为参数传递

函数本身可以作为参数传入另一个函数内。

传入的是代码的执行逻辑,而非数据的传递,任何逻辑都可以自行定义并作为函数传入。

# 定义一个函数,接收另一个函数作为传入参数
def test_func(compute):
    result = compute(1,2)
    print(f"compute参数的类型是:{type(compute)}")
    print(f"计算结果为:{result}")

# 定义一个函数,准备作为参数传入另一个函数
def compute(x,y):
    return x+y

# 调用,并传入函数
test_func(compute)

Lambda 匿名函数

在函数的定义中,def 关键字,可以定义带有名称的函数,lambda关键字,可以定义匿名函数(无名称)。

有名称的函数,可以基于名称重复使用。

无名称的匿名函数,只可临时使用一次。

匿名函数定义语法:

lambda 传入参数:函数体(一行代码)

  • lambda 是关键字,表示定义匿名函数
  • 传入参数表示匿名函数的形式参数,如:x,y表示接收2个形式参数
  • 函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码
# 定义一个函数,接收另一个函数作为传入参数
def test_func(compute):
    result = compute(1,2)
    print(f"compute参数的类型是:{type(compute)}")
    print(f"计算结果为:{result}")

# 通过 lambda 匿名函数的形式,将匿名函数作为参数传入
test_func(lambda x,y:x+y)

使用 def 和使用 lambda 定义的函数功能完全一致,只是 lambda 关键字定义的函数时匿名的,无法二次使用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值