函数的使用:先定义后使用 #与变量的定义相似
x=1 变量名==函数名
def func(): 值 == 函数值
print(‘hello world‘)
定义阶段: 只检测语法,不执行代码/
return返回值类型:
效果:只能返回一次值,终止函数的执行
无return 默认 None return返回值:如果只有一个则返回本身,多个值则为元组形式
形参<形式上存在,而实际不存在,变量名>与实参<实际存在,变量值>:
def foo(x,y):
return x+y
foo(1,2)
位置参数:按照从左到右的顺序依次定义的参数
def foo(x,y):
return x+y #按位置定义的形参必须传值,多一个不行,少一个不行
foo(1,2,3) #按位置定义的实参,与形参一一对应
关键词实参数:实参在定义时,按key=value形式定义
def foo(x,y):
print(x)
print(y)
foo(y=10,x=1) #关键词参数不受位置影响,不像位置实参与形参那样一一对应
注意:位置实参必须在关键字实参前面
既可以用位置实参又可以是关键词实参《实参的形式》,但是一个形参只能被传值一次
默认参数<形参>:定义阶段有值,默认阶段无值
def foo(x,y=10):
print(x)
print(y)
#形参的应用:值经常变化定义为位置形参,值大多数情况不变则可定义为默认实参
默认参数通常定义为不可变类型
默认参数只在被定义时赋值一次
注意:默认参数必须放在位置形参后面
可变长参数:指实参的个数不固定
#按位置定义的可变长度的实参:* #()元组形式保存 *等同于位置参数
#按关键字定义的可变长度的实参:** #{}字典格式保存
def func(x,y,*args): #x=1.y=2,args=(3,4,5,6)
print(x,y)
print(args)
fuc(1,2,3,4,5,6)
命名关键字参数:
定义在*后的形参,此类形参必须被传值,而且要求实参必须以关键字的形式传入
def register(name,age,**kwargs):
print(kwargs)
register(name=‘jason‘,age=18)
函数嵌套调用:
函数内部调用另外一个函数
函数嵌套定义:
def f1():
def f2():
def f3():...
def f1(): def f2(): def f3(): print(‘f3‘) print(‘f2‘) f3() print(‘f1‘) f2() f1()
名称空间: cmd/python/import this 最后一行有提示
存放名字与值的绑定关系
分三种:<加载顺序由上到下>
内置名称空间:python解释器自带的名字 ,解释器启动就生成这个空间
全局名称空间:文件级别定义的名字都会存放在全局名称空间,执行python文件时产生
不是内置定义的也不是函数内部的就是全局
局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效
def func(x,y):
z=3
加载顺序:内置名称空间>>>全局名称空间>>>>局部名称空间
取值:局部名称空间>>>全局名称空间>>>>内置名称空间
作用域:作用范围 ---->在定义阶段,作用域就固定死了。
分两种:
全局作用域:包含内置名称空间与全局名称空间的名字属于全局范围,
在整个文件的任意位置都能被引用,全局有效
局部作用域:局部名称空间属于局部范围,
只在函数内部可以被引用,局部有效。
局部作用域------>全局作用域
函数是第一类对象:指的是函数可以被当作数据传递
可被引用
可当作函数的参数
可以当作函数的返回值
可做
闭包
闭包函数:函数内部定义的函数,成为内部函数
该内部函数包含对外部作用域,而不是对全局作用域名字的