整理了223个Python小例子,分享给大家

2024年Python最全华为认证HCIP路由交换备考经验(1),海量数据分析面试题 现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。 阅读详情

小例子

一、 数字

1 求绝对值

绝对值或复数的模

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 [104]: print("i am {0},age{1}".format("tom",18))  
i am tom,age18  

3.1415926{:.2f}3.14保留小数点后两位
3.1415926{:+.2f}+3.14带符号保留小数点后两位
-1{:+.2f}-1.00带符号保留小数点后两位
2.71828{:.0f}3不带小数
5{:0>2d}05数字补零 (填充左边, 宽度为2)
5{:x<4d}5xxx数字补x (填充右边, 宽度为4)
10{:x<4d}10xx数字补x (填充右边, 宽度为4)
1000000{:,}1,000,000以逗号分隔的数字格式
0.25{:.2%}25.00%百分比格式
1000000000{:.2e}1.00e+09指数记法
18{:>10d}’ 18’右对齐 (默认, 宽度为10)
18{:<10d}'18 ’左对齐 (宽度为10)
18{:^10d}’ 18 ’中间对齐 (宽度为10)

三、 函数

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  
  
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))  \# (0,1)
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}')

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

结论:

  • 参数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取值表:

字符意义
'r'读取(默认)
'w'写入,并先截断文件
'x'排它性创建,如果文件已存在则失败
'a'写入,如果文件存在则在末尾追加
'b'二进制模式
't'文本模式(默认)
'+'打开用于更新(读取与写入)
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"  
    }  
\]

未完待续…

以上就是“整理了223个Python小例子,分享给大家”的全部内容,希望对你有所帮助。
​
​关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至优快云官方,朋友如果需要可以直接微信扫描下方优快云官方认证二维码免费领取【保证100%免费】。

Python图像增强之直方图均衡化(全局直方图均衡、局部直方图均衡)_python直方图均衡化(1) 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。全局直方图均衡该方法主要优点是算法简单、速度块、可自动曾倩图像;缺点是对噪声敏感、细节信息容易丢失,在某些结果区域产生过增强的问题。局部直方图均衡该方法优点是局部自适应,可最大限度的增强图像细节;缺点是增强图像质量操控困难,会随之引入噪声。 阅读详情

相关推荐

保姆级教程:在RK3568上调试RGMII网口,从设备树到PHY驱动的完整避坑指南

本文提供RK3568开发板上RGMII网口调试的完整指南,涵盖硬件检查、设备树配置、驱动加载及性能优化。通过详细步骤和实战案例,帮助开发者避开常见陷阱,确保以太网功能稳定运行,特别关注PHY驱动和MDIO总线的调试技巧。

weixin_26821003的博客 320

Python 8种基本数据类型简单实例

1:字符串类型 字符串里面有单引号就使用双引号括,字符串里面存在但引号,就是用双引号括 三个但引号,即所见即所得 str1=”sb1’” str2=’sb2”’ str3=”’sb3’ ”’ print str1,str2,str3 print type(str2) 2:布尔类型 flag= False 3:整数 num =20 print num print typ

nie_hw的博客 2046

告别设备管理器混乱!3分钟学会用STM32CubeMX+Zadig定制专属虚拟串口名称

本文详细介绍了如何利用STM32CubeMX和Zadig工具,为STM32的USB虚拟串口(VCP)定制专属设备名称,从而彻底解决多设备连接时设备管理器端口混乱的难题。通过修改产品字符串描述符并替换驱动,开发者可以在设备管理器中清晰识别不同开发板,显著提升调试效率,尤其适用于多设备协同的竞赛或项目开发场景。

a2b3c4d5e的博客 477

20个Python数据处理常用案例

Python凭借其简洁易懂的语法和丰富的第三方库,可高效的完成数据处理、数据分析等工作。本文将介绍20个Python 在数据处理中常用的案例。

呱牛 Just do IT 804

ArcGIS小白必看:5分钟搞定面要素转点要素+自动计算经纬度坐标(附常见报错解决方案)

本文为ArcGIS新手详细解析了面要素转点要素并自动计算经纬度坐标的完整流程。核心在于正确理解和使用坐标系,并掌握ArcToolbox中的“要素转点”等工具。文章深入剖析了常见报错(如坐标系未定义、字段计算失败)的根源,提供了从基础操作到Python脚本自动化的实战解决方案,确保数据转换的准确与高效。

