python技巧分享(四)

30 Jan 2018 python技巧分享(四)

这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获。

1 如何打印更易读的类

  • 不推荐方式
class Point(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y


p = Point(3, 4)

print p
# <__main__.Point object at 0x0000000001E1B9E8>
  • 推荐方式
class Point(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return 'Point({self.x}, {self.y})'.format(self=self)


p = Point(3, 4)

print p
# Point(3, 4)

前一种方式打印的类不易读,不能获取更多的信息。通过类的__repr__方法可以将类打印得更易读。或者不定义__repr__方法,直接使用下面方式打印:

print p.__dict__
# {'y': 4, 'x': 3}

使用__dict__方法,将类以字典形式打印出来,也比较易读。

2 如何将类打印成json字符串

import json


class User(object):
    def __init__(self, name, id):
        self.name = name
        self.id = id


u = User('user1', 1)
print json.dumps(u.__dict__, indent=4)

'''
{
    "name": "user1",
    "id": 1
}
'''

通过json模块的dumps方法,可以轻易将类打印成json字符串。

3 如何排序类列表

class User:
    def __init__(self, name, key):
        self.name = name
        self.key = key

    def __repr__(self):
        return 'User({self.name}, {self.key})'.format(self=self)


user_list = [
    User('user1', 3),
    User('user2', 2),
    User('user3', 1),
]

print sorted(user_list, key=lambda user: user.key)
# [User(user3, 1), User(user2, 2), User(user1, 3)]
print sorted(user_list, key=lambda user: user.name)
# [User(user1, 3), User(user2, 2), User(user3, 1)]

这里排序的方法和字典排序类似,第一种是按user的key升序排序,第二种是按user的name升序排序。其实还支持名字相同,再按key进行排序,如下:

user_list = [
    User('user1', 3),
    User('user1', 2),
    User('user1', 1),
]

print sorted(user_list, key=lambda user: (user.name, user.key))
# [User(user1, 1), User(user1, 2), User(user1, 3)]

LEo at 00:05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

优秀Java程序员的编程风格

今天突发奇想,对编码习惯和编程风格很感兴趣,于是乎,找了一下关于编程风格(Java篇)的资料,希望对爱好编码或者开始学习编码的同学有帮助!

722
来自专栏向治洪

多线程之传统多线程

Contents 传统线程技术 传统创建线程方式 传统定时器技术 互斥 同步 传统线程技术 传统创建线程方式 1.继承Thread类,覆盖run方法 ...

2079
来自专栏从零开始学自动化测试

python笔记17-字典按value排序

面试题:如何统计数组中出现次数最多的数据,按出现次数由大到小排序 这个排序看似简单,涉及到的基础知识点还是很多的,真正写起来并不容易

1941
来自专栏cloudskyme

设计模式(8)-状态模式(关注状态之间的变化)

状态模式(State Pattern)是设计模式的一种,属于行为模式。 定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这...

3627
来自专栏Java技术栈

涨姿势 | 优秀 Java 程序员写代码的风格

1954
来自专栏喵了个咪的博客空间

zephir-(7)数组

#zephir-数组# ? ##前言## 先在这里感谢各位zephir开源技术提供者 在java和c++中几乎所有的操作都是正对于类开展的,但是在php中你们常...

3887
来自专栏码云1024

c++ Struct和Class的区别

2673
来自专栏blackheart的专栏

[C#6] 2-nameof 运算符

0. 目录 C#6 新增特性目录 1. 老版本的代码 1 using System; 2 namespace csharp6 3 { 4 in...

2135
来自专栏C/C++基础

C++IO流简介

输入输出(IO)是指计算机同任何外部设备之间的数据传递。常见的输入输出设备有文件、键盘、打印机、屏幕等。数据可以按记录(或称数据块)的方式传递,也可以 流的方式...

1333
来自专栏Golang语言社区

Go语言的指针 & *

Go语言保留着C中值和指针的区别,但是对于指针繁琐用法进行了大量的简化,引入引用的概念。所以在Go语言中,你几乎不用担心会因为直接操作内寸而引起各式各样的错误。...

2925

扫码关注云+社区

领取腾讯云代金券