员工信息管理

  1. 简单的员工信息增删改查程序
  2. 表信息
  3. 1,Alex Li,22,13651054608,IT,20130401
  4. 2,Jack Wang,28,13451024608,HR,20150107
  5. 3,Rain Wang,21,13451054608,IT,20170401
  6.  
  7. 增加
  8. add staff_table Alex Li,25,134435344,IT,2015-10-29
  9. phone做唯一键(即不允许表里有手机号重复的情况),staff_id需自增
  10.  
  11. 查询支持三种语法
  12. find name,age from staff_table where age > 22
  13. find * from staff_table where dept = "IT"
  14. find * from staff_table where enroll_date like ""
  15.  
  16. 删除指定员工信息纪录
  17. del from staff_table where dept = "IT"
  18.  
  19. 更新记录
  20. update staff_table set dept="Market" where dept = "IT"
  21. update staff_table set age=25 where name = "Alex Li"

流程图

语法分析

  1. def syntax_parser(input_sql):
  2. """
  3. 解析sql语句并执行
  4. :param input_sql:
  5. :return:
  6. """
  7. # print_log("syntax_parser sql star")
  8. syntax_list ={
  9. 'find': syntax_find,
  10. 'del': syntax_del,
  11. 'add': syntax_add,
  12. 'update': syntax_update
  13. }
  14.  
  15. if input_sql.split()[0] in syntax_list.keys() and 'staff_table' in input_str.split():
  16. if 'where' in input_sql.split():
  17. query_clause, where_clause = input_sql.split("where")
  18. # print_log(query_clause + where_clause)
  19. # 执行where条件
  20. match_data = syntax_where(where_clause.strip())
  21. input_action = query_clause.split()[0]
  22. # 执行不同的action
  23. syntax_list[input_action](match_data, query_clause)
  24. else:
  25. match_data = []
  26. for ind, val in enumerate(STAFF_INFO["id"]):
  27. row = []
  28. for col in COLUMN_NAME:
  29. row.append(STAFF_INFO[col][ind])
  30. match_data.append(row)
  31. syntax_list[input_sql.split()[0]](match_data, input_sql.strip())
  32.  
  33. else:
  34. print_log("语法错误,find/del/add/updata name,age from [staff_table] [where] age [<,>,=,like][1]", 'error')

where语句分析

  1. def syntax_where(where_clause):
  2. """
  3. 解析where条件
  4. where age > 22
  5. :param where_clause:
  6. :return:
  7. """
  8. # 操作字符
  9. op_list = [">", "<", "=", "like"]
  10.  
  11. for op_key in op_list:
  12. if op_key in where_clause:
  13. q_name, q_cond = where_clause.split(op_key)
  14. if q_name.strip() in COLUMN_NAME and q_cond.strip() != "":
  15. match_data = op_compare(q_name.strip(), q_cond.strip(),op_key)
  16. return match_data
  17. else:
  18. if not q_name.strip() in COLUMN_NAME:
  19. error_str = "语法错误,字段%s不存在" % q_name
  20. else:
  21. error_str = "条件值为空"
  22. print_log(error_str, "error")
  23. return False
  24.  
  25. else:
  26. print_log("语法错误,符号不在[<,>,=,like]中","error")
  27. return False

