zoukankan      html  css  js  c++  java
  • 5.1Python函数(一)

    目录

    前言

    分模块思想,分任务编程,是编程的一大重要思维,其中的实现,函数就担当了一个重要角色,今天我们就来学习Python的初级函数。

    (一)函数的基本知识

    (1)函数的优点

    1. 体积小,减少内存大小,冗余度小。
    2. 重用性强,可重复利用。
    3. 维护方便。
    4. 分解任务,简化逻辑,使代码更加模块化。

    (2)函数的分类

    1. 内建函数
    2. 三方函数
    3. 自定义函数

    (二)函数的基本使用

    1.函数的简单定义

    (1)语法说明

    def 函数名():

    ​ 函数体

    (2)源代码

    # 定义一个简单函数
    def test():
        print(2**2)
        print(2**3)
        print(2**4)
    
    # 调用函数
    test()
    

    (3)输出效果

    01.png

    2.传值函数

    (1)语法说明

    定义语法:

    def 函数名(var1,var2,……)

    ​ 函数体

    调用的时候,有两种方式:

    1. 顺序调用,要求实参与形参一一对应。
    2. 关键字调用,可以不按照顺序调用。

    (2)源代码

    # 定义一个带参数的函数
    def test(var1, var2):
        print(var1+var2)
        print(var1**2+var2**2)
        print(var1**3+var2**3)
    
    
    # 顺序调用带参数的函数
    print("顺序调用")
    test(1, 2)
    
    # 关键字调用带参数函数
    print("关键调用")
    test(var2=2, var1=1)
    

    (3)输出效果

    02.png

    3.不定长函数

    (1)语法说明

    当形参为下面两种形式的时,为不定长参数

    1. *args --- 接收为元组类型, 只要使用星号就可以,名字没关系,习惯用args而已。
    2. **kwargs ---接收为字典类型。其传值时,必须是关键字传值。

    注意:装包与拆包

    1. 装包:args与kwargs 就是表示整个元组与字典的整体,叫装包
    2. 拆包:*args 与 **kwargs 表示元组和字典的每个元素,叫拆包

    (2)源代码

    # 定义不定长的参数- *args 接收的是元组类型
    def test1(*args):
        print(args, type(args))
        print(*args)
    
    
    # 定义不定长的参数- *args 接收的是字典类型
    def test2(**kwargs):
        print(kwargs, type(kwargs))
        # 输出keyword
        print(*kwargs)
        # 使用value,不能打印出来,不过可以使用
        # 而且形参与实参的keyword一样,其实就是关键字调用
        test3(**kwargs)
    
    
    def test3(a, b, c):
        print(a)
        print(b)
        print(c)
    
    
    # 调用参数,并接收的是 元组
    test1(1, 2, 3)
    
    # 调用参数,并接收的是 字典
    test2(a="zsj", b=18, c="m")
    

    (3)输出效果

    03.png

    4.缺省函数

    (1)语法说明

    在定义函数的时候,给形参赋值,就是缺省函数,所赋的值便是默认值,

    def test(name="me")

    而在调用的时候,可以传入参数,也可以不传入参数。

    传入参数时,以所传的参数优先。

    不传入参数时,为默认值。

    (2)源代码

    # 定义缺省参数
    def test(name="zyg"):
        print(name)
    
    
    # 不传入参数, 默认值
    test()
    # 传入参数,优先值是传入的值
    test("me")
    

    (3)输出效果

    04.png

    5.函数的传值过程

    (1)语法说明

    在python里函数的传值:都是引用传递

    1. 值传递(从实参复制一个副本)传递给形参
    2. 引用传递(直接把实参的id)传给形参

    Python的可变数据类型与不可变数据类型

    1. 可变数据类型:value值改变,id值不改变。(列表,字典)
    2. 不可变类型:value值改变,id值随之改变。(数值类型,字符串类型,布尔类型,元组类型)

    Python里函数是否可以改变实参内容问题

    1. 若实参是可变数据类型,则可以实参内容
    2. 若实参是不可变数据类型,则不可以实参内容

    (2)可变类型的实例

    # 定义一个函数,用id()来判断其是值传递,还是地址传递?
    
    def test(num):
        print(id(num))
        num[1] = 5
        print(num)
        print(id(num))
    
    list1 = [1, 2, 3]
    print(id(list1))
    test(list1)
    print("最后的id", id(list1))
    print("最后的值", list1)
    

    05.png

    (3)不可变类型的实例

    # 定义一个函数,用id()来判断其是值传递,还是地址传递?
    
    
    def test(num):
        print(id(num))
        num = 5
        print(num)
        print(id(num))
    
    
    number = 1
    print(id(number))
    test(number)
    print("最后的id", id(number))
    print("最后的值", number)
    

    06.png

    6.具有返回值函数

    (1)语法说明

    当我们需要函数处理过后,返回一个结果值。可以使用

    return 结果值

    结果值:可以是元组类型,列表类型,拆包后的数据

    (2)源代码

    # 定义一个具有返回值的函数
    
    def test(a, b):
        mysum = a + b
        mysub = a - b
        return (a, b)
    
    
    n1 = 4
    n2 = 2
    sum_1, sub_1 = test(n1, n2)
    print(sum_1)
    print(sub_1)
    

    (3)输出效果

    07.png

    7.函数的使用说明

    (1)说明:

    函数的说明都有一个标准的写法,才能调用help查看

    def 函数名():

    ​ """

    ​ 功能:xxxxx

    ​ var1:

    ​ var2:

    ​ ....

    ​ return xxxx

    ​ """

    查看帮助可以用:help(函数名) ,注意是函数名,不是函数调用。

    (2)源代码

    # 定义一个具有返回值的函数
    def test(a, b=1):
        """
            功能:该函数实现两个值的加减,并返回结果。
        :param a: 参与运算的一个值,数字类型,不可选,无默认值
        :param b: 参与运算的另一个值,数字类型,可选,默认值为1
        :return: 和与差的结果,元组类型。例如 (1, 2)
        """
        mysum = a + b
        mysub = a - b
        return (a, b)
    
    
    # 查看帮助
    help(test)
    

    (3)输出效果

    08.png

    作者:Mark

    日期:2019/02/02 周六

  • 相关阅读:
    BlogEngine.Net架构与源代码分析系列part5:对象搜索——IPublishable与Search
    SqlCacheDependency
    Office SharePoint Server 2007
    Castle Active Record for .NET2.0快速入门示例
    PetShop的系统架构第三篇
    中文分词核心配置
    BlogEngine.Net架构与源代码分析系列part3:数据存储——基于Provider模式的实现
    Cocos2d开发系列(二)
    高负载、高并发网站架构知识汇总大流量网站架构的几点认识
    使用Application变量
  • 原文地址:https://www.cnblogs.com/zyg123/p/10348218.html
Copyright © 2011-2022 走看看