函数


精髓:可以把函数当成变量去用
func=内存地址

def func():
print('from func')

1、可以赋值
 f=func
 print(f,func)
 f()
2、可以当做函数当做参数传给另外一个函数
 def foo(x): ##### x = func的内存地址
     ##### print(x)
     x()

 foo(func) ##### foo(func的内存地址)
3、可以当做函数当做另外一个函数的返回值
 def foo(x): ##### x=func的内存地址
     return x ##### return func的内存地址

 res=foo(func) ##### foo(func的内存地址)
 print(res) ##### res=func的内存地址

 res()
4、可以当做容器类型的一个元素
 l=[func,]
 ##### print(l)
 l[0]()

 dic={'k1':func}
 print(dic)
 dic['k1']()
函数对象应用示范:
 def login():
     print('登录功能')


 def transfer():
     print('转账功能')


 def check_banlance():
     print('查询余额')

 def withdraw():
     print('提现')


 def register():
     print('注册')

 func_dic={
     '1':login,
     '2':transfer,
     '3':check_banlance,
     '4':withdraw,
     '5':register
 }

 ##### func_dic['1']()


 while True:
     print("""
     0 退出
     1 登录
     2 转账
     3 查询余额
     4 提现
     5 注册
     """)
     choice = input('请输入命令编号:').strip()
     if not choice.isdigit():
         print('必须输入编号,傻叉')
         continue

     if choice == '0':
         break


     if choice in func_dic:
         func_dic[choice]()
     else:
         print('输入的指令不存在')

     ##### if choice == '1':
     #####     login()
     ##### elif choice == '2':
     #####     transfer()
     ##### elif choice == '3':
     #####     check_banlance()
     ##### elif choice == '4':
     #####     withdraw()
     ##### else:
     #####     print('输入的指令不存在')
修正
def login():
	print('登录功能')


def transfer():
	print('转账功能')


def check_banlance():
	print('查询余额')


def withdraw():
	print('提现')


def register():
	print('注册')


func_dic = {
	'0': ['退出', None],
	'1': ['登录', login],
	'2': ['转账', transfer],
	'3': ['查询余额', check_banlance],
	'4': ['提现', withdraw],
	'5': ['注册', register]
}
func_dichttps://www.baidu.com')
get('https://www.cnblogs.com/linhaifeng')
get('https://zhuanlan.zhihu.com/p/109056932')
传参的方案二:
def outter(url):
	##### url='https://www.baidu.com'
	def get():
		response=requests.get(url)
		print(len(response.text))
	return get

baidu=outter('https://www.baidu.com')
baidu()

cnblogs=outter('https://www.cnblogs.com/linhaifeng')
cnblogs()

zhihu=outter('https://zhuanlan.zhihu.com/p/109056932')
zhihu()

今日作业:
1、函数对象优化多分支if的代码练熟
2、编写计数器功能,要求调用一次在原有的基础上加一
温馨提示:
I:需要用到的知识点:闭包函数+nonlocal
II:核心功能如下:
def counter():
x+=1
return x

    要求最终效果类似
        print(couter()) ##### 1
        print(couter()) ##### 2
        print(couter()) ##### 3
        print(couter()) ##### 4
        print(couter()) ##### 5
周末作业
编写ATM程序实现下述功能,数据来源于文件db.txt
0、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt
1、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,登录成功后记录下登录状态(提示:可以使用全局变量来记录)

下述操作,要求登录后才能操作

1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱
3、提现功能:用户输入提现金额,db.txt中该账号钱数减少
4、查询余额功能:输入账号查询余额