学好Python的必备重要知识初级篇(下)

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

一、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()方法。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值