定义函数
    Python中定义函数要使用def语句。
    依次写出函数名、括号、括号中的参数和冒号,在缩进块中编写函数体,通过return语句返回函数返回值。如:
   
                    def my_abs(x):
                    if x >= 0:
                        return x
                    else:
                        return -x
                       
    一旦执行到return,函数就执行完毕。即使函数未使用return语句,函数执行完毕后也会返回结果,只是结果为None。
    return None可以简写为return。
            >>> def kk(x):
            ...     if x == 0:
            ...             return 'zero'
            ...     elif x < 0:
            ...             x = x + 1
            ...             return x
            ...     elif x > 0:
            ...             return x - 100
            ...
            >>> kk(10)
            -90
            >>> kk(0)
            'zero'
            >>> kk(-100)
            -99
           
函数保存到文件后的调用
    如果已经将定义的函数定义保存为.py文件了(如:aaa.py),那么可在该文件的当前目录下启动Python解释器,使用 from aaa import kk 来导入存放在aaa.py文件中的 kk() 函数 , 文件名不含.py扩展名。
   
空函数
    定义一个什么也不做的空函数,可以使用pass语句,如:
        def nothing():
            pass
空函数可以用来做占位符,例如,在程序框架阶段,可能函数的详细代码还未去完成,可以先写一个pass语句,让代码框架能运行起来。pass还可以在其他语句中(如 if)使用。
参数检查
    先对比一下定义函数和内置函数的不同:
        1.定义一个求绝对值的函数abs_own,
            def abs_own(x):
                if x > 0:
                    return x
                else:
                    return -x
        2.现在对该函数传送错误参数,如:
                >>> abs_own(5)
                5
                >>> abs_own(-5)
                5
                >>> abs_own('a')
                Traceback (most recent call last):
                  File "<stdin>", line 1, in <module>
                  File "<stdin>", line 2, in abs_own
                TypeError: unorderable types: str() > int()
               
        3.对内置求绝对值函数abs传送错误参数,如:
                >>> abs(-5)
                5
                >>> abs('a')
                Traceback (most recent call last):
                File "<stdin>", line 1, in <module>
                TypeError: bad operand type for abs(): 'str'
    通过对比2和3的结果,定义函数的报错信息与内置函数的报错信息不同,定义函数在遇到参数数据类型不对时,无法为我们进行参数检查。
   
isinstance() 数据类型检查
    用abs_own()举例子,要求传入的参数只可以是整数或浮点数,如果参数非法则抛出错误信息:
        def abs_own(x):
            if not isinstance(x, ( int , float ) ):
                raise TypeError( 'bad operand type' )
            if x >= 0:
                return x
            else:
                return -x
    再次进行错误参数传递,结果为:
            >>> abs_own(5)
            5
            >>> abs_own(-5)
            5
            >>> abs_own('a')
            Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
              File "<stdin>", line 3, in abs_own
            TypeError: bad operand type #抛出了预定的错误信息。
           
函数返回多个值
    实际上,函数返回的是单一值(其实是一个tuple), 因为在返回tuple时可以省略括号,所以多个变量可以通过获取tuple元素位置的方式,按照位置来获取对应的值。
   
   
练习:定义函数,解一元二次方程ax^2 + bx + c = 0
            import math
            def fangcheng(a,b,c):
                if not isinstance(a, (int,float) ):
                        raise TypeError(print(a,'must be a number'))
                if not isinstance(b, (int,float) ):
                        raise TypeError(print(b,'must be a number'))
                if not isinstance(c, (int,float)):
                        raise TypeError(print(c,'must be a number!'))
                if pow(b,2) - 4 * a * c < 0:
                        return('无解')
                else:
                        x = []
                        x.append(  ( -b + math.sqrt(pow(b,2) - 4 * a * c))     /    (2 * a)    )
                        x.append(  ( -b - math.sqrt(pow(b,2) - 4 * a * c))     /    (2 * a)    )
                        return x
            xi = int(input('1 number'))
            xii = int(input('2 number'))
            xiii = int(input('3 number'))
            print(fangcheng(xi,xii,xiii))
    #对abc的值的判断其实有问题,如果b、c为0 ,那么这个函数就报错了。

