str类
-
字符串对象是不可改变的对象:一旦创建字符串,其内容就是不可变的
str1 = str() # 使用构造函数创建 str2 = str("abc") str3 = "" str4 = "abc"
-
为优化性能
Python会使用字符串对象来表示相同内容字符串
缓存与小数据池机制(本部分可以跳过)
-
代码块的缓存机制
在执行同一个代码块的初始化对象命令时,会重用已存在的值
代码块缓存机制适用范围:int, float, str, bool
-
小数据池,也称为小整数缓存机制
是针对不同代码块之间的缓存机制
适用范围:int, float, str, bool
-
注意:
1、如果在同一代码块下,采用的是统一代码块下的
缓存机制
2、如果是不同代码块,则采用小数据池的驻留机制 -
demon
# 几乎所有的字符串都符合缓存机制,具体的规则如下: # 规则一:非乘法获得的字符串全部满足代码块的缓存机制 str1 = "山川异域,风月同天。寄诸佛子,共结来缘。" str2 = "山川异域,风月同天。寄诸佛子,共结来缘。" print("非乘法字符串:", str1 is str2) # 规则二:乘数为1时,和规则一相同 # 规则三:乘数>1时,仅含有大小写字母、数字、下划线的字符串,并且总长度<=20,才会满足代码块缓存机制 # 乘数>=2时,仅含大小写字母,数字,下划线,总长度<=20 满足 str5 = "Qq123456!@#$%^&*()_" * 10 str6 = 10 * "Qq123456!@#$%^&*()_" print("乘数>=2时:", str5 is str6) 输出结果: 三个空字符串的内存空间: 2505928876784 2505928876784 2505928876784 两个值相同的变量: 2505935015024 2505935015024 True True 非乘法字符串: True 乘数>=2时: True
str类的常用方法
demon:用户注册功能
# @function:登录名是否合法
# @Description:一只萤火虫
# 1、用户名最多25个字符长度、不能包含空格、单双引号、问号等特殊符号
def validate_login_name(login_name):
str_len = len(login_name)
if str_len == 0 or str_len > 25:
return False
# 自定义的非法字符串,大家可以根据自己的系统进行自由的添加
invalid_chars = " '\"?!@#$%^&*()+"
for char in login_name:
if char in invalid_chars:
return False
return True
# 2、密码6-18位,只能包含字母、数字、特殊符号(下划线、@、#、$、!)
# 纯数字、纯字母时,密码强度都是弱 (★★☆☆☆☆)
# 数字+符号、数字+字母、字母+符号,强度为中(★★★★☆☆)
# 同时存在三种字符,强度为强(★★★★★★)
valid_symbols = [chr(value) for value in range(ord("A"), ord("Z") + 1)]
valid_symbols += [chr(value) for value in range(97, 97 + 26)]
valid_symbols += [chr(value) for value in range(ord("0"), ord("9") + 1)]
valid_symbols += list("_@#$!")
def validate_password(password):
str_len = len(password)
if str_len < 6 or str_len > 18:
return False
global valid_symbols
for char in password:
if char not in valid_symbols:
return False
# 如果代码能够执行到这里,密码一定是合法的
if password.isdecimal() or password.isalpha():
return "★" * 2
if password.isalnum() or validate_password_decimal_symbol(password) or validate_password_letter_symbol(password):
return "★" * 4
return "★" * 6
def validate_password_decimal_symbol(password):
""" 验证传入的字符串是否是数字+合法特殊符号的组合 """
valid_symbols = [chr(value) for value in range(ord("0"), ord("9") + 1)]
valid_symbols += list("_@#$!")
valid_symbols = str(valid_symbols)
for char in password:
if valid_symbols.find(char) == -1:
return False
return True
def validate_password_letter_symbol(password):
""" 验证传入的字符串是否是字母+合法符号的组合 """
return True
# 3、用户输入正确的email - 请自行完成
# 必须包含@符号,且只能包含一个
# @和. 符号不能在开头,也不能在结尾
# x@x.x
# 第一个x:字符或数字、下划线
# 第二个x:可以是字母或数字
# 第三个x:字母 .com .cn .org .net
if __name__ == '__main__':
login_name = "adm)in"
print("登录名是否合法:", validate_login_name(login_name))
password = "admin123@"
print("密码级别:", validate_password(password))