1. 正則檢測字符串是否有大寫字母;
2. 如果有則將其轉為小寫形式並添加下劃線,使用新字符替代原大寫字符;
def turn_param_style(self, params: dict): ''' 將參數名的駝峰形式轉為下劃線形式 @param params: @return: ''' temp_dict = {} for name, value in params.items(): temp_name = "" if re.search("[A-Z]", name): capital_letters = re.findall("[A-Z]", name) for c in capital_letters: lower_c = c.lower() r_str = "_" + lower_c temp_name = name.replace(c, r_str) else: temp_name = name temp_dict.update({temp_name: value}) return temp_dict
其他的轉換方法,這裡沒有將駝峰字符都轉為小寫形式
變成下劃線的條件
①從第一個我們看不出什麼,只知道都是小寫
②從第二個我們得出信息:當前字母為大寫,前一個字母為小寫,需要在中間加入’_’
③從第三個我們得出信息:當前字母為大寫,前一個字母也為大寫,後一個字母為小寫,需要在當前字母和前一個字母之間加上’ _ ’
④得到的輸出全部為小寫字母,這個我們看作次要因素,最後一起轉為小寫
def turn_param_style(self, params: dict): ''' 將參數名的駝峰形式轉為下劃線形式 @param params: @return: ''' temp_dict = {} for name, value in params.items(): new_name = "" name += " " # 為了防止數據溢出 for i in range(len(name) - 1): if i == 0: new_name += name[i] elif name[i].isupper() and name[i - 1].islower(): new_name += "_" + name[i] # 如果不在前面加上name += " ",這裡會索引越界 elif name[i].isupper() and name[i - 1].isupper() and name[i + 1].islower(): new_name += "_" + name[i] else: new_name += name[i] temp_dict.update({new_name: value}) return temp_dict
參考:
【Python】駝峰變量轉換為下劃線_InceptionZ的博客-CSDN博客_python 駝峰轉下劃線