函数:就是完成特定功能的代码段
将重复的代码段封装成函数,可以提高代码利用率和实现抽象
1、Python提供了大量的内置函数
关于python的内置函数使用,可以参官网上的文档库https://docs.python.org/2/library/index.html,
中文版文档库http://python.usyiyi.cn/translate/python_278/library/functions.html
当然,也可以在交互命令行下,输入help(),然后输入帮助信息,退出帮助用Ctrl+C
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# ★常见内置函数之abs(n)==》绝对值
print abs(-20.1)
# print abs(-20,9) # 报错信息
# print abs('a') # 报错信息
# 常见内置函数之cmp(x,y)==》比较大小:x<y返回-1,x=y返回0,x>y返回1
print cmp(2,3)
print cmp(2,2)
print cmp(2,1)
print cmp(u'中文',2) # 字母对应的ASCII值
#常见内置函数之类型转换int(),float(),str(),unicode(),bool()
print int("123") # 全数字
# print int("123") # 报错信息
print str(123) # 全数字
print unicode('abc')
# ★函数名其实就是指向一个函数对象的引用,可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”
len_str = len
len_list = len
print len_str("abcd")
print len_list([1,2,3,4])
运行效果:
2、Python内置的函数只能协助解决部分问题,实际中最常用到的是自定义函数,将重复性高的代码段,自己封装成函数,以简化操作。同时自定义函数时应注意一些问题。
# ★★★自定义函数
PI = 3.14
def area_of_circle(r):
if r <= 0:
return None
else:
return PI * r * r
print area_of_circle(2)
# 自定义函数需要使用def语句,冒号后的代码块中写函数体
# 函数遇到return,立即结束,并返回结果。如果没有return,函数执行完毕,会自动返回None;return None等同于return
# ★空函数
# 如果想定义一个什么也不做的函数,或者函数体还没想好的函数,此时可以定义成一个空函数
def get_a_girlfriend():
pass
print get_a_girlfriend()
# pass语句表示什么也不做,常用作占位符或内容没想好的地方
if 19 >= 18:
pass
# ★参数检查==》借助内置函数isinstance()
# 解释器可以对自定义函数进行参数个数检查,但是不会进行参数类型检查,现在为完善自定义函数,自行设置参数检查
# 对area_of_circle(r)函数设置参数检查,传入的参数只允许是int和float
PI = 3.14
def circ_of_circle(r):
if not isinstance(r,(int,float)):
raise TypeError("bad operand type! only for int or float!")
if r <= 0:
return None
else:
return 2 * PI * r
# print circ_of_circle('a') # 查看报错
print circ_of_circle(2)
# ★函数同时返回多个值
# 需要提前说明的是,Python函数确实可以同时返回多个值,这点与其他语言有点不一样
# 导入Python内置的模块用关键字import。例如import 模块名。具体到某个方法可以用from 模块名 import 方法名
# 对于第一种,访问该模块内方法时需要模块名.方法名。第二种可以直接使用方法名
# 创建一个移动的点的位置坐标.参数是起始点坐标,位移大小,角度
import math
def Point_Move(x, y, displace, angle):
xx = x + displace * math.cos(angle)
yy = y - displace * math.sin(angle)
return xx, yy
nx, ny = Point_Move(100,100,20,math.pi / 6)
print nx, ny
# 从上看出,我们确实同时得到了两个返回值
print Point_Move(100,100,20,math.pi / 6)
# 但是,这句的返回值却是一个tuple类型的值【本质上返回的就是一个tuple】
nx, ny = Point_Move(100,100,20,math.pi / 6)
print nx
# 这句话说明返回的tuple可以由几个变量同时、分别对应接收【本质上返回的是tuple,但是写成返回多个值更方便分析数据】
运行效果: