【python】函数

发布于:2022-10-29 ⋅ 阅读:(340) ⋅ 点赞:(0)

目录

1、什么是函数?

示例:GCD 最大公约数函数

2、文档字符串

3、全局变量和局部变量 

总结:

4、函数的参数

1 默认形参

2.非默认形参

3. 位置实参和关键字实参

4 任意形参(可变形参)

5. 字典形参

6、解封实参列表

总结


1、什么是函数?

def关键字之后是函数名,函数名后是一对圆括号,圆括号中可以包含一些称为“参数”的变量,圆括号中包含的参数变量称为函数的“参数列表”(参数列表可以是空的,即不包含任何参数),圆括号的后面是一个冒号:  。  从def关键字一直到该行结尾的冒号构成了函数头。函数头下面的是一组语句构成的语句块,称为函数体。

示例:GCD 最大公约数函数

代码如下:

def GCD(m,n):
    while n != 0:
        m,n = n,m%n
    return m

print(GCD(36,12))  # 12

2、文档字符串

定义函数时,可以在函数头后面添加由三个引号(三个单引号或三个双引号)括起来的文档字符串(docstring),用于说明这个函数的功能。docstring会作为函数对象的一个属性“__doc__”被使用。例如,可以通过函数print()输出这个属性:

def GCD(m,n):
    """
    这是一个求两个数的最大公约数的函数
    :param m:
    :param n:
    :return:
    """
    while n != 0:
        m,n = n,m%n
    return m

# print(GCD(36,12))
print(GCD.__doc__)

输出如下:

3、全局变量和局部变量 

随口一提

总结:

• 函数内部可访问但不能直接修改全局变量,必须用关键字global声明才能修改全局变量。
• 局部变量和外部变量同名,在函数内部通过这个名字访问的都是局部变量,除非用global声明为全局变量。函数外部不能访问局部变量。

4、函数的参数

1 默认形参

函数的形参可以有默认值,称为“默认形参”,调用函数时如果没有为默认形参提供实际参数,则该形参就取默认值

2.非默认形参

注意:

>>如果一个函数的形参中既有默认形参也有非默认形参,则默认形参必须都在非默认形参的后面,默认形参后面不能再有非默认形参

3. 位置实参和关键字实参

>>函数定义中的形参是有顺序的,调用函数时传递的实参是按照顺序为对应位置的形参赋值的。这种按照位置顺序传递的实参称为“位置实参”

>>关键字实参”的参数传递方式,该传递方式在传递实参时指明这个实参传递给哪个形参

4 任意形参(可变形参)

>>如果在定义函数时不知道将来使用者调用这个函数时传递的实际参数个数,则可以在定义函数时,在这个形参名前加一个星号 。函数定义中的这种形参称为“任意形参”或“可变形参”。传递给可变形参的多个实参被组装成一个tuple对象并传递给这个可变形参

>>在函数调用时,可以传递多个实参给可变形参,这些实参(如“小白”“老张”)都被打包为一个tuple对象传递给函数的可变形参,函数内部可以用“for...in”或下标运算符[]访问该可变形参引用的tuple对象中的元素。

注意:

  • 如果函数的形参中既有默认形参又有可变形参,则默认形参必须位于可变形参的后面
  • 函数定义中的可变形参最多只能有一个,不能有两个可变形参,否则,如果给这些形参传递实参,就无法区分哪个实参是传给哪个形参了。

5. 字典形参

字典形参名前面有2个**,这个形参指向的是一个dict对象,调用函数时必须以“key=value”的形式传递可变数量的实参,这些实参被组装成一个dict对象,并赋值给字典形参。
如果函数定义中既有可变形参又有字典形参,则字典形参必须位于可变形参的后面。

代码说明:

def f(x,*y,**z):
    print(type(x),type(y),type(z))
    print("x:",x)
    for each in y:
        print(each)

    for key in z:
        print("{}:{}".format(key,z[key]))

f("hello","cxk",666,"jgd",year ="2022",month ="10",day ="29")

输出如下:

 注意:

函数定义中的字典形参最多只能有一个,不能有两个字典形参,否则,如果给这些形参传递字典实参,则无法区分哪个字典实参是传给哪个字典形参了。

6、解封实参列表

将这个list或tuple变量名前用一个*作为实参传给被调用函数。Python解释器会自动从这个list或tuple对象中解析出每个实参并传递给被调用函数。这种传递实参的方式称为“解封实参列表”

list = [32,12]
print(GCD(*list))

如上:输出为4

range()需要单独的start和end参数,而start和end的值如果在一个list或tuple对象中,就可以通过这种解封实参列表方法将list或tuple对象的数据元素作为实参传递给函数range()。

类似地,假设参数在一个字典中,则要用两个星号**将它们分离出来。例如:

def f(name,score):
    print("name:",name)
    print("score:",score)
d = {"name": "鸡果冻", "score":100}
f(**d)

输出:

name: 鸡果冻
score: 100

总结

  1. 函数的形参可以有默认值,称为默认形参,形参名前有一个*的称为可变形参,形参名前有两个**的称为字典形参
  2. 可变形参必须在非默认形参的后面,默认形参必须在非默认形参和可变形参的后面,字典形参必须放在最后面。
  3. 函数定义中的形参是有顺序的,实参可以按照位置传递给形参,称为位置实参,也可以按照形参名=实参的方式将实参传递给形参,称为关键字实参。关键字实参可以任意顺序排列。
  4. 可以给可变形参传递多个实参,这些实参被打包成一个tuple对象传递给可变形参。函数可以像普通tuple对象一样访问可变形参中的实参。
  5. 可以采用键-值的方式将字典实参传递给字典形参。这些键-值实参被打包成一个字典对象传给字典形参。函数可以像普通字典对象一样访问字典形参中的每个键-值实参。
  6. 假如要传递给函数的实参放在一个tuple或list对象中,则可以通过在指向这个对象的变量名前加*的解封实参列表方式传递给被调用函数,list或tuple中的这些实参将被解封传递给被调用函数的形参。假如要传给函数的实参放在一个dict对象中,则可以通过在指向这个对象的变量名前加**的解封实参列表方式将字典实参传递给形参。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到