一、变量
1)局部变量
**解释:**在函数内部定义变量名称
def test():
a = 10
print(a)
#调用函数
test()
打印结果
**注:**1. 局部变量只能用于当前的这个函数。
2.在一个文件里可以定义多个同名的局部变量,并且不受影响
用处:可以用来临时储存数据
2)全局变量
**解释:**在函数外声明的变量,能够在定义的所有函数里使用。并且全局变量要在所有函数的最上方。(写函数之前先把全局变量给定义了)
s = 100
def test():
print(s)
1.全局变量和局部变量名字一样时
a = 200
def test():
a = 100
print(a)
a = 300
print(a)
#调用函数
test()
打印结果
**注:**当全局变量和局部变量名字一样时,函数会使用内部的局部变量。
局部找–>全局找–>报错
2.修改全局变量
方法: global+需要修改变量名
**不可修改的变量类型:**数字、元祖、字符串
x = 10
def test():
# x = 100
# print(x)
global x
x = 1010
print(x)
#调用函数
test()
print(x)
打印结果
可以看到此时调用函数和直接打印x都变成了1010,证明在函数内部我们成功修改了全局变量。
list、字典、集合会在定义函数打印后改变。参考
li2 = [1,2]
def test2(a):
a += a
print(a)
#调用函数
test2(li2)
print(li2)
打印结果
3.使用函数外层变量
nonlocal:使用函数的外层变量
def test():
num = 2
def test2():
nonlocal num
num *= 2
print(num)
return test2()
#调用函数
test()
二、装饰器
定义: 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。
设计一个简单银行系统
def bank(accountID,name,money=0):
print()
def seeMoney():
print("操作成功,剩余余额:", money)
def putMoney(number):
nonlocal money
if isinstance(number, (int, float)) == True:
if number >= 0:
money = money + number
else:
print("存款金额不能为负数!")
else:
print("存款金额应该为数字类型!")
seeMoney()
def getMoney(number):#取款函数
nonlocal money
if isinstance(number,(int,float))==True:
if number>=0 and number<=money:
money=money-number
else:
print("余额不足!")
else:
print("取款金额应该为数字类型!")
seeMoney()
def menu():#定义菜单项
while True:
try:
opNum = int(input("1.存钱 2.取钱 3.查询余额 4.退出\n选择你要办理的业务:"))
if opNum == 1:
number = int(input("请输入存款金额:"))
putMoney(number)
elif opNum==2:
number=int(input("请输入取款金额:"))
getMoney(number)
elif opNum==3:
seeMoney()
elif opNum==4:
print("退卡成功!\n")
break
else:
print("请输入有效操作!")
except:
print("请输入有效操作!")
return menu
users=[]#保存银行的所有储户
users.append(bank(1001,"张三"))
#使用索引调用函数
users[0]()
试用一下