一、命名关键字
就是在*后面参数都是命名关键字参数
特点是必须传值,结束函数必须按照key=value的形式,必须要用指定的key名
def foo(x,y,*,z)
print(x,y,z)
foo(1,2,z=3)
二、函数的嵌套调用:在函数内又调用了其他函数
def max2(x,y)
if x>y:
return x
else:
return y
def max3(x,y,z):
res1=max2(x,y)
res2=max2(res1,z)
return res2
print(max3(11,200,1))
2、函数的嵌套定义:在函数内定义其他函数
def func1():
print('aa')
def fun2() #func2=内存地址
print('bb')
print(fun2)
fun2()
fun1()
def f1():
print('f1')
def f2():
print('f2')
def f3():
print('f3')
f3()
f2()
f1()
三、名称空间:存放名字与值绑定关系的地方
名称空间分三类:
1、内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,关闭则失效
2、全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者在文件执行间被删除失效
3、局部名称空间:存放函数内定义的名字(函数的参数以及函数内的名字都 存放与局部名称空间),
在函数调用时临时生效,函数结束则失效
def func(x):
y=2
fun(1)
加载顺序:内置名称空间-》全局名称空间-局部名称空间
查找名字:局部名称空间->全局名称空间->内置名称空间
四:作用域
全局作用域:包含内置名称空间与全局名称空间的名字,
特点
在任何位置都能访问的到
该范围内的名字会伴随程序整个生命周期
局部作用域:包含的是局部名称空间的名字
特点:
只能在函数内使用
调用函数时生效,调用结束失效
函数在python中第一类对象?
1、可以被引用
2、可以当中参数传入
3、可以当中函数的返回值
4、可以当中容器类型的元素
def auth():
print('认证')
def reigster():
print('注册')
def search():
print('查看')
l={'1':auth,
'2':reigster,
'3':search,
}
def interactive():
while True:
print('''
1、认证
2、注册
3、查看
''')
choice=input('>>..').strip()
if choice in l:
l[choice]()
else:
print('非法操作')
interactive()
闭包函数
指定义在函数内部的函数
作用域关系在函数定义阶段就规定死了,与调用位置无关
将值以参数的形式传入
import requests
def get(url):
response=requests.get(url)
if response.status_code == 200:
print(response.text)
get('https://www.baidu.com')
import requests
import time
def outter(url): #url='https://www.baidu.com'
# url='https://www.baidu.com'
def get():
response=requests.get(url)
if response.status_code == 200:
print(response.text)
return get
baidu=outter('https://www.baidu.com')
python=outter('https://www.python.org')