tmp domain dom 装饰 会有 引用 应用场景 invalid
上课第四天,打卡:
加勒比海盗今天上映;端午节公司发的粽子很有范!
函数,就是一个'锤子',一个具有特定功能的'锤子',使用者可以在适当的时候使用这个'锤子',而不用再去从头做一个'锤子';即可以直接拿来使用;
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
1. 组织结构不清晰,可读性差;
2. 代码冗余;
3. 无法统一管理且维护难度大;
1. 内置函数;Python 解释器自带的具有某些基础功能的'锤子';
2. 自定义函数;用户根据需求,自己定义写好的'锤子';
1. 定义阶段;
2. 使用阶段;
函数即变量,变量必须先定义后使用,未定义而直接引用函数,就相当于在引用一个不存在的变量名,必然会出错;
只检测语法,不执行代码;
函数调用阶段才会去执行具体代码;
- 1 def functionname( parameters ):
- 2 "函数_文档字符串"
- 3 function_suite
- 4 return[expression]
1. 无参函数;
应用场景仅仅只是执行一些操作,比如与用户交互,打印;
2. 有参函数;
需要根据外部传进来的参数,才能执行相应的逻辑;
3. 空函数;
编写代码之初,用来设计代码结构;
1. 先找到函数名字;
2. 根据 名字 +() 调用函数,执行函数体内的代码;
1. 语句形式:foo()
2. 表达式形式:3*len('hello')
3. 函数的执行结果当做另外一个函数的参数:range(len('hello'))
- 形参
即函数定义处 () 里的变量标识符;
- 实参
即函数调用处 () 里的变量;
- 意义
形参即变量名,实参即变量值;函数调用则将值绑定到形参变量上,函数调用结束,解除绑定;
- 位置参数
- 关键字参数
- 默认参数
- 可变长参数
- 命名关键字参数
- 1 可以被引用2 可以当作参数传递3 返回值可以是函数3 可以当作容器类型的元素
看看
操作文件:haproxy.cfg,实现对这个文件配置的新增、删除以及查询的功能;
- 新增的时候要考虑 backend 是否已存在,没有则新增 backend;有则在进一步判断是否存在响应的 record,有则不能重复插入,没有则可以插入;
- 删除的时候要判断是否存在用户想要删除的 record,不存在则反馈用户提示信息;存在的话就需要考虑 backend 含有几个 record,大于 1 个,则删除 record,如果只有 1 个 record,则需要把 record 和 backend 都要删除;
- 查询则是列出用户所输入的 backend 下的所有 record 信息;
- 1 #!/usr/bin/python
- 2 # -*- coding:utf-8 -*-
- 3
- 4
- 5 def get_backend_dict():
- 6with open('haproxy.cfg',mode='r',encoding='utf-8') as rf:
- 7content_list = rf.readlines()
- 8backend_dict = {}
- 9 foriin range(0, len(content_list)):
- 10 ifcontent_list[i].startswith('backend '):
- 11backend_dict[content_list[i].split()[1]] = i
- 12 return content_list,backend_dict
- 13
- 14 def select(data):
- 15content_list,backend_dict = get_backend_dict()
- 16 ifdatanot in backend_dict:
- 17 print('No backend record found.')
- 18 else:
- 19 foriinrange(backend_dict[data],len(content_list)-1):
- 20 ifcontent_list[i+1].startswith('backend '):
- 21 return
- 22 print(content_list[i+1],end='')
- 23
- 24 def add(data):
- 25content_list,backend_dict = get_backend_dict()
- 26sub_record_info =" server "+ data['record']['server'] +" " 27+ data['record']['server'] +" weight " 28+ str(data['record']['weight']) +" maxcon " 29+ str(data['record']['maxcon']) +"\n"
- 30backend_info ="\n"+"backend "+ data['backend'] +"\n"+ sub_record_info
- 31 ifdata['backend']in backend_dict:
- 32index = -1 33tmp_list = []
- 34 print('The backend:{} already exist, now to append a record...'.format(data['backend']))
- 35 foriinrange(backend_dict[data['backend']],len(content_list)-1):
- 36 ifcontent_list[i+1].startswith('backend '):
- 37index = i
- 38 break
- 39 else:
- 40tmp_list.append(content_list[i+1])
- 41 ifsub_record_infonot in tmp_list:
- 42 if-1 == index:
- 43 content_list.append(sub_record_info)
- 44 else:
- 45 content_list.insert(index,sub_record_info)
- 46with open('haproxy.cfg', mode='w', encoding='utf-8') as wf:
- 47 wf.writelines(content_list)
- 48 print("The backend:{} already exist, append a record successfully.".format(data['backend']))
- 49 else:
- 50 print("The record:{} already exist, add failed.".format(sub_record_info.strip()))
- 51 else:
- 52with open('haproxy.cfg',mode='a+',encoding='utf-8') as wf:
- 53 wf.write(backend_info)
- 54 print("New backend added successfully.")
- 55
- 56 def remove(data):
- 57content_list, backend_dict = get_backend_dict()
- 58 ifdata['backend']not in backend_dict:
- 59 print("The backend:{} doesn't exist, remove failed.".format(data['backend']))
- 60 else:
- 61tmp_list = []
- 62sub_record_info =" server "+ data['record']['server'] +" " 63+ data['record']['server'] +" weight " 64+ str(data['record']['weight']) +" maxcon " 65+ str(data['record']['maxcon']) +"\n"
- 66 ifsub_record_infonot in content_list:
- 67 print("The record:{} doesn't exist, remove failed.".format(sub_record_info.strip()))
- 68 return
- 69 else:
- 70 content_list.remove(sub_record_info)
- 71 foriinrange(backend_dict[data['backend']],len(content_list)-1):
- 72 ifcontent_list[i+1].startswith('backend '):
- 73 break
- 74 else:
- 75tmp_list.append(content_list[i+1])
- 76 if0 == len(tmp_list):
- 77content_list.remove(data['backend'])
- 78with open('haproxy.cfg',mode='w',encoding='utf-8') as wf:
- 79 wf.writelines(content_list)
- 80 print("The record:{} removed successfully.".format(sub_record_info.strip()))
- 81
- 82 if __name__=='__main__':
- 83info ='''
- 84 1:查询
- 85 2:增加
- 86 3:删除
- 87 4:退出程序
- 88 '''
- 89menu_dict = {
- 90 '1':select,
- 91 '2':add,
- 92 '3':remove,
- 93 '4':exit,
- 94 }
- 95 while True:
- 96 print(info)
- 97chioce = input('请输入操作序号>>> ').strip()
- 98 if '4'== chioce:break
- 99 if0 == len(chioce)orchiocenot inmenu_dict:continue
- 100 elif '1'== chioce:
- 101backend = input('请输入要查询的backend>>> ').strip()
- 102 if0 == len(backend):
- 103 print('Invalid input...')
- 104 else:
- 105 select(backend)
- 106 else:
- 107notice ='Input Fomat: backend domain|server(domain/ip)|weight value|maxcon value'
- 108 print(notice)
- 109data = input('请输入数据>>> ').strip()
- 110data_list = data.split('|')
- 111 if4 == len(data_list)anddata_list[2].isdigit()anddata_list[3].isdigit():
- 112input_dict = {
- 113 'backend':data_list[0],
- 114 'record':{
- 115 'server':data_list[1],
- 116 'weight':int(data_list[2]),
- 117 'maxcon':int(data_list[3]),
- 118 },
- 119 }
- 120 menu_dict[chioce](input_dict)
- 121 else:
- 122 print('Input invalid...')
文件:
- 1 frontend www
- 2bind *:80 3acl web hdr_beg(host) 10.207.252.45 4acl web1 hdr_beg(host) 10.207.252.46 5use_backend webserverif web
- 6use_backend web1serverif web1
- 7
- 8 backend www.oldboy1.org
- 9server 192.168.1.110 192.168.1.110 weight 10 maxcon 300710server 192.168.1.120 192.168.1.120 weight 10 maxcon 300911server 192.168.1.110 192.168.1.110 weight 10 maxcon 300912
- 13 backend www.oldboy2.org
- 14server 192.168.1.130 192.168.1.130 weight 20 maxcon 300015server 192.168.1.131 192.168.1.131 weight 20 maxcon 300016 backend www.qq.com
- 17server 3.3.3.3 3.3.3.3 weight 90 maxcon 10018server 3.3.3.100 3.3.3.100 weight 90 maxcon 70019server 8.8.8.9 8.8.8.9 weight 20 maxcon 200
Python 基础 (函数部分)-day04
来源: http://www.bubuko.com/infodetail-2093269.html