• Python小白学习之路(十)—【函数】【函数返回值】【函数参数】


    写在前面:

    昨天早睡之后,感觉今天已经恢复了百分之八十的样子

    又是活力满满的小伙郭

    今日份鸡汤:

    我始终相信,在这个世界上,一定有另一个自己,在做着我不敢做的事,在过着我想过的生活。-------宫崎骏

    函数

    一、函数出现的背景

    在学习函数之前,一直遵循:面向过程编程,
    即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,
    开发过程中最常见的操作就是粘贴复制,
    也就是将之前实现的代码块复制到现需功能处,如下:

    while True:
    if cpu利用率 > 90%:
    #发送邮件提醒
    连接邮箱服务器
    发送邮件
    关闭连接
    
    if 硬盘使用空间 > 90%:
    #发送邮件提醒
    连接邮箱服务器
    发送邮件
    关闭连接
    
    if 内存占用 > 80%:
    #发送邮件提醒
    连接邮箱服务器
    发送邮件
    关闭连接

    但是,学习了函数之后,if条件语句下的内容实质是相同的,可以将其提取出来
    进行公用。修改后的程序如下:

    def 发送邮件(内容)
    #发送邮件提醒
    连接邮箱服务器
    发送邮件
    关闭连接
    
    while True:
    
    if cpu利用率 > 90%:
    发送邮件('CPU报警')
    
    if 硬盘使用空间 > 90%:
    发送邮件('硬盘报警')
    
    if 内存占用 > 80%:
    发送邮件('内存报警')
    
     

    对于上述的两种实现方式,第二次必然比第一次的重用性和可读性要好,
    第二次称为函数式编程
    第一次称为面向过程编程

    • 总结使用函数的好处:
      • 代码重用
      • 保持一致性,易维护
      • 可扩展性

    二、函数的定义

    python中函数定义:函数式逻辑结构化和过程化的一种编程方法

    def 函数名(参数):
    
      ...
      函数体
      ...
      返回值

    函数的定义主要有如下要点:

    • def:表示函数的关键字
    • 函数名:函数的名称,日后根据函数名调用函数
    • 参数:为函数体提供数据
    • 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
    • 返回值:当函数执行完毕后,可以给调用者返回数据。


    举例:

    def test(x):
      "The function definitions"
      x+=1
      return x 
    • def:定义函数的关键字
    • test:函数名
    • ():内可定义形参
    • "":文档描述(非必要,但是强烈建议为你的函数添加描述信息)
    • x+=1:泛指代码块或程序处理逻辑
    • return:定义返回值 

    以上要点中,比较重要有参数和返回值。


    1.返回值:

    函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。

    过程定义:过程就是简单特殊没有返回值的函数

    总结:当一个函数/过程没有使用return显示的定义返回值时,python解释器会隐式的返回None,

    所以在python中即便是过程也可以算作函数。

    • 总结:
      •    返回值数=0:返回None
      •    返回值数=1:返回object
      •    返回值数>1:返回tuple


    2.参数:

    举例:
    # ######### 定义函数 #########
    
    # name 叫做函数func的形式参数,简称:形参
    def func(name):
    print name
    
    # ######### 执行函数 ######### 
    # 'xhg' 叫做函数func的实际参数,简称:实参
    func('xhg')

    2.1形参

    形参变量只有在被调用时才分配内存单元,
    在调用结束时,即刻释放所分配的内存单元。
    因此,形参只在函数内部有效。
    函数调用结束返回主调用函数后则不能再使用该形参变量

    2.2实参


    实参可以是常量、变量、表达式、函数等,
    无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
    因此应预先用赋值,输入等办法使参数获得确定值

    2.3位置参数和关键字

    #位置参数,必须一一对应,缺一不行,多一也不行
    def test(x,y,z): # x = 1;y = 2; z = 3
      print(x)
      print(y)
      print(z)
    
    test(1,2,3)
    #关键字参数,无需一一对应,缺一不行,多一也不行
    def test(x,y,z):
      print(x)
      print(y)
      print(z)
    
    test(y=1,z=22,x=3)
    #关键字参数和位置参数混合使用时,位置参数必须在关键字参数左边
    def test(x,y,z):
      print(x)
      print(y)
      print(z)
    
    test(1,y=2,3)#报错
    test(1,3,y=2)#报错
    test(1,2,z=3)#正确


    2.4默认参数

    def func(name, age=18):
      print("%s:%s" % (name, age))
    
    # 指定参数
    func('xhg', 19)
    #执行结果
    xhg:19
    
    
    # 使用默认参数
    func('alex')
    #执行结果
    alex:18

    2.5参数组

    • 非固定长度的参数
    • *args 针对位置参数传递
    • **kwargs 针对关键字参数传递
    • *表传递的数据类型为列表
    • **表传递的数据类型为字典
    #*args 针对位置参数传递
    def func(*args):
      print(args)
    func(1,2,3,4,'xhg','python')
    #*args 针对位置参数传递,实参以列表形式,需要*表明
    def func(*args):
      print(args)
    li = [1,2,3,4,'xhg','python']
    func(*li)
    #**kwargs 针对关键字参数传递
    def func(x,**kwargs):
      print(x)
      print(kwargs)
    func(12, name = 'xhg',age =18)
    #**kwargs 针对位置参数传递,实参以字典形式,需要**表明
    def func(x,**kwargs):
      print(x)
      print(kwargs)
    s = {'name': 'xhg','age':18}
    func(12, **s)
    def func(x, *args, **kwargs):
      print(x)
      print(args)
      print(kwargs)
    li = [2, 2, 2, 2]
    s = {'z': 3, 'v ': 3}
    func(1, *li, **s)
    #执行结果
    1
    (2, 2, 2, 2)
    {'z': 3, 'v': 3}
    def func(x, *args, **kwargs):
      print(x)
      print(args)
      print(kwargs)
    func(1, 2, 2, 2, 2, z = 3, v = 3)
    
    #执行结果
    1
    (2, 2, 2, 2)
    {'z': 3, 'v': 3}
  • 相关阅读:
    第二次作业
    初学JAVA的 感想 尹鑫磊
    初学JAVA 感想
    《将博客搬至CSDN》
    JAVA中的几种内部类
    JAVA-静态变量与实体变量
    teacher页面的代码
    测试说明书的概述和摘要
    网站的概述
    html与xhtml的区别
  • 原文地址:https://www.cnblogs.com/guoruxin/p/9882178.html
Copyright © 2020-2023  润新知