weixin_29284885的博客 575

jlink驱动安装

jlink驱动下载安装及keil识别

qq_43868701的博客 3万+

精心整理20+Python实战案例(附源码、数据)

最近小编认真整理了20+个基于python的实战案例,主要包含:数据分析、可视化、机器学习/深度学习、时序预测等,案例的主要特点:提供源码:代码都是基于jupyter notebook,附带一定的注释,运行即可数据齐全:大部分案例都有提供数据,部分案例使用内置数据集。

Python栈_基的博客 6296

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略

本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优

VectorShift的博客 1330

Python六个基础数据类型是哪些?Python基础数据类型详解

在Python之中,如果不使用第三方库去创建一个其他的数据类型对象的话,那么python中可以直接使用的基础数据类型有六种。数据类型字符串的关键词是String,它是python之中使用最为频繁和广泛的一个数据类型。python之中的元组、列表、集合、字符串等数据类型统称为序列,因为它们都是由一个个的数据顺序组合起来的。数据类型字典就比较特别,因为它是一个以键值对的方式进行数据存储的数据类型。集合和其他的序列不同的的地方就在于集合内的所有元素必须为同一数据类型,这会由集合的第一个元素绝对,示例如下。

xiangxueerfei的博客 3108

camera QXXX架构

This article introduces the QCX camera architecture for Qualcomm’s latest automotive chips including SA8650. It elaborates the layered camera stack under QNX, HGY and HQX systems, covering client applications, stream manager, CamX components and hardware d

qq_39257814的博客 4541

2、硬件工程师笔试面试汇总(2025版本)

本文摘要:文章系统梳理了硬件工程师笔试面试中的电子元器件知识要点,涵盖电阻、电容、电感、二极管、三极管、MOS管等器件的工作原理、选型要点和应用场景。详细解析了UART、I2C、SPI等通信协议的特点及实现方式,并探讨了电源管理、信号处理、PCB设计等核心问题。针对常见电路如放大电路、滤波电路、逻辑电路等提供了深入分析,同时介绍了示波器使用、单片机系统设计等实用技能。文章还包含器件封装、电平转换、时序分析等工程实践内容,并附有相关真题解析和仿真实验指导,为硬件工程师提供全面的技术参考。

XU157303764的博客 9003

【Python支持多种数据类型及案列】

理解和熟练掌握这些基本数据类型及其操作,是编写高效和可靠的Python代码的基础。通过不断练习和应用,你会发现这些数据类型在不同的编程任务中发挥着重要作用。

m0_59789328的博客 958

【unity实战】Unity游戏开发:如何用ScriptableObject与序列化多态实现可复用的模块化效果系统?

本文介绍了两种实现卡牌游戏效果系统的模块化设计方案。方案一使用ScriptableObject创建独立的效果资产,通过组合实现不同效果,优点是数据可复用、可视化编辑,缺点是同类不同参数效果需创建大量SO文件。方案二利用SerializeReference特性直接嵌套效果实例,避免SO文件过多,但需要插件支持编辑器多态显示。两种方案都将效果与卡牌解耦,提高了代码复用性和扩展性,解决了硬编码带来的重复、维护困难和扩展不便等问题。开发者可根据项目需求选择合适方案,或结合两者优势构建更灵活的系统。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 435

python groupby用法_GitHub标星3.9K!223个Python小例子,一次让你吃个够!

大家好,我是程序员G哥,都说拳不离手,曲不离口,学习编程其实就跟练武一样,每个小白成长为大侠都需要经过不断的磨练,打怪升级,不断的增长经验值。而GitHub就是一个大的宝库,里面有各种武林秘籍,让你吸取能量!今天G哥在逛GitHub的时候,发现了一份非常不错的学习Python的资源。一共有223个小例子,每个60秒就能看完,一口一个,短小精悍,非常适合学习修炼。作者Jack非常厉害,整理...

weixin_39561004的博客 187

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

GitHub标星3.9K!223个Python小例子,一次让你吃个够!

大家好,我是程序员G哥,都说拳不离手,曲不离口,学习编程其实就跟练武一样,每个小白成长为大侠都需要经过不断的磨练,打怪升级,不断的增长经验值。而GitHub就是一个大的宝库,里面有各种武...

cainiao_python的博客 864

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python 小例子 源码 莫凡_太赞了!Python学习宝典,GitHub标星3.9K!223个小例子,一次让你吃个够!...

