Python学习笔记3 函数_20170614
# 函数
- 定义
def my_abs(x) : if not isinstance(x, (int, float)) : raise TypeError('bad operand type') if x>0 : return x; elif x == 0 :# 只是为了显示pass的作用,什么都不做。对于函数逻辑是不对的。 pass # pass 是占位符,什么都不做。 else : return -x
- 加载函数
假如函数 my_abs 定义在文件 abstest.py 中,调用的加载方式为:
from abstest import my_abs # 导入my_abs()
- 加载库
import math def move(x, y, step, angle=0) nx = x+step*math.cos(angle) ny = y+step*math.sin(angle) return nx, ny # 按照 tuple 方式返回多个变量
- 函数参数1 位置参数(最一般的参数)
见上面的例程,x、y、step
- 函数参数2 默认参数
见上面的例程,angle = 0
- 函数参数3 可变参数(类似tuple传入)(常用做法,调用更简单)
# 函数, number 是位置参数 def calc(numbers) : su = 0 for n in numbers: su = su+n*n return su # 调用 >>>calc([1,2,3]) >>>a = [1,2,3] >>>calc(a) # 这里都是以list作为参数传入 # 函数,*number 是可变参数 def calc(*numbers) : su = 0 for n in numbers: su = su+n*n return su # 调用 >>>calc(1,2,3) # 这是tuple >>>a = [1,2,3] >>>calc(*a) #
- 函数参数4 命令关键字参数(对参数4中可传入的类型加以限制)
def person(name, age, *, city, gender) : print(name, age, city, gender) # 表示参数 city 和 gender 一定要传入 # 可以缺省 # 可以设置默认值 def person(name, age, *args, city='Beijing', gender) : print(name, age, city, gender) # 注意 * ,是 city, gender 别于位置参数的标志符。
- 函数参数5 关键字参数(类似dict传入)
def person(name, age, **KeyWord) : print('name : ', name, 'age : ', age, 'other : ', KeyWord) # **KeyWord就是关键字参数 # 可以缺省调用 >>>persion('AA', 10) name : AA age : 10 other : {} # 传入参数,关键字参数就是一个 dict >>>person('AA', 10, city = 'Beijing', gender = 'M') name : AA age : 10 other : {'city' ;'Beijing', 'gender' : 'M'} # 先设计dict,;2种调用方法 >>> extra = {'city' : 'Beijing', 'gender' : 'M'} >>> person('AA', 10, **extra) >>> person('AA', 10, city=extra['city'], gender = extra['gender'])
- 函数参数的顺序
函数的参数顺序必须如下:
位置参数(list或者tuple传入)、
默认参数()、
可变参数(*L)(list或者tuple传入)、
命名关键字参数(*,d)(有限制的dict传入)、
键字参数(**d)(dict传入)