Python之旅.第三章.函数
一、命名关键字参数:
什么是命名关键字参数?
格式:在*后面参数都是命名关键字参数
特点:
1 必须被传值
1 约束函数的调用者必须按照key=value的形式传值
2 约束函数的调用者必须用我们指定的key名
def foo(x,y,*,z): #创建foo函数,z为命名关键字参数
print(x,y,z)
#foo(1,2,aaa=3) #报错,z为命名关键字参数,只能用用关键字z=值
foo(1,2,z=3)
——————————————————————————————
def auth(*args,name,pwd): #设定,name,pwd为命名关键字参数
print(name,pwd)
auth(pwd='213',name='egon') #输入关键字参输
二、函数的嵌套:
1、函数的嵌套调用:在函数内又调用了其他函数
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,199,2))
2、函数的嵌套定义:在函数内又定义其他函数
def func1(): #定义func1函数
print('from func1')
def func2(): #func2=内存地址 #嵌套定义func2函数
print('from func2')
print(func2) #<function func1.<locals>.func2 at 0x0000024907A098C8> #输出func2函数名地址
func2()
func1()
——————————————————————————————————
def f1(): #嵌套定义,调用f1执行,得出所有函数输出的值,全部被使用
print('f1')
def f2():
print('f2')
def f3():
print('f3')
f3()
f2()
f1()
'''
f1
f2
f3
'''
三、命名空间与作用域
一:名称空间:存放名字与值绑定关系的地方
x=1111111111
def func():
pass
二:名称空间分为三类
1 内置名称空间:存放Python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效
2、全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者在文件执行期间被删除则失效
3、局部名称空间:存放函数内定义的名字(函数的参数以及函数内的名字都存放与局部名称空间),
在函数调用时临时生效,函数结束则失效
加载顺序:内置名称空间-》全局名称空间-》局部名称空间
查找名字:局部名称空间-》全局名称空间-》内置名称空间
len='global' #调用f1,运行到f2方法输出len,从当前向外查找值,最后输出为global
def f1():
# len=1
def f2():
# len=2
print(len)
f2()
f1()
三:作用域
全局作用域:包含的是内置名称空间与全局名称空间的名字,
特点
1在任何位置都能够访问的到
2该范围内的名字会伴随程序整个生命周期
局部作用域:包含的是局部名称空间的名字
特点:
1、只能在函数内使用
2、调用函数时生效,调用结束失效
四、函数对象
函数在python中是第一类对象?
1、可以被引用
def bar(): #创建bar函数
print('from bar')
f=bar #引用bar函数
f()
2、可以当中参数传入
def bar(): #创建bar函数
print('from bar')
def wrapper(func): #func=bar #创建wrapper函数,设定参数func
func() #bar()
wrapper(bar) #把bar当做参数传入
3、可以当做函数的返回值
def bar(): #创建bar函数
print('from bar')
def foo(func): #func=<function bar at 0x00000225AF631E18> #创建foo函数,设定变量func,返回变量func
return func #return <function bar at 0x00000225AF631E18>
f=foo(bar) #f=<function bar at 0x00000225AF631E18> #把bar函数当做参数传入变量func,成为foo函数的返回值
f()
4、可以当中容器类型的元素
def get(): #创建get 函数
print('from get')
def put(): #创建put函数
print('from put')
l=[get,put] #建立列表输入两个函数
l[0]() #安索引调用get函数
——————————————————————————————————
例:
def func():
print('from func')
1、func可以被引用
f=func
2、func可以当作参数传给x
def bar(x):
print(x)
x()
bar(func)
3、func还可以当作返回值
def bar(x): # x=func
return x #return func
res=bar(func) #res=func
print(res)
res()
4 可以当中容器类型的元素
def auth():
print('登陆。。。。。')
def reigster():
print('注册。。。。。')
def search():
print('查看。。。。')
def transfer():
print('转账。。。。')
def pay():
print('支付。。。。')
dic={
'1':auth,
'2':reigster,
'3':search,
'4':transfer,
'5':pay
}
print(dic)
dic['2']()
def interactive():
while True:
print("""
1 认证
2 注册
3 查看
4 转账
5 支付
""")
choice=input('>>: ').strip()
if choice in dic:
dic[choice]()
else:
print('非法操作')
interactive()
五、闭包函数
1、闭包函数
闭:指的是定义在函数内部的函数
!!!作用域关系 在函数定义阶段就规定死了,与调用位置无关
def outter(): #创建outter函数,创建变量x
x=2
def inner(): #创建inner函数,输出x
# x=1
print('from inner',x)
return inner #返回inner函数
f=outter() #f=inner #把返回的嵌套定义函数赋予f,这样f就可以调用被嵌套定义的函数了
f()
闭包函数:
1、定义在函数内部的函数
2、 并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数
def outter(): #定义函数outter,并定义变量name
name='egon'
def inner():
print('my name is %s' %name) #定义函数inner,输出name
return inner #返回函数inner
f=outter() #把嵌套定义函数inner赋值给f
了解:
为函数体传值的方式
方式一:将值以参数的形式的传入
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 #定义函数outter,形参url
def get(): #定义函数 get 根据网址,怕网址数据
response=requests.get(url)
if response.status_code == 200:
print(response.text)
return get #返回函数get
baidu=outter('https://www.baidu.com') #把带实参百度地址的函数赋予baidu,以后只需要运行只需要运行baidu()就可以了
python=outter('https://www.python.org') #把带实参python地址的函数赋予python,以后只需要运行只需要运行python()就可以了