整理了 60 个 Python 小例子,拿去用!

27个实用Python实例 我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。最后祝大家天天进步! 阅读详情

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。

如果我的分享对你有帮助,请关注我,一起向上进击。

整理丨快学Python

来源:https://github.com/jackzhenguo/python-small-examples

今天给大家分享一下60个Python小例子,拿来即用!

一、 数字

1 求绝对值

绝对值或复数的模

# 公众号:快学Python
In [1]: abs(-6)  
Out[1]: 6

2 进制转化

十进制转换为二进制:

In [2]: bin(10)  
Out[2]: '0b1010'

十进制转换为八进制:

In [3]: oct(9)  
Out[3]: '0o11'

十进制转换为十六进制:

In [4]: hex(15)  
Out[4]: '0xf'

3 整数和ASCII互转

十进制整数对应的ASCII字符

In [1]: chr(65)  
Out[1]: 'A'

查看某个ASCII字符对应的十进制数

In [1]: ord('A')  
Out[1]: 65

4 元素都为真检查

所有元素都为真,返回 True,否则为False

In [5]: all([1,0,3,6])  
Out[5]: False
In [6]: all([1,2,3])  
Out[6]: True

5 元素至少一个为真检查

至少有一个元素为真返回True,否则False

In [7]: any([0,0,0,[]])  
Out[7]: False
In [8]: any([0,0,1])  
Out[8]: True

6 判断是真是假

测试一个对象是True, 还是False.

In [9]: bool([0,0,0])  
Out[9]: True  
  
In [10]: bool([])  
Out[10]: False  
  
In [11]: bool([1,0,1])  
Out[11]: True

7 创建复数

创建一个复数

In [1]: complex(1,2)  
Out[1]: (1+2j)

8 取商和余数

分别取商和余数

In [1]: divmod(10,3)  
Out[1]: (3, 1)

9 转为浮点类型

将一个整数或数值型字符串转换为浮点数

In [1]: float(3)  
Out[1]: 3.0

如果不能转化为浮点数,则会报ValueError:

In [2]: float('a')  
# ValueError: could not convert string to float: 'a'

10 转为整型

int(x, base =10) , x可能为字符串或数值,将x 转换为一个普通整数。如果参数是字符串,那么它可能包含符号和小数点。如果超出了普通整数的表示范围,一个长整数被返回。

In [1]: int('12',16)  
Out[1]: 18

11 次幂

base为底的exp次幂,如果mod给出,取余

In [1]: pow(3, 2, 4)  
Out[1]: 1

12 四舍五入

四舍五入,ndigits代表小数点后保留几位:

In [11]: round(10.0222222, 3)  
Out[11]: 10.022  
  
In [12]: round(10.05,1)  
Out[12]: 10.1

13 链式比较

i = 3  
print(1 < i < 3)  # False  
print(1 < i <= 3)  # True

二、 字符串

14 字符串转字节

字符串转换为字节类型

In [12]: s = "apple"                                                              
  
In [13]: bytes(s,encoding='utf-8')  
Out[13]: b'apple'

15 任意对象转为字符串

In [14]: i = 100                                                                  
  
In [15]: str(i)  
Out[15]: '100'  
  
In [16]: str([])  
Out[16]: '[]'  
  
In [17]: str(tuple())  
Out[17]: '()'

16 执行字符串表示的代码

将字符串编译成python能识别或可执行的代码,也可以将文字读成字符串再编译。

In [1]: s  = "print('helloworld')"  
      
In [2]: r = compile(s,"<string>", "exec")  
      
In [3]: r  
Out[3]: <code object <module> at 0x0000000005DE75D0, file "<string>", line 1>  
      
In [4]: exec(r)  
helloworld

17 计算表达式

将字符串str 当成有效的表达式来求值并返回计算结果取出字符串中内容

In [1]: s = "1 + 3 +5"  
    ...: eval(s)  
    ...:  
Out[1]: 9

18 字符串格式化

格式化输出字符串,format(value, format_spec)实质上是调用了value的__format__(format_spec)方法。

In [1]: print("i am {0},age{1}".format("tom",18))  
Out[1]:i am tom,age18

4225c950e24bcb3a42a972b61a51c384.png

三、 函数

19 拿来就用的排序函数

排序:

In [1]: a = [1,4,2,3,1]  
  
In [2]: sorted(a,reverse=True)  
Out[2]: [4, 3, 2, 1, 1]  
  
