【Python】08.函数基础(上)

2017-11-04  本文已影响0人  Raimond

函数

就像中学所学的一样,也可以称之为“方法”,可以用来解决各种数学计算或者实现切合实际的功能,例如计算圆的面积 S=PIrr,只要知道半径,什么圆的面积都可以计算出来。
  这就是一种抽象,再举个栗子:
    计算数列的和:1+2+3+...+100,可以抽象记成:
                  

求和符号
  而计算机程序也是一样,函数就是一种最基本的一种代码抽象的方式。

定义函数

在 Python 中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。举例:

def my_abs(x):
                if x >= 0: 
                  return x 
                else:
                  return -x

函数体内部的语句在执行到 return 时,函数就执行完毕并将结果返回,如果没有 return语句也会返回,只不过返回结果是 None。 return None 可以简写为 return。

空函数

什么都不做的函数,只是作为占位符,让代码可以正常运行,以后有什么功能可以添加进去。
               def nop():
                 pass
  而 pass 语句还可以放在其它语句里面,也是占位:
               if age >= 18:
                 pass

调用函数

在写完函数之后,我们可以进行调用。而 Python 也内置了不少的函数,调用时需要知道函数的名称和参数。内置函数自行官网,不熟的可以 help(【函数名】)。例如调用绝对值函数,最大值函数,类型转换函数:
               >>> abs(100)
               100
               >>> abs(-20)
               20
               >>> max(2, 3, 1, -5)
               3
               >>> int('123')
               123
  当输入的函数参数数量不对,或者类型不对,Python 将会爆出相应错误。
  而函数名其实也是一个指向函数对象的引用,完全可以把函数名赋给一个变量,相当于起了个“别名”:
               >>> a = abs # 变量 a 指向 abs 函数
               >>> a(-1) # 所以也可以通过 a 调用 abs 函数
               1

函数的参数检查

当函数的参数数量不对的时候, Python 解释器会自动检查出来并抛出 TypeError:   
             >>> my_abs(1, 2)
             Traceback (most recent call last):
               File "<stdin>", line 1, in <module>
             TypeError: my_abs() takes 1 positional argument but 2 were given
  但是参数的类型不对,解释器就没法进行检查,除了早已编写过类型异常检查的内置函数。而自己编写时,数据类型检查可以用内置函数 isinstance() 实现
             def my_abs(x):
               if not isinstance(x, (int, float)):
                 raise TypeError('bad operand type')
               if x >= 0:
                 return x
               else:
                 return -x
  输入错误类型:
             >>> my_abs('A')
             Traceback (most recent call last):
               File "<stdin>", line 1, in <module>
               File "<stdin>", line 3, in my_abs
             TypeError: bad operand type

返回多个值

Python 的函数是可以返回多个值的,例如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的坐标:
             import math
             def move(x, y, step, angle=0):
               nx = x + step * math.cos(angle)
               ny = y - step * math.sin(angle)
               return nx, ny
  然后我们可以同时获得返回值:
               >>> x, y = move(100, 100, 60, math.pi / 6)
               >>> print(x, y)
               151.96152422706632 70.0
  但这是假象,Python 返回的还是一个单一的值:
               >>> r = move(100, 100, 60, math.pi / 6)
               >>> print(r)
               (151.96152422706632, 70.0)
  没错,Python 返回的是一个 tuple,语法上返回的 tuple 可以省略括号,而多个变量可以同时接收一个 tuple,按位置赋给对应的值。


Oh-damn-it-194980992
上一篇下一篇

猜你喜欢

热点阅读