IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 每日5个Python小技巧(day2) -> 正文阅读

[Python知识库]每日5个Python小技巧(day2)

1.类的__repr__方法

? 自定义类实例化之后,如果需要输出实例的信息,可在__repr__中定义字符串信息。

(1)默认的输出

class User:
    
    def __init__(self):
        self.name = "User"


if __name__ == '__main__':
    user = User()
    print(user)
[out] <__main__.User object at 0x00000206C7E29760>

? (2)自定义实例输出

class User:

    def __init__(self):
        self.name = "User"

    def __repr__(self):
        return f"I'am {self.name}."
[out] I'am User.
2.对象的克隆

? (1)一个十分有趣的例子

l = [1, 2, 3]
l2 = l
l3 = l[:]
l[0] = 'X'
print(l2)
print(l3)

? 查看输出

['X', 2, 3]
[1, 2, 3]

? 可以看到,l改变之后,l2会随着l改变,而l3则不会。

? 这是因为l2是跟l共享内存空间的,即l2浅复制了l–内容会随着l的改变而改变;l3深复制了ll3占据一个独立的内存空间,不随着l的改变而改变(可以类比C++的拷贝函数)。

? (2)制作浅副本
将容器的变量名直接赋值。

class User:

    def __init__(self):
        self.name = 'User'
        self.data = 1

    def __repr__(self):
        return f"User(name: {self.name}, data: {self.data})"


if __name__ == '__main__':
    user = User()
    newuser = user  // 用容器名赋值。
    user.data = 2
    print(newuser)
[out] User(name: User, data: 2)

(3)制作深副本

? 使用标准库中的copy.copy

form copy import copy

class User:

    def __init__(self):
        self.name = 'User'
        self.data = 1

    def __repr__(self):
        return f"User(name: {self.name}, data: {self.data})"


if __name__ == '__main__':
    user = User()
    newuser = copy(user)  // copy函数
    user.data = 2
    print(newuser)
[out] User(name: User, data: 1)
3.is==

? ==: 两个变量的值相同为True

? is: 两个变量在内存中表示同一位置的值。

? 可以用上面列表的克隆为例

if __name__ == '__main__':
    l = [1, 2, 3]
    l2 = l
    l3 = l[:]
    print(f"l2 == l: {l2==l}, l3 == l: {l3==l}")
    print(f"l2 is l: {l2 is l}, l3 is l: {l3 is l}")
l2 == l: True, l3 == l: True
l2 is l: True, l3 is l: False

4.有趣的*args**kwargs

? Python的*args**kwargs是其能够实现可变参数。

? *args: 充当可变长度的数组参数,将传入的"没有归属"参数,即没指定变量名的参数,注入一个元组中。

? **kwargs: 充当可变长度的字典参数。

def paramsTest(required, *args, **kwargs):
    print(f"params: {required}, {args}, {kwargs}")
    if required:
        print(required)
    for arg in args:
        print(arg)
    if kwargs:
        print(kwargs)


if __name__ == '__main__':
    paramsTest(1, 2, 3, 4, x=5, y=6, z=7)

[out]:
params: 1, (2, 3, 4), {'x': 5, 'y': 6, 'z': 7}
1
2
3
4
{'x': 5, 'y': 6, 'z': 7}

5.***的神秘功能

? ***操作符有一个比较引用和有点神秘的功能–用于参数的解包。

? 参考例子

def paramsTest(x, y, z):
    print(f"x = {x}, y = {y}, z = {z}")


if __name__ == '__main__':
    l = [1, 2, 3]
    d = {'x': 1, 'z': 3, 'y': 2}
    print(*l)  // argument after * must be an iterable, not User
    paramsTest(**d)
1 2 3
x = 1, y = 2, z = 3

*: 将容器中的值解包,容器必须是可迭代的。

**: 将容器中的值以键值对的形式展开,容器必须是mapping类型的。

?
print(*l) // argument after * must be an iterable, not User
paramsTest(**d)


1 2 3
x = 1, y = 2, z = 3


`*`: 将容器中的值解包,容器必须是可迭代的。

`**`: 将容器中的值以键值对的形式展开,容器必须是`mapping`类型的。

?	
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:10:07  更:2021-10-26 12:10:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 13:25:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计