where 语句的比较运算

  1. def convert_str(f_val, f_cond, f_compare_str):
  2. """
  3. 字符串拼接成条件
  4. :param f_cond:
  5. :param f_val:
  6. :return:
  7. """
  8. if f_cond.find("'") != -1:
  9. val = "'" + f_val + "'"
  10. elif f_cond.find("\"") != -1:
  11. val = "\"" + f_val + "\""
  12. else:
  13. val = "'" + f_val + "'"
  14. f_cond = "'" + f_cond + "'"
  15. if f_compare_str == 'in':
  16. # 字符比较"'2015' in '2016-02-01'"
  17. exp_str = "%s%s%s" % (val, f_compare_str, f_cond)
  18. else:
  19. # 字符比较
  20. exp_str = "%s%s%s" % (f_cond, f_compare_str, val)
  21. return exp_str
  22.  
  23. def op_compare(q_name, q_cond, compare_str):
  24. """
  25. 解析where 语句的操作符
  26. :param q_name:
  27. :param q_cond:
  28. :param compare_str:
  29. :return:
  30. """
  31. match_data = []
  32. if compare_str == "=":
  33. compare_str = "=="
  34. for ind, val in enumerate(STAFF_INFO[q_name]):
  35. if compare_str != "like" and q_cond.isdigit():
  36. # 数字比较
  37. exp_str = "%d%s%d" % (int(val), compare_str, int(q_cond))
  38. elif compare_str != "like" and not q_cond.isdigit():
  39. # 转换操作符两边字符串
  40. # 把val两边加上'val'或"val" ,与输入字符串比较 'Sales' = 'Sales' or "Sales" = "Sales"
  41.  
  42. # 字符比较
  43. exp_str = convert_str(val, q_cond, compare_str)
  44. # print_log(exp_str)
  45. else:
  46. # if compare_str = like then compare_str = ' in '
  47. op_str = ' in '
  48. # 字符比较
  49. exp_str = convert_str(val, q_cond, op_str)
  50.  
  51. # print_log(exp_str)
  52. if eval(exp_str):
  53. row_data = []
  54. for col in COLUMN_NAME:
  55. row_data.append(STAFF_INFO[col][ind])
  56. match_data.append(row_data)
  57. # print(tabulate(match_data, headers=COLUMN_NAME, tablefmt="grid"))
  58. return match_data

解析删除语句

  1. def syntax_del(dataset, query_clause):
  2. """
  3. 解析删除语句
  4. del from staff_table where id=3
  5. :param dataset:
  6. :param query_clause:
  7. :return:
  8. """
  9. for row in dataset:
  10. staff_id = row[0] # 得到id值
  11. staff_index = STAFF_INFO['id'].index(staff_id) # 得到id值在STAFF_INFO[id]的索引
  12. # print_log(staff_index)
  13. for col in COLUMN_NAME:
  14. STAFF_INFO[col].remove(STAFF_INFO[col][staff_index]) # 修改col_name值
  15.  
  16. save_db()
  17. print_log("成功删除%s条纪录" % len(dataset))

解析增加语句

  1. def syntax_add(dataset, query_clause):
  2. """
  3. 解析增加语句
  4. add staff_table Alex Li,25,134435344,IT,2015-10-29
  5. :param dataset: dataset = [[1,Alex Li,18,13651054608,开发,2013-04-01]]
  6. :param query_clause:
  7. :return:
  8. """
  9. # 得到增加的值列表
  10. add_data = [col.strip() for col in query_clause.split("staff_table")[-1].split(',')]
  11. phone_ind = COLUMN_NAME.index("phone") # 得到手机所在列
  12. if len(COLUMN_NAME) - 1 == len(add_data):
  13. # 得到最后一行数据,自增长最后一行数据Id最大
  14. max_id = dataset[-1][0]
  15. # 自增长ID
  16. max_id = int(max_id) + 1
  17. # 把ID插入到第一列
  18. add_data.insert(0,str(max_id))
  19. # 得到手机号
  20. phone_val = add_data[phone_ind]
  21. # 判断手机号是否重复
  22. if not (phone_val in STAFF_INFO["phone"]):
  23. # 把数据插入到STAFF_INFO
  24. for index, col in enumerate(COLUMN_NAME):
  25. STAFF_INFO[col].append(add_data[index])
  26.  
  27. print(tabulate(STAFF_INFO, headers=COLUMN_NAME))
  28. save_db()
  29. print_log("成功添加1条纪录到staff_table表")
  30. else:
  31. print_log("手机号%s重复" %phone_val ,'error')
  32.  
  33. else:
  34. print_log("语法错误,列数不对,必须字段%s:"% COLUMN_NAME[1:], "error")

解析修改语句

  1. def syntax_update(dataset, query_clause):
  2. """
  3. 修改语句 update staff_table set age=25 where name='Alex Li'
  4. :param dataset:
  5. :param query_clause:
  6. :return:
  7. """
  8. if "set" in query_clause:
  9. formula_str = query_clause.split("set")
  10. col_name, new_val = formula_str[-1].strip().split('=')
  11. # print(col_name, new_val)
  12. # STAFF_INFO[col_name]
  13. if new_val.find("'") == 0:
  14. new_val = new_val.replace("'", "")
  15. elif new_val.find("\"") == 0:
  16. new_val = new_val.replace("\"", "")
  17. for row in dataset:
  18. staff_id = row[0] # 得到id值
  19. staff_index = STAFF_INFO['id'].index(staff_id) # 得到id值在STAFF_INFO[id]的索引
  20. STAFF_INFO[col_name][staff_index] = new_val # 修改col_name值
  21. # print_log(STAFF_INFO)
  22. save_db()
  23. print_log("成功修改了%s条数据!" % len(dataset))
  24. else:
  25. print_log("语法错误,未检测到set", "error")

保存数据

  1. def save_db():
  2. """
  3. #把修改的数据保存到硬盘上
  4. :return:
  5. """
  6. f = open("%s.new"%DB_FILE, "w",encoding="utf-8")
  7. # for k in COLUMN_NAME:
  8. # row = []
  9. # row = STAFF_INFO[k]
  10. for ind, val in enumerate(STAFF_INFO["id"]):
  11. row = []
  12. for col in COLUMN_NAME:
  13. row.append(STAFF_INFO[col][ind])
  14. w_data = ",".join(row)
  15. # print_log(w_data)
  16. f.write(w_data+"\n")
  17. f.close()
  18.  
  19. os.remove(DB_FILE)
  20. os.rename("%s.new"%DB_FILE, DB_FILE) # 回写原来的文件

解析查询语句

  1. def syntax_find(dataset, query_clause):
  2. """
  3. 查询语句解析
  4. :param dataset:
  5. :param query_clause:
  6. :return:
  7. """
  8. query_col = query_clause.split("from")[0][4:].split(',') # 得到name,age
  9. filter_col = [col.strip() for col in query_col] # 去除col中的空格
  10. # print(query_col)
  11. reformat_dataset = []
  12. if '*' in filter_col: # 输出所有列
  13. print(tabulate(dataset, headers=COLUMN_NAME, tablefmt="grid"))
  14. print_log("匹配到%s条数据!" % len(dataset))
  15. else:
  16. for row in dataset: # 筛选列
  17. filter_val = []
  18. for col in filter_col:
  19. index = COLUMN_NAME.index(col)
  20. filter_val.append(row[index])
  21. reformat_dataset.append(filter_val)
  22. print(tabulate(reformat_dataset, headers=COLUMN_NAME, tablefmt="grid"))
  23. print_log("匹配到%s条数据!" % len(reformat_dataset))

主函数

  1. if __name__ == '__main__':
  2. """
  3. 用户信息查询
  4. """
  5. # 把数据载入内存
  6. STAFF_INFO = load_db()
  7. while True:
  8. input_str = input("[staff db:]").strip()
  9. if not input_str : continue
  10. syntax_parser(input_str)

详细代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @Time : 2018/3/17 12:27
  4. # @Site :
  5. # @File : staff_info_manage.py
  6. # @Software: PyCharm
  7.  
  8. """
  9. 简单的员工信息增删改查程序
  10. 表信息
  11. 1,Alex Li,22,13651054608,IT,2013‐04‐01
  12. 2,Jack Wang,28,13451024608,HR,2015‐01‐07
  13. 3,Rain Wang,21,13451054608,IT,2017‐04‐01
  14.  
  15. 增加
  16. add staff_table Alex Li,25,134435344,IT,2015-10-29
  17. 以phone做唯一键(即不允许表里有手机号重复的情况),staff_id需自增
  18.  
  19. 查询支持三种语法
  20. find name,age from staff_table where age > 22
  21. find * from staff_table where dept = "IT"
  22. find * from staff_table where enroll_date like "2013"
  23.  
  24. 删除指定员工信息纪录
  25. del from staff_table where dept = "IT"
  26.  
  27. 更新记录
  28. update staff_table set dept="Market" where dept = "IT"
  29. update staff_table set age=25 where name = "Alex Li"
  30. """
  31. from tabulate import tabulate
  32. import os
  33.  
  34. # 存储信息的文件
  35. DB_FILE = "staff.db"
  36. COLUMN_NAME = ['id', 'name', 'age', 'phone', 'dept', 'enroll_date']
  37.  
  38. # 打印信息
  39. def print_log(msg, log_type="info"):
  40. if log_type == 'info':
  41. print("\033[32;1m%s\033[0m" %msg)
  42. elif log_type == 'error':
  43. print("\033[31;1m%s\033[0m" %msg)
  44.  
  45. def load_db():
  46. """
  47. 载入员工信息
  48. :return:
  49. """
  50. staff_data = {}
  51. # 构建字典空列表
  52. #{'id': [],'name':[],'age': [],'phone':[],'dept':[],'enrolled_date'[]
  53. for d in COLUMN_NAME:
  54. staff_data[d] = []
  55.  
  56. with open(DB_FILE, 'r', encoding='utf-8') as f:
  57. for line in f:
  58. staff_datas = line.split(",")
  59. # 构建员工信息字典
  60. for ind, d in enumerate(staff_datas):
  61. staff_data[COLUMN_NAME[ind]].append(d.strip()) # 去掉末尾回车
  62.  
  63. return staff_data
  64.  
  65. def convert_str(f_val, f_cond, f_compare_str):
  66. """
  67. 字符串拼接成条件
  68. :param f_cond:
  69. :param f_val:
  70. :return:
  71. """
  72. if f_cond.find("'") != -1:
  73. val = "'" + f_val + "'"
  74. elif f_cond.find("\"") != -1:
  75. val = "\"" + f_val + "\""
  76. else:
  77. val = "'" + f_val + "'"
  78. f_cond = "'" + f_cond + "'"
  79. if f_compare_str == 'in':
  80. # 字符比较"'2015' in '2016-02-01'"
  81. exp_str = "%s%s%s" % (val, f_compare_str, f_cond)
  82. else:
  83. # 字符比较
  84. exp_str = "%s%s%s" % (f_cond, f_compare_str, val)
  85. return exp_str
  86.  
  87. def op_compare(q_name, q_cond, compare_str):
  88. """
  89. 解析where 语句的操作符
  90. :param q_name:
  91. :param q_cond:
  92. :param compare_str:
  93. :return:
  94. """
  95. match_data = []
  96. if compare_str == "=":
  97. compare_str = "=="
  98. for ind, val in enumerate(STAFF_INFO[q_name]):
  99. if compare_str != "like" and q_cond.isdigit():
  100. # 数字比较
  101. exp_str = "%d%s%d" % (int(val), compare_str, int(q_cond))
  102. elif compare_str != "like" and not q_cond.isdigit():
  103. # 转换操作符两边字符串
  104. # 把val两边加上'val'或"val" ,与输入字符串比较 'Sales' = 'Sales' or "Sales" = "Sales"
  105.  
  106. # 字符比较
  107. exp_str = convert_str(val, q_cond, compare_str)
  108. # print_log(exp_str)
  109. else:
  110. # if compare_str = like then compare_str = ' in '
  111. op_str = ' in '
  112. # 字符比较
  113. exp_str = convert_str(val, q_cond, op_str)
  114.  
  115. # print_log(exp_str)
  116. if eval(exp_str):
  117. row_data = []
  118. for col in COLUMN_NAME:
  119. row_data.append(STAFF_INFO[col][ind])
  120. match_data.append(row_data)
  121. # print(tabulate(match_data, headers=COLUMN_NAME, tablefmt="grid"))
  122. return match_data
  123.  
  124. def syntax_where(where_clause):
  125. """
  126. 解析where条件
  127. where age > 22
  128. :param where_clause:
  129. :return:
  130. """
  131. # 操作字符
  132. op_list = [">", "<", "=", "like"]
  133.  
  134. for op_key in op_list:
  135. if op_key in where_clause:
  136. q_name, q_cond = where_clause.split(op_key)
  137. if q_name.strip() in COLUMN_NAME and q_cond.strip() != "":
  138. match_data = op_compare(q_name.strip(), q_cond.strip(),op_key)
  139. return match_data
  140. else:
  141. if not q_name.strip() in COLUMN_NAME:
  142. error_str = "语法错误,字段%s不存在" % q_name
  143. else:
  144. error_str = "条件值为空"
  145. # print_log(error_str, "error")
  146. return False
  147.  
  148. else:
  149. print_log("语法错误,符号不在[<,>,=,like]中","error")
  150. return False
  151.  
  152. def syntax_del(dataset, query_clause):
  153. """
  154. 解析删除语句
  155. del from staff_table where id=3
  156. :param dataset:
  157. :param query_clause:
  158. :return:
  159. """
  160. for row in dataset:
  161. staff_id = row[0] # 得到id值
  162. staff_index = STAFF_INFO['id'].index(staff_id) # 得到id值在STAFF_INFO[id]的索引
  163. # print_log(staff_index)
  164. for col in COLUMN_NAME:
  165. STAFF_INFO[col].remove(STAFF_INFO[col][staff_index]) # 修改col_name值
  166.  
  167. save_db()
  168. print_log("成功删除%s条纪录" % len(dataset))
  169.  
  170. def syntax_add(dataset, query_clause):
  171. """
  172. 解析增加语句
  173. add staff_table Alex Li,25,134435344,IT,2015-10-29
  174. :param dataset: dataset = [[1,Alex Li,18,13651054608,开发,2013-04-01]]
  175. :param query_clause:
  176. :return:
  177. """
  178. # 得到增加的值列表
  179. add_data = [col.strip() for col in query_clause.split("staff_table")[-1].split(',')]
  180. phone_ind = COLUMN_NAME.index("phone") # 得到手机所在列
  181. if len(COLUMN_NAME) - 1 == len(add_data):
  182. # 得到最后一行数据,自增长最后一行数据Id最大
  183. max_id = dataset[-1][0]
  184. # 自增长ID
  185. max_id = int(max_id) + 1
  186. # 把ID插入到第一列
  187. add_data.insert(0,str(max_id))
  188. # 得到手机号
  189. phone_val = add_data[phone_ind]
  190. # 判断手机号是否重复
  191. if not (phone_val in STAFF_INFO["phone"]):
  192. # 把数据插入到STAFF_INFO
  193. for index, col in enumerate(COLUMN_NAME):
  194. STAFF_INFO[col].append(add_data[index])
  195.  
  196. print(tabulate(STAFF_INFO, headers=COLUMN_NAME))
  197. save_db()
  198. print_log("成功添加1条纪录到staff_table表")
  199. else:
  200. print_log("手机号%s重复" %phone_val ,'error')
  201.  
  202. else:
  203. print_log("语法错误,列数不对,必须字段%s:"% COLUMN_NAME[1:], "error")
  204.  
  205. def syntax_update(dataset, query_clause):
  206. """
  207. 修改语句 update staff_table set age=25 where name='Alex Li'
  208. :param dataset:
  209. :param query_clause:
  210. :return:
  211. """
  212. if "set" in query_clause:
  213. formula_str = query_clause.split("set")
  214. col_name, new_val = formula_str[-1].strip().split('=')
  215. # print(col_name, new_val)
  216. # STAFF_INFO[col_name]
  217. if new_val.find("'") == 0:
  218. new_val = new_val.replace("'", "")
  219. elif new_val.find("\"") == 0:
  220. new_val = new_val.replace("\"", "")
  221. for row in dataset:
  222. staff_id = row[0] # 得到id值
  223. staff_index = STAFF_INFO['id'].index(staff_id) # 得到id值在STAFF_INFO[id]的索引
  224. print(STAFF_INFO[col_name][staff_index])
  225. STAFF_INFO[col_name][staff_index] = new_val # 修改col_name值
  226. # print_log(STAFF_INFO)
  227. save_db()
  228. print_log("成功修改了%s条数据!" % len(dataset))
  229. else:
  230. print_log("语法错误,未检测到set", "error")
  231.  
  232. def save_db():
  233. """
  234. #把修改的数据保存到硬盘上
  235. :return:
  236. """
  237. f = open("%s.new"%DB_FILE, "w",encoding="utf-8")
  238. # for k in COLUMN_NAME:
  239. # row = []
  240. # row = STAFF_INFO[k]
  241. for ind, val in enumerate(STAFF_INFO["id"]):
  242. row = []
  243. for col in COLUMN_NAME:
  244. row.append(STAFF_INFO[col][ind])
  245. w_data = ",".join(row)
  246. # print_log(w_data)
  247. f.write(w_data+"\n")
  248. f.close()
  249.  
  250. os.remove(DB_FILE)
  251. os.rename("%s.new"%DB_FILE, DB_FILE) # 回写原来的文件
  252.  
  253. def syntax_parser(input_sql):
  254. """
  255. 解析sql语句并执行
  256. :param input_sql:
  257. :return:
  258. """
  259. # print_log("syntax_parser sql star")
  260. syntax_list ={
  261. 'find': syntax_find,
  262. 'del': syntax_del,
  263. 'add': syntax_add,
  264. 'update': syntax_update
  265. }
  266.  
  267. if input_sql.split()[0] in syntax_list.keys() and 'staff_table' in input_str.split():
  268. if 'where' in input_sql.split():
  269. query_clause, where_clause = input_sql.split("where")
  270. # print_log(query_clause + where_clause)
  271. # 执行where条件
  272. match_data = syntax_where(where_clause.strip())
  273. input_action = query_clause.split()[0]
  274. # 执行不同的action
  275. syntax_list[input_action](match_data, query_clause)
  276. else:
  277. match_data = []
  278. for ind, val in enumerate(STAFF_INFO["id"]):
  279. row = []
  280. for col in COLUMN_NAME:
  281. row.append(STAFF_INFO[col][ind])
  282. match_data.append(row)
  283. syntax_list[input_sql.split()[0]](match_data, input_sql.strip())
  284.  
  285. else:
  286. print_log("语法错误,find/del/add/update name,age from [staff_table] [where] age [<,>,=,like][1]", 'error')
  287.  
  288. def syntax_find(dataset, query_clause):
  289. """
  290. 查询语句解析
  291. :param dataset:
  292. :param query_clause:
  293. :return:
  294. """
  295. query_col = query_clause.split("from")[0][4:].split(',') # 得到name,age
  296. filter_col = [col.strip() for col in query_col] # 去除col中的空格
  297. # print(query_col)
  298. reformat_dataset = []
  299. if '*' in filter_col: # 输出所有列
  300. print(tabulate(dataset, headers=COLUMN_NAME, tablefmt="grid"))
  301. print_log("匹配到%s条数据!" % len(dataset))
  302. else:
  303. for row in dataset: # 筛选列
  304. filter_val = []
  305. for col in filter_col:
  306. index = COLUMN_NAME.index(col)
  307. filter_val.append(row[index])
  308. reformat_dataset.append(filter_val)
  309. print(tabulate(reformat_dataset, headers=COLUMN_NAME, tablefmt="grid"))
  310. print_log("匹配到%s条数据!" % len(reformat_dataset))
  311.  
  312. if __name__ == '__main__':
  313. """
  314. 用户信息查询
  315. """
  316. # 把数据载入内存
  317. STAFF_INFO = load_db()
  318. while True:
  319. input_str = input("[staff db:]").strip()
  320. if not input_str : continue
  321. syntax_parser(input_str)

详细代码

Python函数案例——员工信息管理的更多相关文章

  1. python函数小案例

    python函数 目录 python函数 1.写一个函数求三个数的和,并返回结果 2.写一个函数,求平均值,并返回结果 写一个函数,求每个数与平均值之间的差,并放回结果 1.写一个函数求三个数的和,并 ...

  2. Day03 - Python 函数

    1. 函数简介 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print():也可以自己创建函数,这 ...

  3. Python入门(案例)

    Python入门(案例) #一.上课案例: #输出hello wordprint('hello word') #python注释有两种#1.单行注释#这是单行注释#2.多行注释'''这是多行注释''' ...

  4. Python 函数定义和使用

    # 函数的概念 # 概念 # 写了一段代码实现了某个小功能; 然后把这些代码集中到一块, 起一个名字; 下一次就可以根据这个名字再次使用这个代码块, 这就是函数 # 作用 # 方便代码的重用 # 分解 ...

  5. Python函数中参数类型

    在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数 ...

  6. python函数闭包-装饰器-03

    可调用对象 callable()  # 可调用的(这个东西加括号可以执行特定的功能,类和函数) 可调用对象即  callable(对象)  返回为  True  的对象 x = 1 print(cal ...

  7. Python 函数返回值、作用域

    函数返回值 多条return语句: def guess(x): if x > 3: return "> 3" else: return "<= 3&qu ...

  8. python 函数、参数及参数解构

    函数 数学定义 y=f(x), y是x函数,x是自变量.y=f(x0,x1...xn) Python函数 由若干语句组成的语句块,函数名称,参数列表构成,它是组织代码的最小单位 完成一定的功能 函数作 ...

  9. Python函数07/有参装饰器/多个装饰器装饰一个函数

    Python函数07/有参装饰器/多个装饰器装饰一个函数 目录 Python函数07/有参装饰器/多个装饰器装饰一个函数 内容大纲 1.有参装饰器 2.多个装饰器装饰一个函数 3.今日总结 3.今日练 ...

随机推荐

  1. RHEL6误安装RHEL7的包导致glibc被升级后系统崩溃处理方法

    RHEL6误使用了RHEL7的光盘源,安装了某个RPM包之后,导致glibc被升级,进而导致系统崩溃.   [root@rhel65 ~]# yum install ftp Loaded plugin ...

  2. ubuntu17 安装中文输入法

    在此说的是intelligent pinyin.我首先尝试的是搜狗输入法,虽然最终安装成功了,但还是直接卸载了.因为它不仅需要fcitx框架,在安装成功后,标题栏上面还会出现两个输入法图标.真正不能让 ...

  3. Windows API Finishing

    input { font-size: 14px; height: 26px } td { border-style: none; border-color: inherit; border-width ...

  4. Linux搭建FTP服务器

    一.搭建环境 阿里云 CentOS 7.3 64位 二.FTP协议基础知识 2.1 简介 FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文 ...

  5. 【java学习笔记】线程

    1.线程的定义 ①继承Thread类,将执行的任务逻辑放到run方法中,调用start方法来开启线程 public class ThreadDemo { public static void main ...

  6. js中的Object.defineProperty()和defineProperties()详解

    ECMAS-262第5版在定义只有内部采用的特性时,提供了描述了属性特征的几种属性.ECMAScript对象中目前存在的属性描述符主要有两种,数据描述符(数据属性)和存取描述符(访问器属性),数据描述 ...

  7. vs2017密钥

    Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH

  8. ubuntu 14.04 分辨率调整 -- xrandr命令

    问题描述: 自己在安装ubuntu-kylin 14.04 TLS系统成功后,在调整分辨率的时候(系统设置--显示)发现分辨率的选项只有1024x768以及800x600两个选项,而台式机的外接显示屏 ...

  9. Android app security安全问题总结

    数据泄漏 本地文件敏感数据不能明文保存,不能伪加密(Base64,自定义算法等) android:allowbackup=false. 防止 adb backup 导出数据 Activity inte ...

  10. 利用squid 反向代理提高网站性能

    部分转自:http://www.ibm.com/developerworks/cn/linux/l-cn-squid/ Squid 反向代理的实现原理 目前有许多反向代理软件,比较有名的有 Nginx ...