一、Python的可变数据类型和不可变数据类型
可变数据类型: 列表、字典、可变集合
不可变数据库类型: 数字、字符串、元组、不可变集合
二、*arg和**kwarg的区别
*args代表位置参数,把多个任意参数作为元组传递给函数
**kwarg 代表关键字参数,返回的是字典,此处需注意函数传参时位置参数需在关键字参数前面
三.python的深浅拷贝,应用场景和区别
浅拷贝是指增加了一个指针,这个指向已存在的地址,在释放内存时新旧指针均会失效,而深拷贝不仅是增加一个指针,并且开辟了新的内存,使得新指针指向新的内存地址,在释放内存时就不会存在试放旧数据会影响另一个深拷贝的数据
一层的情况:
浅拷贝
>>> list1 = [1, 2, 3]
>>> list2 = list1.copy()
>>> list1.append(4)
>>> print(list1, list2)
[1, 2, 3, 4] [1, 2, 3]
>>>
深拷贝
>>> import copy
>>> list1 = [1, 2, 3]
>>> list2 = copy.deepcopy(li1)
>>> list1.append(4)
>>> print(list1, list2)
[1, 2, 3, 4] [1, 2, 3]
>>>
多层的情况:
浅拷贝
>>> list1 = [1,2,[3,4],5]
>>> list2 = list1.copy()
>>> list1[2].append(6)
>>> print(list1,list2)
[1, 2, [3, 4, 6], 5] [1, 2, [3, 4, 6], 5]
>>>
深拷贝
>>> list1 = [1,2,[3,4],5]
>>> list2 = copy.deepcopy(list1)
>>> list1[2].append(6)
>>> print(list1,list2)
[1, 2, [3, 4, 6], 5] [1, 2, [3, 4], 5]
>>>
四、生成器,迭代器,可迭代对象区别和应用场景
生成器: 包括含有yield这个关键字,生成器也是迭代器,调动next把函数变成迭代器。
例使用range(num)函数 ,会立即创建xrange(num)生成器
迭代器: 含有__iter__和__next__方法 (包含__next__方法的可迭代对象就是迭代器)
可迭代对象: 一个类内部实现__iter__方法且返回一个迭代器。
- wtforms中对form对象进行循环时候,显示form中包含的所有字段。
class LoginForm(Form):
name = simple.StringField(
label='用户名',
validators=[
validators.DataRequired(message='用户名不能为空.'),
validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d')
],
widget=widgets.TextInput(),
render_kw={'class': 'form-control'}
)
pwd = simple.PasswordField(
label='密码',
validators=[
validators.DataRequired(message='密码不能为空.'),
validators.Length(min=8, message='用户名长度必须大于%(min)d'),
validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}",
message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')
],
widget=widgets.PasswordInput(),
render_kw={'class': 'form-control'}
)
form = LoginForm()
for item in form:
print(item)
五、 静态方法和类方法区别
类方法必须有一个指向类对象的引用作为第一个参数,而静态方法可以没有参数
# 普通方法:能用Num调用而不能用实例化对象调用
def one():
print ('1')
# 实例方法:能用实例化对象调用而不能用Num调用
def two(self):
print ('2')
# 静态方法:能用Num和实例化对象调用
@staticmethod
def three():
print ('3')
# 类方法:第一个参数cls长什么样不重要,都是指Num类本身,调用时将Num类作为对象隐式地传入方法
@classmethod
def go(cls):
cls.three()
六、is和==的区别
is 比较对象是不是完全相同,是不是同一个对象,占用的内存地址是否相同。
== 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了。一般默认调用对象的 eq()方法。

本文探讨了Python中可变与不可变数据类型的区别,浅拷贝与深拷贝的应用场景,以及生成器、迭代器与可迭代对象的辨析。此外,还解析了类方法与静态方法的区分,is与==的比较,以及关键概念如列表、字典等在实际编程中的应用。
863

被折叠的 条评论
为什么被折叠?



