• Python


    函数简介

    • 函数是具有某种特定功能的代码块,可以重复使用
    • 在前面讲解数据类型的时候,其实已经出现了很多 Python 内置函数了

    重复性代码

    什么是重复性的代码

    在处理功能相似的逻辑时,会出现结构雷同的代码

    例如:有两个列表,编写程序分别打印这两个列表

    a = [1, 2, 3]
    b = [10, 20, 30]
    
    # 打印输出列表 a 的相关信息
    print('length of list is %d' % len(a)) 
    i = 0
    while i < len(a):
        print(a[i]) 
        i = i + 1 
    
    # 打印输出列表 b 的相关信息
    print('length of list is %d' % len(b)) 
    i = 0
    while i < len(b):
        print(b[i]) 
        i = i + 1

    明显,两个循环输出的代码块是很类似的,这就叫做重复性代码

    重复性代码维护性差

    代码的重复性导致程序的可维护性差,当需要修改处理逻辑时,则需要在多处进行修改

    函数的作用

    • 函数是可重复使用的,用来实现单一功能的代码段
    • 使用函数描述程序中功能相似的代码段,从而消除代码的重复性

    函数的定义

    def 函数名(参数列表):
        函数体

    简单的栗子

    # 简单的栗子
    def max(a, b):
        if a > b:
            print(a)
        else:
            print(b)        
    
    max(1, 2)
    max(20, 10)
    
    
    # 输出结果
    2
    20
    • 函数名:max
    • 参数列表:有两个 a、b
    • 函数功能:判断 a 是否大于 b

    解决重复性的代码

    开头的栗子是循环打印列表的元素,现在通过函数来优化下代码

    # 打印输出列表 x 的相关信息
    def print_list(x):
        print('length of list is %d' % len(x)) 
        i = 0
        while i < len(x):
            print(x[i]) 
            i = i + 1 
    
    a = [1, 2, 3]
    b = [10, 20, 30]
    
    print_list(a)
    print_list(b)
    
    
    # 输出结果
    length of list is 3
    1
    2
    3
    length of list is 3
    10
    20
    30

    当需要修改打印内容的时候,只需要修改函数代码块即可

    # 打印输出列表 x 的相关信息
    def print_list(x):
        print('length of list is %d' % len(x))
        i = 0
        while i < len(x):
            # 修改此行
            print('list[%d] = %d' % (i, x[i])) 
            i = i + 1
    
    a = [1, 2, 3]
    b = [10, 20, 30]
    
    print_list(a)
    print_list(b)
    
    
    # 输出结果
    length of list is 3
    list[0] = 1
    list[1] = 2
    list[2] = 3
    length of list is 3
    list[0] = 10
    list[1] = 20
    list[2] = 30

    函数的返回

    Python 提供了 return 语句用于从函数中返回,当程序执行到 return 语句时,程序从函数中返回到调用函数的地方

    实际栗子

    # return
    def test2():
        print('Before return')
        return
        # 这条语句不会被执行
        print('After return')
    
    
    print('Before test')
    test2()
    print('After test')
    
    
    # 输出结果
    Before test
    Before return
    After test

    如果用的是 pycharm,after return 这一行会提示 warning:This code is unreachable,这行代码是无法到达的

    return 语句有两个常见用途

    • 提前退出函数
    • 返回具体的数据

    提前退出函数

    • 通常情况下,函数执行到最后一条语句时退出函数的执行
    • 但某些情况下,可以通过 return 语句提前退出函数(向上面的栗子其实就是了)

    提前退出函数的栗子

    # return
    def check(gender, age):
        if gender == 'female':
            return
        if age < 50:
            return
    
        print('We only process old man')
        print(gender)
        print(age)
    
    
    print(check("male", 49))
    print(check("female", 55))
    
    check("male", 55)
    
    
    # 输出结果
    None
    None
    
    We only process old man
    male
    55

    如果是提前退出函数,那么会返回 None

    函数的返回值

    return 语句可以携带参数,该参数作为函数的计算结果返回给调用方

    return 返回值

    return 一个返回值

    求和函数

    # return a
    def test3(a, b):
        return a + b
    
    
    print(test3(1, 2))
    
    
    # 输出结果
    3

    return 多个返回值

    # return a,b
    def test4(a, b, c):
        if a > b:
            return a, c
        else:
            return b, c
    
    
    print(test4(1, 2, 3))
    print(test4(2, 1, 3))
    
    
    # 输出结果
    (1, 3)
    (1, 3) 

    return 多个返回值,得到的是一个元组

    return 语句是必须的吗?

    • 不是,函数可以不写 return 语句
    • 但变量赋值这个函数的时候,会得到一个 None

    函数 + pass 语句

    有时候只想先声明一个函数,但并不想这么快写代码块,怎么办呢

    错误写法

    def test():
        # 啥代码没有

    会爆红

    正确写法

    def test():
        pass
    
    
    print("调用函数:", test(), "hahaha")
    
    
    # 输出结果
    调用函数: None hahaha

    Python 提供了 pass 语句,代表函数没有功能代码块

    函数参数

    函数形参之必填参数、缺省参数、可变参数、关键字参数的详细使用

    https://www.cnblogs.com/poloyy/p/12526592.html

  • 相关阅读:
    使用Delphi自带的TDockTabSet组件实现停靠功能(Jeremy North)
    揭秘换肤技术(转载)
    cdecl、stdcall、fastcall函数调用约定区别(转)
    Delphi XE的RTTI增强,动态Hook某些内部事件
    sizeof和strlen解析
    由swap引出的局部变量,形参和指针的小问题
    单链表的逆置算法
    关于C++中的虚拟继承的一些总结
    关于"引用"的几点说明
    求最长公共子序列(子序列在原串中可以不连续)
  • 原文地址:https://www.cnblogs.com/poloyy/p/15092393.html
Copyright © 2020-2023  润新知