实参和形参:
定义函数括号里的一般叫形参
调用时括号里传递的参数一般叫实参
def students(age): print('my age is %s' % age) students(18) age就是形参,18就是实参
参数的具体应用:
1、位置参数:按照从左到右的顺序定义的参数
位置形参:必选参数
位置实参:按照位置给形参传值
def foo(x,y): print(x,y) foo(1,2) #结果:1,2
2、关键字参数:
按照key=value的形式定义的实参
无需按照位置为形参传值
注意的问题:
1. 关键字实参必须在位置实参右面
2. 对同一个形参不能重复传值
def foo(x,y): print(x,y) foo(y=2,x=1) 结果:1,2
3、默认参数:
形参在定义时就已经为其赋值
可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)
注意的问题:
1. 只在定义时赋值一次
2. 默认参数的定义应该在位置形参右面
3. 默认参数通常应该定义成不可变类型
def foo(x,y=2): print(x,y) foo(1) #结果:1,2 foo(1,3) #结果:1,3
4、可变长参数:
可变长指的是实参值的个数不固定
而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*argsh和**kwargs
#*args:传递的参数会变成元组 def foo(x,y,*args): print(x,y,args) foo(1,2,3) #结果:1 2 (3,)
#**kwargs:传递的参数会变成字典 def foo(x,y,**kwargs): print(x,y,kwargs) foo(1,2,a=3,b=4) #结果:1 2 {'a': 3, 'b': 4}
return 语句:
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。
不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:
# 可写函数说明 def add_sum(arg1, arg2): # 返回2个参数的和." total = arg1 + arg2 print("函数内 : ", total) return total # 调用sum函数 total = add_sum(10, 20)
名称空间:
1.内置名称空间:比如print,max...(ctrl+左键查看源代码)这些内置函数所存在的地方叫做内置名称空间
2.全局名称空间:顶格写的属于全局名称空间里面的
3.局部名称空间:函数里面的代码属于局部名称空间
作用域:名称空间的访问顺序
总结:三者的加载顺序
内置 - -->全局 - -->局部
三者的访问顺序
局部 - -->全局 - -->内置
def f1(): def f2(): def f3(): print(print) f3() f2() f1()