大家好,我是程序员G哥,都说拳不离手,曲不离口,学习编程其实就跟练武一样,每个小白成长为大侠都需要经过不断的磨练,打怪升级,不断的增长经验值。而GitHub就是一个大的宝库,里面有各种武林秘籍,让你吸取能量!今天G哥在逛GitHub的时候,发现了一份非常不错的学习Python的资源。一共有223个小例子,每个60秒就能看完,一口一个,短小精悍,非常适合学习修炼。作者Jack非常厉害,整理...

weixin_39989862的博客 136

Statistics and Machine Learning Toolbox

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

python正则菜鸟_GitHub标星3.9K!223个Python小例子,一次让你吃个够!

大家好,我是程序员G哥,都说拳不离手,曲不离口,学习编程其实就跟练武一样,每个小白成长为大侠都需要经过不断的磨练,打怪升级,不断的增长经验值。而GitHub就是一个大的宝库,里面有各种武林秘籍,让你吸取能量!今天G哥在逛GitHub的时候,发现了一份非常不错的学习Python的资源。一共有223个小例子,每个60秒就能看完,一口一个,短小精悍,非常适合学习修炼。作者Jack非常厉害,整理...

weixin_42500818的博客 109

太赞了!Python学习宝典,GitHub标星3.9K!223个小例子,一次让你吃个够!

大家好,我是菜鸟哥都说拳不离手,曲不离口,学习编程其实就跟练武一样,每个小白成长为大侠都需要经过不断的磨练,打怪升级,不断的增长经验值。而GitHub就是一个大的宝库,里面有各种武林秘籍,让你吸取能量!今天G哥在逛GitHub的时候,发现了一份非常不错的学习Python的资源。一共有223个小例子,每个60秒就能看完,一口一个,短小精悍,非常适合学习修炼。作者Jack非常...

cainiao_python的博客 376

Python 在 JMeter 中如何使用?

要在中使用Python,需要使用JSR223 Sampler元素来执行Python脚本。使用JSR223 Sampler执行Python脚本时,需要确保已在中配置了Python解释器,并设置了正确的环境路径。1、确保JMeter已安装,并将解释器的路径添加到计算机的环境变量中。2、在JMeter的lib目录中,创建一个新目录,用于存放所需的库文件。3、复制Python解释器的所有库文件(.jar文件)到刚创建的目录中。4、重启JMeter以确保它能够找到Python解释器和相关的库文件。

m0_65111097的博客 1064

分享爬取XX招聘的简单代码

简单的爬虫分享 XX招聘网站的简单爬虫,只限交流学习使用,严禁非法使用,非法使用概不负责。 代理主要使用了requests+BeautifulSoup,还有少量正则表达式。 也加入了代理池,在此感谢J_hao104,提供的获取代理的方法。 最后将爬取的数据存入Excel中。Python版本3.6,在这里依然推荐Anaconda管理Python版本及其工具包。 为了使爬取更加顺利,必须把爬虫伪装成浏...

李洋 552

分享面试经验,python画椭圆、星形线,Python开发面试宝典

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。一个人可以走的很快,但一群人才能走的更远。

m0_60388338的博客 445

cs python课程 加州大学_B站的CS课程整理 搬运

计算机系统基础:CMU 15-213 av24540152操作系统原理:伯克利 CS162 av17833855数据库原理:CMU 15-445 av39731185计算机网络:斯坦福 CS144 av11930774算法设计与分析:MIT 6.006 av8481187编译原理:斯坦福 CS143 av17669734高级数据库:CMU 15-721 av39753181并发与分布式系统布朗大学...

weixin_39873191的博客 501

2024Python开发社招面试总结+解答分享,用几行python代码偷偷复制U盘文件_python自动下载u盘doc文件,大厂面试题前端

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。最后双击打开生成的exe文件,你看不到界面,但是可以在任务管理器的后台进程中找到,当有U盘插入,就会自动复制到你设定的地址,然后进程就会自动关闭。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。-p 添加搜索路径,让其找到对应的库。

2401_84122760的博客 290
上一篇: 利用Python打造一个语音合成系统(附源代码)
下一篇: 太方便了!告别复制粘贴,Python 轻松实现 PDF 转文本!
壹只小小码农
博客等级 码龄5年 8098粉丝 1334原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值