函数day10

第一部分:

函数是第一类对象:指的是函数名指向的值(函数)可以被当做数据去使用

def func(): # func=函数的内存地址
print('from func')
print(func)

一:可以被引用

f=func
print(f)
f()

二:可以当做参数传给另外一个函数

def bar (x):

      print(x)

bar(age)

bar(func)

三:可以当作一个函数的返回值

def bar(x):

       return x

res=bar(func)

print(res)

四:可以当作容器类型的元素

l=[age,func,func()]

print(l)

def login():

      print('login')

def register():
print('register')

def shopping():
print('shopping')

def pay():
print('pay')


def transfer():
print('transfer')

func_dic={
'1':login,
'2':register,
'3':shopping,
'4':pay,
'5':transfer
}
# print(func_dic)

msg="""
0 退出
1 登陆
2 注册
3 购物
4 支付
5 转账
"""

while True:
print(msg)
choice=input('请输入您的操作: ').strip()
if choice == '0':break
# if choice == '1':
# login()
# elif choice == '2':
# register()
# elif choice == '3':
# shopping()
# elif choice == '4':
# pay()
# else:
# print('输入错误指令,请重新输入')
if choice in func_dic:
func_dic[choice]()
else:
print('输入错误指令,请重新输入')

第二部分:

一:函数的嵌套使用:

在调用一个函数过程中,其内部代码又调用了其它函数

def max2(x,y):
if x > y:
return x
else:
return y

def max4(a,b,c,d):
res1=max2(a,b)
res2=max2(res1,c)
res3=max2(res2,d)
return res3

print(max4(1,2,3,4))
二:函数的嵌套定义:一个函数内部又定义了另外一个函数
def f1():
print('from f1')
def f2():
print('from f2')
def f3():
print('from f3')
f3()
f2()
f1()

第三部分:
1 什么是名称空间namespace
名称空间就是用来存放名字与值内存地址绑定关系的地方(内存空间)

age=18
但凡查找值一定要通过名字,访问名字必需去查找名称空间


2 名称空间分为三大类
内置名称空间:存放的是python解释器自带的名字
例如:
len
max
print

全局名称空间:存放的是文件级别的名字
例如:以下名字中x\y\z\b\foo都会存放于全局名称空间中
x=1
y=2
if x == 1:
z=3

while True:
b=4
break

def foo():
m=3

局部名称空间:在函数内定义的名字
例如:
foo内的m这个名字一定是存放于一个局部名称空间中


生命周期:
内置名称空间:在解释器启动时则生效,解释器关闭则失效
全局名称空间:在解释器解释执行python文件时则生效,文件执行完毕后则失效
局部名称空间:只在调用函数时临时产生该函数的局部名称空间,改函数调用完毕则失效

加载顺序:
内置->全局->局部

查找名字的顺序:
基于当前所在位置往上查找
假设当前站在局部,查找顺序:局部->全局->内置
假设当前站在全局,查找顺序:全局->内置
案列:
x=111
def outer():
def inner():
print('from inner',x) # x访问的时全局名称空间中x
return inner

f=outer()
# print(f)

x=222
f()

第四部分:1 什么是闭包函 闭:指的是闭包函数是定义在一个函数内部的函数
    包:该内部函数包含对外层函数作用域名字的引用

需要结合函数对象的概念将闭包函数返回到全局作用域去使用,从而打破函数的层级限制
def outter():
x=111
def inner():
print(x)
return inner

f=outter() #f=outter内的inner

# x=22222
# f()
def func():
x=3333
f()
func()
2 为何要用闭包函数
闭包函数提供了一种为函数体传值的解决方案
3 如何用闭包函数
为函数体传值的方式一:参数
def func(x,y):
print(x+y)

func(1,2)

为函数体传值的方式二:闭包
def outter(x,y):
# x=1
# y=2
def func():
print(x+y)
return func

f=outter(1,2)
f()
f()
f()
 

转载于:https://www.cnblogs.com/flierone/p/9397549.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值