模块化编程
指把程序进行封装(函数封装,面向对象,文件...)
10. 函数
- 定义
def 函数名([参数列表]):
当前函数的具体功能代码... - 调用
函数名([参数列表]):
系统将函数调用的参数和局部变量存放在内存的哪一部分:stack
def func(x):
if not instance(x,(int,float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
10.1 函数的参数类型
普通参数,默认参数,收集参数,命名关键字参数
普通参数
就是位置参数,也叫顺序参数,也是必须传递的参数 ——可把普通函数的普通参数按照关键字参数进行传递
def a(age, name):
print(age)
print(name)
a(name='dsgs',age=3)
默认参数
比如要求有三个参数,x,y,i,至少要传递两个
这是最后一个参数就是默认参数,但是默认参数,需要在定义形参时,指定默认值
def func(x,y,i=100):
print(x,y,i)
调用传递了默认的参数,那么里面使用的就是传递的实参
func(1,2,3)
调用没有传递默认的参数,使用默认值
func(1,2)
默认参数必须指向不变对象!
def add_end(L=[]):
L.append('END')
return L
# 修改后
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
>>> add_end()
>>> add_end()
收集参数
——定义一个形参,专门收集多余的实参,又叫 可变参数
——或者理解为,不确定要传递多少个实参,直接用一个形参来接收
——定义函数时,在形参前面加一个 * 号,如:*args,*m
——接收的多余参数,会存储在args/m中,形成一个元组
def func(a,x="+",*args):
if x == "+":
print('add',args)
else:
print('minus',args)
func(1.2,"-",2,3); minus (2, 3)
命名关键字参数
——关键字参数定义在 收集参数 后面
——关键字参数必须通过形参的名字来进行传递
def lo(a,b,c=3,*args,name):
print(a,b,c)
print(args)
print(name)
lo(1,2,4,5,6,7,name="admin")
关键字参数收集
——普通收集参数,会把多余的参数收集为 元组
——#关键字参数收集,会把多余的关键字参数收集为 字典
def lo(a,b,c=3,*args,name,age,**kw):
print(a,b,c)
print(args)
print(kw)
lo(1,2,6,112,1133,name='lim',age=44,sex='fel', wo='ha')
- 注意形参声明的位置:
- 普通参数,默认参数,收集参数,关键字参数,关键字收集参数!!
- print(a=11,b=22,c=