Day5 - 02 定义函数的更多相关文章

  1. PHP自己定义函数及数组

    个人原创博客:http://www.phpthinking.com/archives/350 一.自己定义函数 自己定义函数就是我们自己定义的函数.在PHP中自己定义函数格式例如以下: 1 funct ...

  2. Entity Framework 6 Recipes 2nd Edition(11-1)译 -> 从“模型定义”函数返回一个标量值

    第11章函数 函数提供了一个有力代码复用机制, 并且让你的代码保持简洁和易懂. 它们同样也是EF运行时能利用的数据库层代码.函数有几类: Rowset Functions, 聚合函数, Ranking ...

  3. Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 用”模型定义”函数过滤实体集

    11-2. 用”模型定义”函数过滤实体集 问题 想要创建一个”模型定义”函数来过滤一个实体集 解决方案 假设我们已有一个客户(Customer)和票据Invoice)模型,如Figure 11-2所示 ...

  4. Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 为一个”模型定义”函数返回一个计算列

    11-3. 为一个”模型定义”函数返回一个计算列 问题 想从”模型定义”函数里返回一个计算列 解决方案 假设我们有一个员工(Employee)实体,属性有: FirstName, LastName,和 ...

  5. Entity Framework 6 Recipes 2nd Edition(11-4)译 -> 在”模型定义”函数里调用另一个”模型定义”函数

    11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11 ...

  6. Entity Framework 6 Recipes 2nd Edition(11-5)译 -> 从”模型定义”函数返回一个匿名类型

    11-5. 从”模型定义”函数返回一个匿名类型 问题 想创建一个返回一个匿名类型的”模型定义”函数 解决方案 假设已有游客(Visitor) 预订(reservation)房间(hotel ) 的模型 ...

  7. Entity Framework 6 Recipes 2nd Edition(11-6)译 -> 从一个”模型定义”函数里返回一个复杂类型

    11-6.从一个”模型定义”函数里返回一个复杂类型 问题 想要从一个”模型定义”函数返回一个复杂类型 解决方案 假设我们有一个病人(patient)和他们访客(visit)的模型,如 Figure 1 ...

  8. Javascript学习笔记:3种定义函数的方式

    ①使用函数声明语法定义函数 function sum(num1,num2){ return num1+num2; } ②使用函数表达式定义函数 var sum=function(num1,num2){ ...

  9. 应用C#和SQLCLR编写SQL Server用户定义函数

    摘要: 文档阐述使用C#和SQLCLR为SQL Server编写用户定义函数,并演示用户定义函数在T-SQL中的应用.文档中实现的 Base64 编码解码函数和正则表达式函数属于标量值函数,字符串分割 ...

随机推荐

  1. Linux——CentOS 7 systemctl和防火墙firewalld命令

    一.防火墙的开启.关闭.禁用命令 (1)设置开机启用防火墙:systemctl enable firewalld.service (2)设置开机禁用防火墙:systemctl disable fire ...

  2. Windows常用的网络命令

    命令 说明 ipconfig 查看网络配置的信息 ping 测试网络是否连通 tracert 网络诊断工具,可以列出分组经过的路由节点 net 有添加用户.开启服务等功能 netstat 显示协议统计 ...

  3. Hadoop window提交出错:Permission denied

    错误信息: Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlExcep ...

  4. Navicat总是提示主键不存在问题

    Windows 和 Linux:打开navicat > 找到工具 > 点击选项- > 外观 > 点击数据 & 网格 > 取消勾选显示主键警告 > 确定. M ...

  5. MathType可以和哪些Microsoft Office版本一起使用?

    Office类软件可能是我们碰到电脑后,最先接触到的电脑软件了.尤记得,当初的微机课一开始就会讲word和excel的使用,一开始可能学不太明白,但后来越来越频繁的使用office软件,不说offic ...

  6. 头秃了,使用@AutoConfigureBefore指定配置类顺序竟没生效?

    持续原创输出,点击上方蓝字关注我 前言 日常工作中对于Spring Boot 提供的一些启动器可能已经足够使用了,但是不可避免的需要自定义启动器,比如整合一个陌生的组件,也想要达到开箱即用的效果. 在 ...

  7. Word1-提取图片文字

    1.OneNote # 将图片以图片格式粘贴在OneNote中-右键选择"复制图片中的文本"-粘贴"只保留文本"即可 这种方式识别率较高!!! 2.手机QQ图片 ...

  8. django搭建

    1.进入终端使用虚拟环境安装---pip install django==2.2 2.创建新的工程django-admin startproject bookpro 3.创建app或模块 使用djan ...

  9. 决胜IT十八招-前言

    决胜IT十八招 走资讯这一行转眼间八年多了,从大学的时候,我有长达十年的时间思索在从事软体开發这一行到底怎麽存活下来,这思考下来,为自己总算找到一个出口来,这十八招只是其一的绝学,见阵这一行干软体开發 ...

  10. 团队作业第六次——Beta冲刺

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 代码规范与计划 代码 ...