zoukankan      html  css  js  c++  java
  • Python中的函数

    函数基础

    01. 函数的快速体验

    1.1 快速体验

    • 所谓函数,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用

    • 函数的使用包含两个步骤:

      1. 定义函数 —— 封装 独立的功能

      2. 调用函数 —— 享受 封装 的成果

    • 函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的 重用

    演练步骤

    1. 新建 04_函数 项目

    2. 复制之前完成的 乘法表 文件

    3. 修改文件,增加函数定义 multiple_table():

    4. 新建另外一个文件,使用 import 导入并且调用函数

    02. 函数基本使用

    2.1 函数的定义

    定义函数的格式如下:

    def 函数名():

       函数封装的代码
       ……
    1. def 是英文 define 的缩写

    2. 函数名称 应该能够表达 函数封装代码 的功能,方便后续的调用

    3. 函数名称 的命名应该 符合 标识符的命名规则

      • 可以由 字母下划线数字 组成

      • 不能以数字开头

      • 不能与关键字重名

    2.2 函数调用

    调用函数很简单的,通过 函数名() 即可完成对函数的调用

    2.3 第一个函数演练

    name = "小明"
    
    
    # 解释器知道这里定义了一个函数
    def say_hello():
        print("hello 1")
        print("hello 2")
        print("hello 3")
    
    print(name)
    # 只有在调用函数时,之前定义的函数才会被执行
    # 函数执行完成之后,会重新回到之前的程序中,继续执行后续的代码
    say_hello()
    
    print(name)

    2.4 PyCharm 的调试工具

    • F8 Step Over 可以单步执行代码,会把函数调用看作是一行代码直接执行

    • F7 Step Into 可以单步执行代码,如果是函数,会进入函数内部

    2.5 函数的文档注释

    • 在开发中,如果希望给函数添加注释,应该在 定义函数 的下方,使用 连续的三对引号

    • 连续的三对引号 之间编写对函数的说明文字

    • 函数调用 位置,使用快捷键 CTRL + Q 可以查看函数的说明信息

    注意:因为 函数体相对比较独立函数定义的上方,应该和其他代码(包括注释)保留 两个空行

    03. 函数的参数

    演练需求

    1. 开发一个 sum_2_num 的函数

    2. 函数能够实现 两个数字的求和 功能

    演练代码如下:

    def sum_2_num():
    
        num1 = 10
        num2 = 20
        result = num1 + num2
    
        print("%d + %d = %d" % (num1, num2, result))
    
    sum_2_num()

    3.1 函数参数的使用

    • 在函数名的后面的小括号内部填写 参数

    • 多个参数之间使用 , 分隔

    def sum_2_num(num1, num2):
    ​
        result = num1 + num2
        
        print("%d + %d = %d" % (num1, num2, result))
    ​
    sum_2_num(50, 20)

    3.2 参数的作用

    • 函数,把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用

    • 函数的参数,增加函数的 通用性,针对 相同的数据处理逻辑,能够 适应更多的数据

      1. 在函数 内部,把参数当做 变量 使用,进行需要的数据处理

      2. 函数调用时,按照函数定义的参数顺序,把 希望在函数内部处理的数据通过参数 传递

    # 定义一个函数
    # 定义形参时,可以为形参指定默认值
    # 指定了默认值以后,如果用户传递了参数则默认值没有任何作用
    #   如果用户没有传递,则默认值就会生效
    def fn(a = 5 , b = 10 , c = 20):
        print('a =',a)
        print('b =',b)
        print('c =',c)
    
    fn(1 , 2 , 3)
    fn(1 , 2)
    fn()

    3.3 形参和实参

    • 形参定义 函数时,小括号中的参数,是用来接收参数用的,在函数内部 作为变量使用

    • 实参调用 函数时,小括号中的参数,是用来把数据传递到 函数内部 用的

    def fn4(a):
    # 在函数中对形参进行重新赋值,不会影响其他的变量
    # a = 20
    # a是一个列表,尝试修改列表中的元素
    # 如果形参执行的是一个对象,当我们通过形参去修改对象时
    # 会影响到所有指向该对象的变量
    a[0] = 30
    print('a =',a,id(a))

    c = 10
    c = [1,2,3]

    fn4(c)
    fn4(c.copy())
    fn4(c[:])

    print('c =',c,id(c))

    3.4 不定长参数

    # 不定长的参数
    # 定义一个函数,可以求任意个数字的和
    def sum(*nums):
        # 定义一个变量,来保存结果
        result = 0
        # 遍历元组,并将元组中的数进行累加
        for n in nums :
            result += n
        print(result)
    
    
    sum(123,456,789,10,20,30,40)

    # 带星号的形参只能有一个
    # 带星号的参数,可以和其他参数配合使用
    # 第一个参数给a,第二个参数给b,剩下的都保存到c的元组中
    def fn21(a,b,*c):
        print('a =',a)
        print('b =',b)
        print('c =',c)
    
    # 可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递
    # 第一个参数给a,剩下的位置参数给b的元组,c必须使用关键字参数
    def fn22(a,*b,c):
        print('a =',a)
        print('b =',b)
        print('c =',c)
    
    # 所有的位置参数都给a,b和c必须使用关键字参数
    def fn23(*a,b,c):
        print('a =',a)
        print('b =',b)
        print('c =',c)
    
    # 如果在形参的开头直接写一个*,则要求我们的所有的参数必须以关键字参数的形式传递
    def fn24(*,a,b,c):
        print('a =',a)
        print('b =',b)
        print('c =',c)
    fn21(1,2,3,4,5,6)
    fn22(1,2,3,4,5,c=6)
    fn23(1,2,3,4,b=5,c=6)
    fn24(a=1,c=2,b=3)
    E:PyScriptspython.exe E:/PyWorkSpace/venv/ccc.py
    a = 1
    b = 2
    c = (3, 4, 5, 6)
    a = 1
    b = (2, 3, 4, 5)
    c = 6
    a = (1, 2, 3, 4)
    b = 5
    c = 6
    a = 1
    b = 3
    c = 2
    
    Process finished with exit code 0
    # **形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中
    #   字典的key就是参数的名字,字典的value就是参数的值
    # **形参只能有一个,并且必须写在所有参数的最后
    def fn3(b,c,**a) :
        print('a =',a,type(a))
        print('b =',b)
        print('c =',c)
    
    fn3(b=1,d=2,c=3,e=10,f=20)

    # 参数的解包(拆包)
    def fn4(a,b,c):
        print('a =',a)
        print('b =',b)
        print('c =',c)
    
    # 创建一个元组
    t = (10,20,30)
    
    # 传递实参时,也可以在序列类型的参数前添加星号,这样他会自动将序列中的元素依次作为参数传递
    # 这里要求序列中元素的个数必须和形参的个数的一致
    fn4(*t)
    
    # 创建一个字典
    d = {'a':100,'b':200,'c':300}
    # 通过 **来对一个字典进行解包操作
    fn4(**d)

    04. 函数的返回值

    • 在程序开发中,有时候,会希望 一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理

    • 返回值 是函数 完成工作后,最后 给调用者的 一个结果

    • 在函数中使用 return 关键字可以返回结果

    • 调用函数一方,可以 使用变量接收 函数的返回结果

    注意:return 表示返回,后续的代码都不会被执行

    def sum_2_num(num1, num2):
        """对两个数字的求和"""
    
        return num1 + num2
    
    # 调用函数,并使用 result 变量接收计算结果
    result = sum_2_num(10, 20)
    
    print("计算结果是 %d" % result)

    def fn4():
        for i in range(5):
            if i == 3:
                # break 用来退出当前循环
                # continue 用来跳过当次循环
                return  # return 用来结束函数
            print(i)
        print('循环执行完毕!')

    05. 函数的嵌套调用

    • 一个函数里面 又调用另外一个函数,这就是 函数嵌套调用

    • 如果函数 test2 中,调用了另外一个函数 test1

      • 那么执行到调用 test1 函数时,会先把函数 test1 中的任务都执行完

      • 才会回到 test2 中调用函数 test1 的位置,继续执行后续的代码

    def test1():
    ​
        print("*" * 50)
        print("test 1")
        print("*" * 50)
    ​
    ​
    def test2():
    ​
        print("-" * 50)
        print("test 2")
        
        test1()
        
        print("-" * 50)
    ​
    test2()
    ​

  • 相关阅读:
    HTML连载10-details标签&summary标签&marquee标签
    [刷题] 7-14 然后是几点
    [刷题] 7-18 出租车计价 (15 分)
    [刷题] PTA 7-20 简单计算器
    [刷题] PTA 7-22 用天平找小球
    [刷题] PTA 7-24 猜数字游戏
    [刷题] PTA 7-28 求整数的位数及各位数字之和
    [刷题] PTA 7-30 念数字
    [刷题] PTA 7-37 输出整数各位数字
    [刷题] PTA 7-35 猴子吃桃问题
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12154014.html
Copyright © 2011-2022 走看看