91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中怎么實現代碼重構

發布時間:2021-07-10 15:22:22 來源:億速云 閱讀:123 作者:Leah 欄目:互聯網科技

python中怎么實現代碼重構,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

重構前

import redef count(s):while '/' in s:result = re.findall('([-]?\d+\.\d+|[-]?\d+)/([-]?\d+\.\d+|[-]?\d+)', s)for i in result:s = s.replace(f'{i[0]}/{i[1]}', f'{float(i[0]) / float(i[1])}')while '*' in s:result = re.findall('([-]?\d+\.\d+|[-]?\d+)\*([-]?\d+\.\d+|[-]?\d+)', s)for i in result:if float(i[0]) < 0 and float(i[1]) < 0:s = s.replace(f'{i[0]}*{i[1]}', f'+{float(i[0]) * float(i[1])}')else:s = s.replace(f'{i[0]}*{i[1]}', f'{float(i[0]) * float(i[1])}')result = re.findall('([-]?\d+\.\d+|[-]?\d+)', s)x = 0for i in result:x += float(i)s = str(x)return sdef cal(s):s = s.replace(' ', '')while '(' in s or ')' in s:ret = re.findall('\(([^()]+?)\)', s)for i in ret:s = s.replace(f'({i})', count(i))s = s.replace('--', '+')else:s = count(s)return s

重構原則

  1. 重構代碼要分析原代碼,找出重復代碼將其封裝成函數。

  2. 注釋清晰、完整,便于將來升級迭代。

  3. 代碼模塊化,模塊化可以提高代碼復用率,隔離bug。

重構后的代碼

import redef cal(s):'''處理含括號四則運算字符串主程序。先計算小括號里的內容,將該內容替換成計算后的值,最終計算出結果。'''def count(s):'''計算不含括號的四則運算,先計算乘除法,再計算加減法'''while '/' in s:result = re.findall('([-]?\d+\.\d+|[-]?\d+)/([-]?\d+\.\d+|[-]?\d+)', s)for i in result:s = s.replace(f'{i[0]}/{i[1]}', f'{float(i[0]) / float(i[1])}')while '*' in s:result = re.findall('([-]?\d+\.\d+|[-]?\d+)\*([-]?\d+\.\d+|[-]?\d+)', s)for i in result:if float(i[0]) < 0 and float(i[1]) < 0:  # 處理負數乘負數的特殊情況s = s.replace(f'{i[0]}*{i[1]}',  f'+{float(i[0]) * float(i[1])}')else:s = s.replace(f'{i[0]}*{i[1]}',  f'{float(i[0]) * float(i[1])}')result = re.findall('([-]?\d+\.\d+|[-]?\d+)', s)x = 0for i in result:x += float(i)s = str(x)return sdef symbol(s):'''處理四則運算字符串中出現連續多個+號和-號'''while '++' in s:s = s.replace('++', '+')while '+-' in s:s = s.replace('+-', '-')while '-+' in s:s = s.replace('-+', '-')while '--' in s:s = s.replace('--', '+')return s

    s = s.replace(' ', '')while '(' in s or ')' in s:ret = re.findall('\(([^()]+?)\)', s)for i in ret:s = s.replace(f'({i})', count(i))s = symbol(s)  # 處理剝去括號后出現減去負號的情況else:s = count(s)return sprint(cal('10 - 3 * ( (50-30 +(-10/5) * (9-2*5/3 + 7 /3*99/4*2020 +10 * 789/15 )) - (-4*3)/ (16-3*2) )'))print(cal('10-3*(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))'))print(cal('10-3*(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))+(-2.5*-12)'))

請注意函數內定義函數的寫法,例如上面的count和symbol這2個函數只有cal函數會調用,因此定義在cal函數內部是最佳選擇。這樣封裝性更好,運行效率更高。
在一個函數內調用其他函數時會優先從自己的命名空間內找名字,找不到再去外層,再找不到再去全局找。所以定義在函數內部的名字查找到的速度是最快的。

看完上述內容,你們掌握python中怎么實現代碼重構的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

田林县| 博白县| 海口市| 营口市| 建平县| 合川市| 寻甸| 聂拉木县| 雅安市| 白水县| 韶山市| 扶绥县| 昌图县| 手游| 亚东县| 剑阁县| 南部县| 辽宁省| 黎城县| 资源县| 和龙市| 同仁县| 铜梁县| 华蓥市| 吴堡县| 靖边县| 伊宁县| 张家港市| 米泉市| 永修县| 长泰县| 嘉峪关市| 文水县| 清水河县| 文成县| 高青县| 襄城县| 宜春市| 阿城市| 嘉黎县| 临沂市|