In [3]: a = [{'name':'xiaoming','age':18,'gender':'male'},{'name':'  
     ...: xiaohong','age':20,'gender':'female'}]  
In [4]: sorted(a,key=lambda x: x['age'],reverse=False)  
Out[4]:  
[{'name': 'xiaoming', 'age': 18, 'gender': 'male'},  
 {'name': 'xiaohong', 'age': 20, 'gender': 'female'}]

20 求和函数

求和:

In [181]: a = [1,4,2,3,1]  
  
In [182]: sum(a)  
Out[182]: 11  

# 公众号:快学Python

In [185]: sum(a,10) #求和的初始值为10  
Out[185]: 21

21 nonlocal用于内嵌函数中

关键词nonlocal常用于函数嵌套中,声明变量i为非局部变量;如果不声明,i+=1表明i为函数wrapper内的局部变量,因为在i+=1引用(reference)时,i未被声明,所以会报unreferenced variable的错误。

def excepter(f):  
    i = 0  
    t1 = time.time()  
    def wrapper():  
        try:  
            f()  
        except Exception as e:  
            nonlocal i  
            i += 1  
            print(f'{e.args[0]}: {i}')  
            t2 = time.time()  
            if i == n:  
                print(f'spending time:{round(t2-t1,2)}')  
    return wrapper

22 global 声明全局变量

先回答为什么要有global,一个变量被多个函数引用,想让全局变量被所有函数共享。有的伙伴可能会想这还不简单,这样写:

i = 5  
def f():  
    print(i)  
  
def g():  
    print(i)  
    pass  
  
f()  
g()

f和g两个函数都能共享变量i,程序没有报错,所以他们依然不明白为什么要用global.

但是,如果我想要有个函数对i递增,这样:

def h():  
    i += 1  
  
h()

此时执行程序,bang, 出错了!抛出异常:UnboundLocalError,原来编译器在解释i+=1时会把i解析为函数h()内的局部变量,很显然在此函数内,编译器找不到对变量i的定义,所以会报错。

global就是为解决此问题而被提出,在函数h内,显式地告诉编译器i为全局变量,然后编译器会在函数外面寻找i的定义,执行完i+=1后,i还为全局变量,值加1:

i = 0  
def h():  
    global i  
    i += 1  
  
h()  
print(i)

23 交换两元素

def swap(a, b):  
    return b, a  

print(swap(1, 0))

输出:

81ee01e933026b146025ac6c160efedd.png

24 操作函数对象

In [31]: def f():  
    ...:     print('i'm f')  
    ...:  
  
In [32]: def g():  
    ...:     print('i'm g')  
    ...:  
  
In [33]: [f,g][1]()  
i'm g

创建函数对象的list,根据想要调用的index,方便统一调用。

25 生成逆序序列

list(range(10,-1,-1)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

第三个参数为负时,表示从第一个参数开始递减,终止到第二个参数(不包括此边界)

26 函数的五类参数使用例子

python五类参数:位置参数,关键字参数,默认参数,可变位置或关键字参数的使用。

def f(a,*b,c=10,**d):  
  print(f'a:{a},b:{b},c:{c},d:{d}')

默认参数c不能位于可变关键字参数d后.

调用f:

In [10]: f(1,2,5,width=10,height=20)  
a:1,b:(2, 5),c:10,d:{'width': 10, 'height': 20}

可变位置参数b实参后被解析为元组(2,5);而c取得默认值10; d被解析为字典.

再次调用f:

In [11]: f(a=1,c=12)  
a:1,b:(),c:12,d:{}

a=1传入时a就是关键字参数,b,d都未传值,c被传入12,而非默认值。

注意观察参数a, 既可以f(1),也可以f(a=1) 其可读性比第一种更好,建议使用f(a=1)。如果要强制使用f(a=1),需要在前面添加一个星号:

def f(*,a,**b): 
    print(f'a:{a},b:{b}')

此时f(1)调用,将会报错:TypeError: f() takes 0 positional arguments but 1 was given

只能f(a=1)才能OK.

说明前面的*发挥作用,它变为只能传入关键字参数,那么如何查看这个参数的类型呢?借助python的inspect模块:

In [22]: for name,val in signature(f).parameters.items():  
    ...:     print(name,val.kind)  
    ...:  
a KEYWORD_ONLY  
b VAR_KEYWORD

可看到参数a的类型为KEYWORD_ONLY,也就是仅仅为关键字参数。

但是,如果f定义为:

def f(a,*b):  
    print(f'a:{a},b:{b}')

查看参数类型:

In [24]: for name,val in signature(f).parameters.items():  
    ...:     print(name,val.kind)  
    ...:  
a POSITIONAL_OR_KEYWORD  
b VAR_POSITIONAL

可以看到参数a既可以是位置参数也可是关键字参数。

27 使用slice对象

生成关于蛋糕的序列cake1:

In [1]: cake1 = list(range(5,0,-1))  
  
In [2]: b = cake1[1:10:2]  
  
In [3]: b  
Out[3]: [4, 2]  
  
In [4]: cake1  
Out[4]: [5, 4, 3, 2, 1]

再生成一个序列:

In [5]: from random import randint  
   ...: cake2 = [randint(1,100) for _ in range(100)]  
   ...: # 同样以间隔为2切前10个元素,得到切片d  
   ...: d = cake2[1:10:2]  
In [6]: d  
Out[6]: [75, 33, 63, 93, 15]

你看,我们使用同一种切法,分别切开两个蛋糕cake1,cake2. 后来发现这种切法极为经典,又拿它去切更多的容器对象。

那么,为什么不把这种切法封装为一个对象呢?于是就有了slice对象。

定义slice对象极为简单,如把上面的切法定义成slice对象:

perfect_cake_slice_way = slice(1,10,2)  
#去切cake1  
cake1_slice = cake1[perfect_cake_slice_way]  
cake2_slice = cake2[perfect_cake_slice_way]  
  
In [11]: cake1_slice  
Out[11]: [4, 2]  
  
In [12]: cake2_slice  
Out[12]: [75, 33, 63, 93, 15]

与上面的结果一致。

对于逆向序列切片,slice对象一样可行:

a = [1,3,5,7,9,0,3,5,7]  
a_ = a[5:1:-1]  
  
named_slice = slice(5,1,-1)  
a_slice = a[named_slice]  
  
In [14]: a_  
Out[14]: [0, 9, 7, 5]  
  
In [15]: a_slice  
Out[15]: [0, 9, 7, 5]

频繁使用同一切片的操作可使用slice对象抽出来,复用的同时还能提高代码可读性。

28 lambda 函数的动画演示

有些读者反映,lambda函数不太会用,问我能不能解释一下。

比如,下面求这个 lambda函数:

def max_len(*lists):  
    return max(*lists, key=lambda v: len(v))

有两点疑惑:

  • 参数v的取值?

  • lambda函数有返回值吗?如果有,返回值是多少?

调用上面函数,求出以下三个最长的列表:

r = max_len([1, 2, 3], [4, 5, 6, 7], [8])  
print(f'更长的列表是{r}')

程序完整运行过程,动画演示如下:

807e2428a282c616187fde2f3e0e6c24.gif

结论:

  • 参数v的可能取值为*lists,也就是 tuple 的一个元素。

  • lambda函数返回值,等于lambda v冒号后表达式的返回值。

四、 数据结构

29 转为字典

创建数据字典

In [1]: dict()  
Out[1]: {}  
  
In [2]: dict(a='a',b='b')  
Out[2]: {'a': 'a', 'b': 'b'}  
  
In [3]: dict(zip(['a','b'],[1,2]))  
Out[3]: {'a': 1, 'b': 2}  
  
In [4]: dict([('a',1),('b',2)])  
Out[4]: {'a': 1, 'b': 2}

30 冻结集合

创建一个不可修改的集合。

In [1]: frozenset([1,1,3,2,3])  
Out[1]: frozenset({1, 2, 3})

因为不可修改,所以没有像set那样的add和pop方法

31 转为集合类型

返回一个set对象,集合内不允许有重复元素:

In [159]: a = [1,4,2,3,1]  
  
In [160]: set(a)  
Out[160]: {1, 2, 3, 4}

32 转为切片对象

class slice(start, stop[, step])

返回一个表示由 range(start, stop, step) 所指定索引集的 slice对象,它让代码可读性、可维护性变好。

In [1]: a = [1,4,2,3,1]  
  
In [2]: my_slice_meaning = slice(0,5,2)  
  
In [3]: a[my_slice_meaning]  
Out[3]: [1, 2, 1]

33 转元组

tuple() 将对象转为一个不可变的序列类型

In [16]: i_am_list = [1,3,5]  
In [17]: i_am_tuple = tuple(i_am_list)  
In [18]: i_am_tuple  
Out[18]: (1, 3, 5)

五、 类和对象

34 是否可调用

检查对象是否可被调用

In [1]: callable(str)  
Out[1]: True  
  
In [2]: callable(int)  
Out[2]: True
In [18]: class Student():  
    ...:     def __init__(self,id,name):  
    ...:         self.id = id   
    ...:         self.name = name   
    ...:     def __repr__(self):  
    ...:         return 'id = '+self.id +', name = '+self.name   
    ...  
  
In [19]: xiaoming = Student('001','xiaoming')  
  
In [20]: callable(xiaoming)  
Out[20]: False

如果能调用xiaoming(), 需要重写Student类的__call__方法:

In [1]: class Student():  
    ...:     def __init__(self,id,name):  
    ...:         self.id = id  
    ...:         self.name = name  
    ...:     def __repr__(self):  
    ...:         return 'id = '+self.id +', name = '+self.name  
    ...:     def __call__(self):  
    ...:         print('I can be called')  
    ...:         print(f'my name is {self.name}')  
    ...:  
  
In [2]: t = Student('001','xiaoming')  
  
In [3]: t()  
I can be called  
my name is xiaoming

35 ascii 展示对象

调用对象的 __repr__ 方法,获得该方法的返回值,如下例子返回值为字符串

>>> class Student():  
    def __init__(self,id,name):  
        self.id = id  
        self.name = name  
    def __repr__(self):  
        return 'id = '+self.id +', name = '+self.name

调用:

>>> xiaoming = Student(id='1',name='xiaoming')  
>>> xiaoming  
id = 1, name = xiaoming  
>>> ascii(xiaoming)  
'id = 1, name = xiaoming'

36 类方法

classmethod 装饰器对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。

In [1]: class Student():  
    ...:     def __init__(self,id,name):  
    ...:         self.id = id  
    ...:         self.name = name  
    ...:     def __repr__(self):  
    ...:         return 'id = '+self.id +', name = '+self.name  
    ...:     @classmethod  
    ...:     def f(cls):  
    ...:         print(cls)

37 动态删除属性

删除对象的属性

In [1]: delattr(xiaoming,'id')  
  
In [2]: hasattr(xiaoming,'id')  
Out[2]: False

38 一键查看对象所有方法

不带参数时返回当前范围内的变量、方法和定义的类型列表;带参数时返回参数的属性,方法列表。

In [96]: dir(xiaoming)  
Out[96]:  
['__class__',  
 '__delattr__',  
 '__dict__',  
 '__dir__',  
 '__doc__',  
 '__eq__',  
 '__format__',  
 '__ge__',  
 '__getattribute__',  
 '__gt__',  
 '__hash__',  
 '__init__',  
 '__init_subclass__',  
 '__le__',  
 '__lt__',  
 '__module__',  
 '__ne__',  
 '__new__',  
 '__reduce__',  
 '__reduce_ex__',  
 '__repr__',  
 '__setattr__',  
 '__sizeof__',  
 '__str__',  
 '__subclasshook__',  
 '__weakref__',  
   
 'name']

39 动态获取对象属性

获取对象的属性

In [1]: class Student():  
   ...:     def __init__(self,id,name):  
   ...:         self.id = id  
   ...:         self.name = name  
   ...:     def __repr__(self):  
   ...:         return 'id = '+self.id +', name = '+self.name  
  
In [2]: xiaoming = Student(id='001',name='xiaoming')  
In [3]: getattr(xiaoming,'name') # 获取xiaoming这个实例的name属性值  
Out[3]: 'xiaoming'

40 对象是否有这个属性

In [1]: class Student():  
   ...:     def __init__(self,id,name):  
   ...:         self.id = id  
   ...:         self.name = name  
   ...:     def __repr__(self):  
   ...:         return 'id = '+self.id +', name = '+self.name  
  
In [2]: xiaoming = Student(id='001',name='xiaoming')  
In [3]: hasattr(xiaoming,'name')  
Out[3]: True  
  
In [4]: hasattr(xiaoming,'address')  
Out[4]: False

41 对象门牌号

返回对象的内存地址

In [1]: id(xiaoming)  
Out[1]: 98234208

42 isinstance

判断_object_是否为类_classinfo_的实例,是返回true

In [1]: class Student():  
   ...:     def __init__(self,id,name):  
   ...:         self.id = id  
   ...:         self.name = name  
   ...:     def __repr__(self):  
   ...:         return 'id = '+self.id +', name = '+self.name  
  
In [2]: xiaoming = Student(id='001',name='xiaoming')  
  
In [3]: isinstance(xiaoming,Student)  
Out[3]: True

43 父子关系鉴定

In [1]: class undergraduate(Student):  
    ...:     def studyClass(self):  
    ...:         pass  
    ...:     def attendActivity(self):  
    ...:         pass  
  
In [2]: issubclass(undergraduate,Student)  
Out[2]: True  
  
In [3]: issubclass(object,Student)  
Out[3]: False  
  
In [4]: issubclass(Student,object)  
Out[4]: True

如果class是classinfo元组中某个元素的子类,也会返回True

In [1]: issubclass(int,(int,float))  
Out[1]: True

44 所有对象之根

object 是所有类的基类

In [1]: o = object()  
  
In [2]: type(o)  
Out[2]: object

45 创建属性的两种方式

返回 property 属性,典型的用法:

class C:  
    def __init__(self):  
        self._x = None  
  
    def getx(self):  
        return self._x  
  
    def setx(self, value):  
        self._x = value  
  
    def delx(self):  
        del self._x  
    # 使用property类创建 property 属性  
    x = property(getx, setx, delx, "I'm the 'x' property.")

使用python装饰器,实现与上完全一样的效果代码:

class C:  
    def __init__(self):  
        self._x = None  
  
    @property  
    def x(self):  
        return self._x  
  
    @x.setter  
    def x(self, value):  
        self._x = value  
  
    @x.deleter  
    def x(self):  
        del self._x

46 查看对象类型

class type(name, bases, dict)

传入一个参数时,返回 object 的类型:

In [1]: class Student():  
   ...:     def __init__(self,id,name):  
   ...:         self.id = id  
   ...:         self.name = name  
   ...:     def __repr__(self):  
   ...:         return 'id = '+self.id +', name = '+self.name  
   ...:  
  
In [2]: xiaoming = Student(id='001',name='xiaoming')  
In [3]: type(xiaoming)  
Out[3]: __main__.Student  
  
In [4]: type(tuple())  
Out[4]: tuple

47 元类

xiaoming, xiaohong, xiaozhang 都是学生,这类群体叫做 Student.

Python 定义类的常见方法,使用关键字 class

In [36]: class Student(object):  
    ...:     pass

xiaoming, xiaohong, xiaozhang 是类的实例,则:

xiaoming = Student()  
xiaohong = Student()  
xiaozhang = Student()

创建后,xiaoming 的 __class__ 属性,返回的便是 Student类

In [38]: xiaoming.__class__  
Out[38]: __main__.Student

问题在于,Student 类有 __class__属性,如果有,返回的又是什么?

In [39]: xiaoming.__class__.__class__  
Out[39]: type

哇,程序没报错,返回 type

那么,我们不妨猜测:Student 类,类型就是 type

换句话说,Student类就是一个对象,它的类型就是 type

所以,Python 中一切皆对象,类也是对象

Python 中,将描述 Student 类的类被称为:元类。

按照此逻辑延伸,描述元类的类被称为:_元元类_,开玩笑了~ 描述元类的类也被称为元类。

聪明的朋友会问了,既然 Student 类可创建实例,那么 type 类可创建实例吗?如果能,它创建的实例就叫:类 了。你们真聪明!

说对了,type 类一定能创建实例,比如 Student 类了。

In [40]: Student = type('Student',(),{})  
  
In [41]: Student  
Out[41]: __main__.Student

它与使用 class 关键字创建的 Student 类一模一样。

Python 的类,因为又是对象,所以和 xiaoming,xiaohong 对象操作相似。支持:

  • 赋值

  • 拷贝

  • 添加属性

  • 作为函数参数

In [43]: StudentMirror = Student # 类直接赋值 # 类直接赋值  
In [44]: Student.class_property = 'class_property' # 添加类属性  
In [46]: hasattr(Student, 'class_property')  
Out[46]: True

元类,确实使用不是那么多,也许先了解这些,就能应付一些场合。就连 Python 界的领袖 Tim Peters 都说:

“元类就是深度的魔法,99%的用户应该根本不必为此操心。

六、工具

48 枚举对象

返回一个可以枚举的对象,该对象的next()方法将返回一个元组。

In [1]: s = ["a","b","c"]  
    ...: for i ,v in enumerate(s,1):  
    ...:     print(i,v)  
    ...:  
1 a  
2 b  
3 c

49 查看变量所占字节数

In [1]: import sys  
  
In [2]: a = {'a':1,'b':2.0}  
  
In [3]: sys.getsizeof(a) # 占用240个字节  
Out[3]: 240

50 过滤器

在函数中设定过滤条件,迭代元素,保留返回值为True的元素:

In [1]: fil = filter(lambda x: x>10,[1,11,2,45,7,6,13])  
  
In [2]: list(fil)  
Out[2]: [11, 45, 13]

51 返回对象的哈希值

返回对象的哈希值,值得注意的是自定义的实例都是可哈希的,list, dict, set等可变对象都是不可哈希的(unhashable)

In [1]: hash(xiaoming)  
Out[1]: 6139638  
  
In [2]: hash([1,2,3])  
# TypeError: unhashable type: 'list'

52 一键帮助

返回对象的帮助文档

In [1]: help(xiaoming)  
Help on Student in module __main__ object:  
  
class Student(builtins.object)  
 |  Methods defined here:  
 |  
 |  __init__(self, id, name)  
 |  
 |  __repr__(self)  
 |  
 |  Data descriptors defined here:  
 |  
 |  __dict__  
 |      dictionary for instance variables (if defined)  
 |  
 |  __weakref__  
 |      list of weak references to the object (if defined)

53 获取用户输入

获取用户输入内容

In [1]: input()  
aa  
Out[1]: 'aa'

54 创建迭代器类型

使用iter(obj, sentinel), 返回一个可迭代对象, sentinel可省略(一旦迭代到此元素,立即终止)

In [1]: lst = [1,3,5]  
  
In [2]: for i in iter(lst):  
    ...:     print(i)  
    ...:  
1  
3  
5
In [1]: class TestIter(object):  
    ...:     def __init__(self):  
    ...:         self.l=[1,3,2,3,4,5]  
    ...:         self.i=iter(self.l)  
    ...:     def __call__(self):  #定义了__call__方法的类的实例是可调用的  
    ...:         item = next(self.i)  
    ...:         print ("__call__ is called,fowhich would return",item)  
    ...:         return item  
    ...:     def __iter__(self): #支持迭代协议(即定义有__iter__()函数)  
    ...:         print ("__iter__ is called!!")  
    ...:         return iter(self.l)  
In [2]: t = TestIter()  
In [3]: t() # 因为实现了__call__,所以t实例能被调用  
__call__ is called,which would return 1  
Out[3]: 1  
  
In [4]: for e in TestIter(): # 因为实现了__iter__方法,所以t能被迭代  
    ...:     print(e)  
    ...:  
__iter__ is called!!  
1  
3  
2  
3  
4  
5

55 打开文件

返回文件对象

In [1]: fo = open('D:/a.txt',mode='r', encoding='utf-8')  
  
In [2]: fo.read()  
Out[2]: '\ufefflife is not so long,\nI use Python to play.'

mode取值表:

f2b52fc17d68e8a8a522e3ba5fa5eff8.png

56 创建range序列

  1. range(stop)

  2. range(start, stop[,step])

生成一个不可变序列:

In [1]: range(11)  
Out[1]: range(0, 11)  
  
In [2]: range(0,11,1)  
Out[2]: range(0, 11)

57 反向迭代器

In [1]: rev = reversed([1,4,2,3,1])  
  
In [2]: for i in rev:  
     ...:     print(i)  
     ...:  
1  
3  
2  
4  
1

58 聚合迭代器

创建一个聚合了来自每个可迭代对象中的元素的迭代器:

In [1]: x = [3,2,1]  
In [2]: y = [4,5,6]  
In [3]: list(zip(y,x))  
Out[3]: [(4, 3), (5, 2), (6, 1)]  
  
In [4]: a = range(5)  
In [5]: b = list('abcde')  
In [6]: b  
Out[6]: ['a', 'b', 'c', 'd', 'e']  
In [7]: [str(y) + str(x) for x,y in zip(a,b)]  
Out[7]: ['a0', 'b1', 'c2', 'd3', 'e4']

59 链式操作

from operator import (add, sub)  
  
  
def add_or_sub(a, b, oper):  
    return (add if oper == '+' else sub)(a, b)  
  
  
add_or_sub(1, 2, '-')  # -1

60 对象序列化

对象序列化,是指将内存中的对象转化为可存储或传输的过程。很多场景,直接一个类对象,传输不方便。

但是,当对象序列化后,就会更加方便,因为约定俗成的,接口间的调用或者发起的 web 请求,一般使用 json 串传输。

实际使用中,一般对类对象序列化。先创建一个 Student 类型,并创建两个实例。

class Student():  
    def __init__(self,**args):  
        self.ids = args['ids']  
        self.name = args['name']  
        self.address = args['address']  
xiaoming = Student(ids = 1,name = 'xiaoming',address = '北京')  
xiaohong = Student(ids = 2,name = 'xiaohong',address = '南京')

导入 json 模块,调用 dump 方法,就会将列表对象 [xiaoming,xiaohong],序列化到文件 json.txt 中。

import json  
  
with open('json.txt', 'w') as f:  
    json.dump([xiaoming,xiaohong], f, default=lambda obj: obj.__dict__, ensure_ascii=False, indent=2, sort_keys=True)

生成的文件内容,如下:

[  
    {  
        "address":"北京",  
        "ids":1,  
        "name":"xiaoming"  
    },  
    {  
        "address":"南京",  
        "ids":2,  
        "name":"xiaohong"  
    }  
]

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~

推荐阅读  点击标题可跳转

1、Python 项目工程化最佳实践

2、Python 可以比 C 还要快!

3、streamlit,一个超强的 Python 库

4、豆瓣8.9分的C++经典之作,免费送!

5、Python 3.12 版本有什么变化?

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

👇关注我的公众号👇

告诉你更多细节干货

d3e31755d23b219edddab2dbb900bbb7.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

20+个小而精的Python实战案例(附源码和数据)_python应用案例 阅读详情

相关推荐

Python3 实例(一) | 菜鸟教程(十九)

>> li>>> li[1]'b'例如:(ar[], d, n) 将长度为 n 的 数组 arr 的前面 d 个元素翻转到数组尾部。

wuds_158的博客 3755

十五个Python经典案例,学会这些,Python基础已过关!

今天给大家搜集了十五道Python的经典案例,希望各位都能学会!不懂得大家可以在加群在群里发消息问问题,想要资料的也自取! 一、猜数字 1到4能组成多少个互不相同且不重复数字的三位数?分别是? 分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 程序源代码: 二、公司发放的奖金的计算 分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 程序源代码: 三、一个整数加上100后是一个完全平方数,再加168又是一个完

码农黑羽的博客 9972

体系结构学习-6-超标量处理器

 MIPS32-5段流水线采用了指令级并行方式(5个流水段同时运行5条指令)提升系统吞吐率,是一种标量处理器(CPI≥1CPI \ge 1CPI≥1),但是一个周期一条指令以及无法满足现代计算机需求了。 超标量处理器(Superscalar) 1、基本思想:增强指令集并行,让每个周期执行更多指令,实现 CPI<1CPI<1CPI<1 。(IPC=1/CPIIPC = 1...

qq_40891899的博客 1211

60 个 Python 闯关小例子,建议收藏!

一、 数字1 求绝对值绝对值或复数的模In [1]: abs(-6) Out[1]: 62 进制转化十进制转换为二进制:In [2]: bin(10) Out[2]: '0b101...

lsxxx2011的专栏 497

UE5动画革命:如何用Motion Matching技术让你的游戏角色动作更流畅(附实战配置)

本文深入解析了UE5中Motion Matching技术的实战配置与应用。通过对比传统动画状态机的局限,详细阐述了如何构建动画数据库、在UE5中配置Pose Search Database及动画蓝图,并探讨了与IK融合、性能优化等进阶策略。该技术能显著提升游戏角色动作的流畅度与真实感,是下一代动画解决方案的核心。

weixin_29075633的博客 862

告别Keil!用VSCode+PlatformIO玩转STC单片机(附自动下载配置)

本文详细介绍了如何从Keil迁移到VSCode+PlatformIO进行STC单片机开发,包括环境搭建、自动下载配置等实用技巧。通过对比传统IDE与现代工具链的差异,展示了VSCode+PlatformIO在代码编辑体验、跨平台支持和开发效率上的优势,帮助开发者实现更流畅的STC单片机开发流程。

weixin_27252001的博客 457

整理了60个 Python 实战例子,拿来即用!

人生苦短,我用 Python!大家好,最近有一些朋友问我有没有一些 Python 实战小案例。今天我整理排版了一遍,给大家分享一下。

m0_68507761的博客 8244

手把手教你用 Cursor 写一个完整的 Web 应用(含前后端 + 部署)

本文介绍如何利用Cursor AI工具从零开发一个完整的全栈待办事项Web应用。文章针对开发者常见痛点——无法独立完成项目闭环,提供了一套AI驱动的全栈开发范式。通过Vue3+Node.js+MySQL技术栈,全程由Cursor自动生成项目架构、前后端代码、数据库设计,并解决联调、部署等关键问题。重点展示了如何用AI完成:项目规划与架构设计、后端接口开发、前端页面实现、跨域联调、打包优化及云端部署全流程。该方法将传统需要3-5天的开发工作压缩至1小时内完成,产出规范可上线的项目,特别适合想突破"碎

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 633

整理了60个Python小例子,拿来即用!

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。但是,当对象序列化后,就会更加方便,因为约定俗成的,接口间的调用或者发起的 web 请求,一般使用 json 串传输。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。很多场景,直接一个类对象,传输不方便。

m0_59236602的博客 2162

EMD-LSTM时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

EMD-LSTM时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 654

【深度学习驱动流体力学】Python流体力学Ansys Fluent

PyFluent 是一个将 Python 编程语言与 Ansys Fluent 流体动力学 (CFD) 仿真软件集成的工具。它允许用户通过 Python 脚本来控制和自动化 Fluent 中的仿真任务,实现从预处理、求解到后处理的全流程控制。PyFluent 结合了 Python 的灵活性和 Fluent 的强大功能,提供了一种高效且灵活的 CFD 仿真方法。PyFluent 是一个强大而灵活的工具,使用户能够通过 Python 脚本全面利用 Ansys Fluent 的功能。

源代码杀手的博客 3123

推荐收藏,整理了60个Python小例子

人生苦短,我用Python 大家好,今天我整理了 60 个 Python 小例子,前容后难,你可以拿来即用,分享给大家。喜欢记得收藏、点赞、关注。 完整代码、资料、技术交流文末获取 一、 数字 1 求绝对值 绝对值或复数的模 In [1]: abs(-6) Out[1]: 6 2 进制转化 十进制转换为二进制: In [2]: bin(10) Out[2]: '0b1010' 十进制转换为八进制: In [3]: oct(9) Out[3]: '0o11' 十进制转换为十六进制: In [

Python学习与数据挖掘 2220

C++之2048小游戏 第二期

游戏会有初始化、绘制界面、处理输入、更新游戏状态、判断胜负等部分。所以,可能需要一个二维数组来表示4x4的网格,存储每个格子的数值。然后,需要处理键盘输入,尤其是方向键的控制,这可能需要使用EasyX的键盘事件处理函数。然后,关于图形绘制部分,每个格子的大小、颜色、数字的显示都需要设计。不同的数字对应不同的颜色,比如2是浅色,4稍深,以此类推。可能需要一个函数根据数字的值返回对应的颜色,然后在绘制时调用。接下来,处理数字的移动和合并逻辑。这是比较复杂的部分。

Lucky_Glory的博客 804

整理了60个 Python 实战例子,拿来即用

大家好,最近有一些朋友问我有没有一些 Python 实战小案例。今天我整理排版了一遍,给大家分享一下。喜欢记得点赞、收藏、关注。 整理了60个Python小例子,拿来即用!

y1282037271的博客 3070

Ardupilot二次开发(二):自定义mavlivk消息

在下面的文件添加自定义消息的xml定义然后编译固件,会生成相应的消息头文件。

超维空间科技的博客 2312

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

整理了60个 Python 小例子,拿来即用!

作者 | 快学Python来源 | https://github.com/jackzhenguo/python-small-examples今天给大家分享一下60个Python小例子,拿来即用!一、 数字1、求绝对值绝对值或复数的模#公众号:快学Python In[1]:abs(-6) Out[1]:62 进制转化十进制转换为二进制:In[2]:bin(1...

AI科技大本营 2058

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

超强!Python for S60(pys60)介绍

2004年,诺基亚公司作出了一个非常明智的决策(起码我是这样认为),在S60系统上发布了早已在国外广泛使用的Python平台(Python forS60,下面简称pys60),这意味着开发人员除了c++、java以外,还可以在S60手机上进行Python的开发。后来这个项目交给了开源社区发展,经过多次更新,直到现在最新版是1.3.23,可见诺基亚对于Python平台的重视,毕竟在S60

自在 的专栏 2690

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python程序例子安装目录,python编程的例子

大家好,小编来为大家解答以下问题,python程序例子安装目录,python编程的例子,今天让我们一起来看看吧!人生苦短,我用Python大家好,今天我整理了 60 个 Python 小例子,前容后难,你可以拿来即用,分享给大家。

npy199331的博客 844

3344:【例60.1】 整数去重

3344:【例60.1】 整数去重

青少年趣味编程 1105

又肝了3天,整理了80个Python DateTime 例子,必须收藏!

日常工作中,用 Python 处理时间格式的数据是非常常见的,今天就来分享 DateTime 相关的示例 文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的 萝卜哥也贴心的做成了PDF,在文末获取! 文章目录使用 time 模块展示当前日期和时间将天、小时、分钟转换为秒使用 Pandas 获取当前日期和时间将字符串转换为日期时间对象以毫秒为单位获取当前时间以 MST、EST、UTC、GMT 和 HST 获取当前日期时间从给定的日期当中获取星期几计算两个日期时间对象之间的时差将 5 分钟添加到 Uni

周萝卜的博客 2180

Python 自动整理 Excel 表格

Python 自动整理 Excel 表格 相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作。最近有朋友问可否编程来减轻表格整理工作量,今儿我们就通过实例来实现 Python 对表格的自动化整理。 首先我们有这么一份数据表 source.csv: 我们要做的是从上表中提取数据,来生成一份符合以下要求的表格: 按照以下分组名单 grou...

TEDxPY 4780
上一篇: 4 个常用的 Python 项目管理与构建工具
下一篇: 微软宣布开源 MS-DOS 4.0!
codingpy
博客等级 码龄11年 1867粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值