#函数是第一类对象的含义是函数可以被当作数据处理#
def func(): #func=<function func at 0x0584BA50>
print('from func')
# print(func)
x='hello'
1、引用
y=x
f=func
print(f)
f()
2、当作参数传给一个函数
len(x)
def foo(m):
# print(m)
m()
foo(func)
3、可以当作函数的返回值
def foo(x): #x=func
return x #return func
res=foo(func)
print(res)
res()
4、可以当作容器类型的元素
l=[x,]
l=[func,]
# print(l)
l[0]()
def pay():
print('支付。。。')
def withdraw():
print('取款。。。')
def transfer():
print('转账。。。')
def check_balance():
print('查看余额。。。')
def shopping():
print('购物。。。')
func_dic={
'1':pay,
'2':withdraw,
'3':transfer,
'4':check_balance,
'6':shopping
}
while True:
msg="""
1 支付
2 取款
3 转账
4 查看余额
5 退出
6 购物
"""
print(msg)
choice=input('>>: ').strip()
if choice == '5':break
if choice not in func_dic:
print('输入的指令不存在傻叉')
continue
1、 名称空间 namespaces
存放名字和值绑定关系的地方
2、名称空间分为三大类
内置名称空间:
作用:存放python解释器自带的名字
生命周期:
在解释器启动时生效,在解释器关闭时失效
全局名称空间:
作用:除了内置的与局部的名字外,其余都是全局名字
生命周期:
在文件执行时生效,在文件执行完毕时失效
例如:x,func,y,l,z都是全局名字(顶格写的,或者能立马执行)
x=1(顶格)
def func():
a=1 (函数调用时才生效,局部内存空间)
y=2
l=[1,2]
if 3 > 2:
if
if
if
z=3
局部名称空间:
作用:用于存放函数调用期间函数体产生的名字
生命周期:
在文件执行过程
如果调用了某个函数才会临时生效,在函数执行完毕后失效
三种名称空间的加载顺序是:
内置-》全局-》局部
名称空间就是用来存放名字与值的绑定关系的,所以但凡要查找名字
一定是从三者之一找到,查找顺序:
从当前所在的位置倒着查找,如果当前所在的位置是局部名称空间,
则查找顺序是:
局部-》全局-》内置
3、作用域:
域指的是区域、范围,作用域即作用的范围
全局作用范围,全局作用域(内置名称空间与全局名称空间)
全局有效,全局存活
局部作用范围,局部作用域(局部名称空间)
局部有效,临时存活
x=1
# len=100
def func():
y=2
len=1000
# print(len)
print(a)
# func()
print(len)
def func():
y=2
print(x)
x=1
func()
x=10
x=1
def f1():
def f2():
def f3():
zzz=333
print(x)
# x = 22222
f3()
# x=111111
f2()
def bar():
print(x)
f1()
bar()
作用域关系是在函数定义阶段就固定死了,但凡调用函数都需要跑到定义阶段去找作用域关系
x=1
def f1():
print(x)
# f1()
x=100000
def f2():
# print(f1)
x=111
f1()
f2()
函数对象+作用域:******
def f1():
x=1
def inner():
print('from inner',x)
return inner
f=f1()
# print(f)
def bar():
x=111
f()
bar()
x=1
def foo():
global x
x=2
foo()
print(x)
x=1
def f1():
def f2():
x=22222222
def f3():
global x
x=111
f3()
f2()
f1()
print(x)
x=1
def f1():
# x=33333
def f2():
# x=222
def f3():
nonlocal x #nonlocal只要不出函数就一层一层网上找,但不能到达全局的x=1
x=2000
f3()
print(x)
f2()
f1()
print(x)
在局部如果想要修改全局的可变类型,不需要借助任何声明,可以直接修改
在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量就可以直接修改了
x=[]
def f1():
x.append(1)
f1()
f1()
print(x)
def func(): #func=<function func at 0x0584BA50>
print('from func')
# print(func)
x='hello'
1、引用
y=x
f=func
print(f)
f()
2、当作参数传给一个函数
len(x)
def foo(m):
# print(m)
m()
foo(func)
3、可以当作函数的返回值
def foo(x): #x=func
return x #return func
res=foo(func)
print(res)
res()
4、可以当作容器类型的元素
l=[x,]
l=[func,]
# print(l)
l[0]()
def pay():
print('支付。。。')
def withdraw():
print('取款。。。')
def transfer():
print('转账。。。')
def check_balance():
print('查看余额。。。')
def shopping():
print('购物。。。')
func_dic={
'1':pay,
'2':withdraw,
'3':transfer,
'4':check_balance,
'6':shopping
}
while True:
msg="""
1 支付
2 取款
3 转账
4 查看余额
5 退出
6 购物
"""
print(msg)
choice=input('>>: ').strip()
if choice == '5':break
if choice not in func_dic:
print('输入的指令不存在傻叉')
continue
func_dic[choice]()
#函数的嵌套定义#
def f1():
def f2():
print('from f2')
f2()
f1()
from math import pi
def circle(radius,action='area'): #radius=10
def area():
return pi * (radius ** 2)
def perimeter():
return 2 * pi * radius
if action == 'area':
return area()
elif action == 'perimeter':
return perimeter()
print(circle(10))
print(circle(10,action='perimeter'))
函数的嵌套调用
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))
1、 名称空间 namespaces
存放名字和值绑定关系的地方
2、名称空间分为三大类
内置名称空间:
作用:存放python解释器自带的名字
生命周期:
在解释器启动时生效,在解释器关闭时失效
全局名称空间:
作用:除了内置的与局部的名字外,其余都是全局名字
生命周期:
在文件执行时生效,在文件执行完毕时失效
例如:x,func,y,l,z都是全局名字(顶格写的,或者能立马执行)
x=1(顶格)
def func():
a=1 (函数调用时才生效,局部内存空间)
y=2
l=[1,2]
if 3 > 2:
if
if
if
z=3
局部名称空间:
作用:用于存放函数调用期间函数体产生的名字
生命周期:
在文件执行过程
如果调用了某个函数才会临时生效,在函数执行完毕后失效
三种名称空间的加载顺序是:
内置-》全局-》局部
名称空间就是用来存放名字与值的绑定关系的,所以但凡要查找名字
一定是从三者之一找到,查找顺序:
从当前所在的位置倒着查找,如果当前所在的位置是局部名称空间,
则查找顺序是:
局部-》全局-》内置
3、作用域:
域指的是区域、范围,作用域即作用的范围
全局作用范围,全局作用域(内置名称空间与全局名称空间)
全局有效,全局存活
局部作用范围,局部作用域(局部名称空间)
局部有效,临时存活
x=1
# len=100
def func():
y=2
len=1000
# print(len)
print(a)
# func()
print(len)
def func():
y=2
print(x)
x=1
func()
x=10
x=1
def f1():
def f2():
def f3():
zzz=333
print(x)
# x = 22222
f3()
# x=111111
f2()
def bar():
print(x)
f1()
bar()
作用域关系是在函数定义阶段就固定死了,但凡调用函数都需要跑到定义阶段去找作用域关系
x=1
def f1():
print(x)
# f1()
x=100000
def f2():
# print(f1)
x=111
f1()
f2()
函数对象+作用域:******
def f1():
x=1
def inner():
print('from inner',x)
return inner
f=f1()
# print(f)
def bar():
x=111
f()
bar()
x=1
def foo():
global x
x=2
foo()
print(x)
x=1
def f1():
def f2():
x=22222222
def f3():
global x
x=111
f3()
f2()
f1()
print(x)
x=1
def f1():
# x=33333
def f2():
# x=222
def f3():
nonlocal x #nonlocal只要不出函数就一层一层网上找,但不能到达全局的x=1
x=2000
f3()
print(x)
f2()
f1()
print(x)
在局部如果想要修改全局的可变类型,不需要借助任何声明,可以直接修改
在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量就可以直接修改了
x=[]
def f1():
x.append(1)
f1()
f1()
print(x)