Python——函数

本文详细介绍了Python中的函数概念,包括函数的封装、复用性提升、参数传递(位置参数、关键字参数、缺省参数和不定长参数)、返回值处理、说明文档编写以及函数的嵌套调用和变量作用域。
摘要由CSDN通过智能技术生成

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

使用函数的好处:

  • 将功能封装在函数内,可供随时随地重复利用
  • 提高代码的复用性,减少重复代码,提高开发效率

函数的定义

def   函数名(传入参数):

        函数体

        return   返回值

def greet_user():
    print("Hello!")

 函数的调用

函数名(参数) 

def greet_user():
    print("Hello!")

greet_user()

运行结果:

Hello!

注意事项:

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

 函数的传入参数

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

例:两数相加的函数

#定义函数
def add(x, y):
    result = x + y
    print(f"{x} + {y}的结果是{result}")

#调用函数
add(3, 5)
add(20, 34)
add(223, 244)

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

  • 参数之间使用逗号进行分隔

函数调用中,提供的3和5(20和34、223和244),称为:实际参数(实参),表示函数执行时真正使用的参数值

  • 传入的时候,按照顺序传入数据,使用逗号分隔

运行结果:

3 + 5的结果是8
20 + 34的结果是54
223 + 244的结果是467

传入的参数的数量是不受限制的

  • 可以不使用参数
  • 也可以使用任意N个参数

例:三数相加的函数 

#定义函数
def add(x, y, z):
    result = x + y + z
    print(f"{x} + {y} + {z}的结果是{result}")

#调用函数
add(3, 5, 9)
add(20, 34, 65)
add(223, 244, 443)

运行结果: 

3 + 5 + 9的结果是17
20 + 34 + 65的结果是119
223 + 244 + 443的结果是910

位置参数

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

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

user_info("MARY", 20, "女")

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

关键字参数

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

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

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

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

函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。 

缺省参数

也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)。

作用:当调用函数时没有传递参数,就会使用默认是用缺省参数对应的值。

def user_info(name, age, gender="男"):
    print(f"您的名字是:{name},年龄是{age},性别是{gender}")

user_info("TOM", 20)
user_info("Rose", 18, "女")

运行结果:

您的名字是:TOM,年龄是20,性别是男
您的名字是:Rose,年龄是18,性别是女

 函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值。

不定长参数

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

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

不定长参数的类型:

  • 位置传递
  • 关键字传递

位置传递

def user_info(*args):
    print(args)

# ("TOM",)
user_info("TOM")
# ("TOM", 18)
user_info("TOM", 18)

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

关键字传递

def user_info(**kwargs):
    print(kwargs)

# {'name': 'TOM', 'age': 18, 'id': 110}
user_info(name="TOM", age=18, id=110)

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

函数的返回值

        函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。在函数中,可使用return语句将值返回到调用函数的代码行。

如图:定义两数相加的函数功能。完成功能后,会将相加的结果返回给函数调用者,所以,变量r接收到了函数的执行结果。

def add(a, b):
    result = a + b
    return result

r = add(4, 5)
print(r)

运行结果: 

9

def    函数(参数...):

        函数体

        return   返回值

变量 = 函数(参数)

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

 函数的多返回值

def  test_return():

        return 1, 2

x, y =test_return() 
print(x)    #结果:1
print(y)    #结果:2

  • 按照返回值的顺序,写对应顺序的多个变量接受即可
  • 变量之间用逗号隔开
  • 支持不同类型数据return 

例:

def test_return():
    return 1, "Hello", True

x, y, z = test_return()
print(x)
print(y)
print(z)

运行结果:

1
Hello
True

None类型

如果函数没有使用return语句返回数据,函数还有返回值吗?

def greet_user():
    print("Hello!")

#使用变量接收greet_user函数的返回值
r = greet_user()
#打印返回值
print(r)
#打印返回值类型
print(type(r))

运行结果:

None
<class 'NoneType'>

None作为一个特殊的字面量,用于表示:空、无意义,有非常多的应用场景。

  • 用在函数无返回值上
def greet_user():
    print("Hello!")
    return None
  • 用在if判断上
    • 在if判断中,None等同于False
    • 一般用于在函数中主动返回None,配合if判断做相关处理
def check_age(age):
    if age > 18:
        return "SUCCESS"
    else:
        return None

result = check_age(5)
if not result:
    #进入if表示result是None值,也就是False
    print("未成年")
  • 用于声明无内容的变量上
    • 定义变量,但暂时不需要变量有具体值,可以用None来代替
#暂不赋予变量具体值
name = None

 函数说明文档

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

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

语法如下:

def  func(x, y):

        """

        函数说明

        :param  x:  形参x的说明

        :param  y:  形参y的说明

        :return:  返回值的说明

        """

        函数体

        return  返回值

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

例:

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

函数的嵌套调用

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

def func_b():
    print("---2---")

def func_a():
    print("---1---")

    func_b()

    print("---3---")

#调用函数func_a
func_a()

运行结果: 

---1---
---2---
---3---

 函数a中执行到调用函数b的语句,会将函数b全部执行完成后,继续执行函数a的剩余内容。

变量在函数中的作用域

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

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

局部变量

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

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

test1()    # 100
print(num)    # 报错:name 'num' is not defined
  • 变量num是定义在“test1”函数内部的变量,在函数外部访问则立即报错

局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。

 全局变量

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

 如果有一个数据,在函数a和函数b中都要使用,该怎么办?

将这个数据储存在一个全局变量里面。

# 定义全局变量
num = 100

def testA():
    print(num)

def testB():
    print(num)

testA()  # 100
testB()  # 100

global关键字

test_b函数需要修改全局变量num的值为500,如何修改程序?

# 在函数内修改全局变量
num = 100

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

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

test_a()
test_b()
print(num)

运行结果: 

test_a:100
test_b:500
100

使用global关键字,可以在函数内部声明变量为全局变量,例:

num = 100

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

def test_b():
    # global关键字声明num是全局变量
    global num
    num = 500
    print(f"test_b:{num}")

test_a()
test_b()
print(num)

运行结果:

test_a:100
test_b:500
500

 内置函数

68个Python内置函数,建议你吃透!-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值