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 駝峰轉下劃線