天天看点

Python基础(六)- 函数函数

函数

函数的概念

函数是带名字的代码块,用于完成具体的工作。要执行函数定义的特定任务,可调用相应的函数。当我们需要在程序中多次使用某一个功能是,就可以将功能代码写入函数中,再对函数进行调用来实现功能

定义函数

函数的定义的格式为:

def 函数名(参数, 参数, ...):  # 通过def关键字可以定义一个函数
    执行代码
函数名(实参, 实参, ...)  # 通过函数名加(),并传入相应的参数来调用函数
           

例子:

def hello():
    print('say hello')

hello()  # 输出结果为 say hello
           
说明:函数的参数是自定的,可以有0个到无数个,这个是根据此函数的功能需求来的

函数的参数

实参和形参

在定义一个函数时,根据需要可以给函数指定一个参数,在调用这个函数时提供这个参数具体的值,那么,给函数指定的这个参数就叫做形参,传入的指定的值就是实参

def func123(a, b, c):  # func123为参数名, a,b,c就是三个形参
    print(a + b + c)

func123(, , )  # 在此处调用func()函数, 1,2,3就分别是a,b,c的实参
>>>  # 输出结果为6
           

参数传递方式

在python的函数中,传递参数的方式有多种,最普遍的方式是位置传参和关键字传参。

  • 位置传参: 是根据函数形参的定义顺序,在调用函数时按形参顺序传递实参
def func123(a, b, c):
    print(a + b + c)
# 位置传参是根据函数形参的定义顺序,在调用函数时按形参顺序传递实参
func123(, , ) 
           
  • 关键字传参:指定传递的实参的形参名,就可以随意的选择传递实参的顺序
def func123(a, b, c):
    print(a + b + c)
# 关键字传参:指定传递的实参的形参名,就可以随意的选择传递实参的顺序
func123(a=, b=, c=)
func123(b=, a=, c=)
func123(c=, b=, a=)
# 以上三个函数调用是等价的,效果也是一模一样的
           
  • 混合传参:可以通过位置传参和关键字传参混合使用传递参数,但是在使用了关键字传参后,之后的未传参参数必须使用关键字传参方式传参
def func123(a, b, c):
    print(a + b + c)
# 混合传参方式:可以通过位置传参和关键字传参混合使用传递参数
func123(, , c=)
func123(, b=, c=)
func123(, c=, b=)
# func123(1, b=2, 3) 错误传参方式
# func123(1, 3, b=2) 错误传参方式
           

传参的一些技巧和用法

默认参数

  • 在定义函数参数时,可以给形参一个默认值,当别人调用这个函数并传递实参时,如果没有对有默认值的参数传参,则在函数执行时自动让参数将默认值作为参数值使用
def func123(a=, b=, c=):
    print(a + b + c)

func123(, , )  # 4 5 6
func123()  # 1 2 3
func123()  # 4 2 3
func123(, )  # 4 5 3
func123(, c=)  # 4 2 6
func123(b=)  # 1 5 3
func123(c=)  # 1 2 6
...
           

未知参数传参

  • 自定义传参:有时我们在使用一个函数时并不知道需要传递多少实参进去,这是我们可以使用自定义传参的方式来进行参数传递
def func123(*args):  # 使用 *自定义参数名 来接收数量不确定的参数传递
    num = 
    for i in args:  # 这里的args是一个元组,包含传递进入的多个参数
        num += i
    print(num)

func123(, , , ...)
           
  • 自定义关键字传参:自定义传参虽然方便,但是如果我们想要在函数中确定传递的参数中是否有我们需要的实参,那么我们就需要用到自定义的关键字传参
def func123(**kwargs)  # 使用 **自定义参数名 来接受数量不确定的关键字参数传递
    if 'a' in kwargs:  # 这里的kwargs对象是一个字典,包含传递的多个关键字参数
        print(kwargs['a'])

func123(a=, b=, c=, ...)
           
  • 当我们已经知道这两种传参方式后,那么在我们不确定使用我们函数的人会怎样传参时,我们就可以制定能够接受任何参数传递的参数定义方式
def func123(*args, **kwargs)  # 这样可以将使用者想要传递的所有参数都包含在内而不会引起python解释器抛出参数传递错误信息
    for i in args:
        pass
    for key, value in kwargs.item():
        pass

func123(, , , a=, b=, c=, ...)
           

未完待续