函数以及参数

一、函数

  1.作用: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

      函数能提高应用的模块性,和代码的重复利用率。

  2.定义函数:

    1)函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()

    2)任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

    3)函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

    4)函数内容以冒号起始,并且缩进。

    5)return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

    def test(x):
        """
        简单的测试函数
        :param x:
        :return:
        """
        y = 2 * x + 1
        return y


    v = test(3)
    print(v)  # 7

  3.函数返回值:函数可以只返回一个数据类型,也可返回多个数据类型和None,返回多个数据类型时相当于返回一个元组。   

    # 返回多个值
    def test1():
        a = 45,
        b = "Sun"
        c = {1: "xx", 2: "yy"}
        return a, b, c


    # 返回一个值
    def test2():
        a = 45,
        b = "Sun"
        c = {1: "xx", 2: "yy"}
        return c


    # 无返回值
    def test3():
        a = 45,
        b = "Sun"
        c = {1: "xx", 2: "yy"}


    def test4():
        a = 45,
        b = "Sun"
        c = {1: "xx", 2: "yy"}
        return


    x = test1()
    y = test2()
    z = test3()
    v = test4()
    print(x)  # ((45,), 'Sun', {1: 'xx', 2: 'yy'})
    print(y)  # {1: 'xx', 2: 'yy'}
    print(z)  # None
    print(v)  # None

 

二、参数 

  1.位置参数(必选参数):必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

    # 必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
    def mytest1(v):
        print(v)


    mytest1(666)  # 666

  2.默认参数:降低调用函数的难度。

    1)必须参数在前,默认参数在后。

    2)变化大的参数放前面,变化小的参数放后面。变化小的参数可与作为默认参数。

    3)当有多个默认参数时,调用该函数时可以按顺序提供默认参数,不需要指明,当不按顺序提供默认参数时,需要把参数写上。

    4)默认参数必须传入不可变对象。

    def mytest2(x, y=2, z=5):
        v = x + y + z
        return v


    p1 = mytest2(3)
    p2 = mytest2(1, 5)
    p3 = mytest2(2, 5, 6)
    p4 = mytest2(4, z=10, y=20)
    print(p1)  # 10
    print(p2)  # 11
    print(p3)  # 13
    print(p4)  # 34

  3.可变参数:实际上传入的是元组。

    1)可传入0~N个参数。

    2)如果传入的是list或者tuple,直接在参数前面加上“*”。

    def mytest3(*num):
        sum = 0
        for i in num:
            sum = sum + i
        return sum


    s1 = mytest3(5)
    print(s1)  # 5
    s2 = mytest3(5, 9, 8)
    print(s2)  # 22

    li = [25, 89, 78]
    s3 = mytest3(25, *li)
    print(s3)  # 217

  4.关键字参数:

    1)允许传入0或任意个含参数名的参数,这些关键字在函数内部自动组装为一个dict。

    2)当传入的是字典时,直接在参数前面加上“**”。

    def mytest4(name, age, **kw):
        msg = "I am {}, age is {}, other is {}".format(name, age, kw)
        return msg


    m1 = mytest4("Sun", 20, **{"city": "SD", "job": "Stu"})
    print(m1)  # I am Sun, age is 20, other is {'city': 'SD', 'job': 'Stu'}
    m2 = mytest4(name="Li", age=18, city="HN", job="Work")
    print(m2)  # I am Li, age is 18, other is {'city': 'HN', 'job': 'Work'}

  5.命名关键字参数:

    1)与关键字不同的是命名关键字参数需要一个特殊的分隔符“*”,“*”后面的参数被视为命名关键字参数。

    2)必须传入参数名。

    3)在定义参数时命名关键字参数可以被赋值。

    4)如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符“*”了。

    def mytest5(name, age, *, city="BJ", job):
        msg = "I am {}, age is {}, city is {}, job is {}".format(name, age, city, job)
        return msg


    t = mytest5("Sun", 18, job="Stu")
    print(t)  # I am Sun, age is 18, city is BJ, job is Stu


    def mytest6(name, age, *args, city="BJ", job):
        msg = "I am {}, age is {}, other is {},city is {}, job is {}".format(name, age, args, city, job)
        return msg


    t = mytest6("Sun", 18, "", "", "", "", job="Stu")
    print(t)  # I am Sun, age is 18, other is ('吃', '喝', '拉', '撒'),city is BJ, job is Stu

  6.参数组合:

    1)顺序:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。

    2)对于任意的函数都可以通过类似func(*args.**kw)来调用。

猜你喜欢

转载自www.cnblogs.com/Sssun/p/11739278.html