经验丰富程序员才知道的15种高级Python小技巧(收藏)

1. 列表解析

Python提供了列表解析的方法,可以快速地生成新的列表,而无需使用循环或迭代器。比如,我们可以使用列表解析将一个列表中的所有元素加1:

old_list = [1, 2, 3, 4, 5]

new_list = [x + 1 for x in old_list]

print(new_list)

输出结果为:

[2, 3, 4, 5, 6]

1.1. 条件解析

条件解析是列表解析的一种扩展形式,可以在列表解析的表达式中包含if语句,而只有符合条件的元素才会被包含在生成的列表中。比如:

old_list = [1, 2, 3, 4, 5]

new_list = [x for x in old_list if x % 2 == 0]

print(new_list)

输出结果为:

[2, 4]

上面的例子只将old_list中的偶数元素添加到new_list中。

2. 枚举

枚举可以在迭代过程中同时获取每个元素的索引和值,可以使用Python的enumerate()函数来实现。比如:

my_list = ['apple', 'banana', 'orange']

for i, value in enumerate(my_list):

print(i, value)

输出结果为:

0 apple

1 banana

2 orange

3. 字典推导

与列表解析类似,Python中也提供了字典推导的方法,可以方便地生成新的字典,比如:

old_dict = {'apple': 1, 'banana': 2, 'orange': 3}

new_dict = {key: value * 2 for key, value in old_dict.items()}

print(new_dict)

输出结果为:

{'apple': 2, 'banana': 4, 'orange': 6}

上面的例子将old_dict中的每个值都扩大了2倍,并将结果保存到了new_dict中。

4. map()函数

map()函数可以将一个函数应用到一个序列的每个元素上,并将结果作为一个新的列表返回。比如:

def square(x):

return x ** 2

old_list = [1, 2, 3, 4, 5]

new_list = list(map(square, old_list))

print(new_list)

输出结果为:

[1, 4, 9, 16, 25]

5. filter()函数

filter()函数可以过滤序列中的元素,返回一个由符合条件的元素构成的新的列表。比如:

def is_even(x):

return x % 2 == 0

old_list = [1, 2, 3, 4, 5]

new_list = list(filter(is_even, old_list))

print(new_list)

输出结果为:

[2, 4]

6. lambda函数

lambda函数是一种匿名函数,可以快速地定义一些简单的函数。比如:

square = lambda x: x ** 2

print(square(2))

输出结果为:

4

7. zip()函数

zip()函数可以将多个序列中的元素打包成一个由元组构成的新的序列,并返回。比如:

a = [1, 2, 3]

b = ['a', 'b', 'c']

c = zip(a, b)

print(list(c))

输出结果为:

[(1, 'a'), (2, 'b'), (3, 'c')]

8. assert语句

assert语句用于检查条件是否为真,如果条件不成立,则会抛出AssertionError异常。比如:

x = 2

assert x == 1, 'x must be equal to 1'

当x不等于1时,就会抛出AssertionError异常,并提示错误信息。

9. with语句

with语句用于简化对文件、网络连接、锁等资源的处理,可以自动管理资源的申请和释放。比如:

with open('file.txt', 'r') as f:

print(f.read())

上面的代码可以自动打开并关闭文件,不需要显式地调用f.close()方法。

10. 单下划线和双下划线

Python中有一些特殊的标识符,以单下划线或双下划线开头或结尾。

10.1. 单下划线

以单下划线开头的变量或函数,表示其是一个私有变量或函数,不应该在外部直接访问。比如:

class MyClass:

def __init__(self):

self._x = 1

def _private_func(self):

pass

my_object = MyClass()

print(my_object._x)

my_object._private_func()

虽然_x和_private_func()都以单下划线开头,但这只是一种约定,Python并不会强制限制对其的访问。

10.2. 双下划线

以双下划线开头的变量或函数,表示其是一个特殊属性,Python会自动进行名称重整(Name Mangling),以防止子类不小心覆盖父类的方法。比如:

class MyClass:

def __init__(self):

self.__x = 1

def __private_func(self):

pass

my_object = MyClass()

print(my_object._MyClass__x)

my_object._MyClass__private_func()

由于名称重整的缘故,我们需要在名称前加上类名和一个下划线才能访问这些特殊属性。

11. @staticmethod和@classmethod

Python中的静态方法和类方法可以分别使用装饰器@staticmethod和@classmethod来定义。静态方法和类方法可以在不实例化类的情况下访问类的属性和方法。

11.1. 静态方法

静态方法使用@staticmethod装饰器来定义,可以在函数中访问类的属性和方法,但是不能访问实例的属性和方法。比如:

class MyClass:

@staticmethod

def my_static_method():

print('This is a static method.')

MyClass.my_static_method()

输出结果为:

This is a static method.

11.2. 类方法

类方法使用@classmethod装饰器来定义,第一个参数通常为cls(表示类本身),可以在函数中访问类的属性和方法。比如:

class MyClass:

x = 0

@classmethod

def my_class_method(cls):

cls.x += 1

print('This is a class method.', cls.x)

MyClass.my_class_method()

MyClass.my_class_method()

MyClass.my_class_method()

输出结果为:

This is a class method. 1

This is a class method. 2

This is a class method. 3

12. 列表切片

Python列表支持切片操作,可以通过切片获取列表的部分元素或进行倒序处理。比如:

my_list = [1, 2, 3, 4, 5]

new_list = my_list[1:3]

print(new_list)

输出结果为:

[2, 3]

也可以使用步长来控制切片间隔:

my_list = [1, 2, 3, 4, 5]

new_list = my_list[::2]

print(new_list)

输出结果为:

[1, 3, 5]

13. 字符串格式化

在Python中,可以使用字符串格式化来将一个字符串中的占位符替换为指定的值。比如:

name = 'John'

age = 20

print('My name is {} and I am {} years old.'.format(name, age))

输出结果为:

My name is John and I am 20 years old.

14. 函数参数列表

函数参数列表可以包含位置参数、默认参数、可变参数和关键字参数。

14.1. 位置参数

位置参数指的是按照位置传递的参数,可以使用函数的形参名和实参名不一致,但是按照位置传递参数时,还是需要按照形参的位置传递参数。比如:

def my_function(a, b, c):

print(a, b, c)

my_function(1, 2, 3)

my_function(a=1, b=2, c=3)

my_function(1, c=3, b=2)

输出结果为:

1 2 3

1 2 3

1 2 3

14.2. 默认参数

默认参数指的是一旦给定了默认值,就能在调用函数时省略该参数。默认参数需要放在位置参数后面,否则会抛出语法错误。

def my_function(a, b=2, c=3):

print(a, b, c)

my_function(1)

my_function(1, 4)

my_function(1, c=5)

输出结果为:

1 2 3

1 4 3

1 2 5

14.3. 可变参数

可变参数可以接收任意数量的参数,使用*表示。比如:

def my_function(*args):

for arg in args:

print(arg)

my_function(1, 2, 3)

my_function('a', 'b', 'c')

输出结果为:

1

2

3

a

b

c

14.4. 关键字参数

关键字参数可以接收任意数量的参数,使用**表示。比如:

def my_function(**kwargs):

for key, value in kwargs.items():

print(key, value)

my_function(name='John', age=20)

my_function(country='China', city='Beijing')

输出结果为:

name John

age 20

country China

city Beijing

15. 列表排序

Python中可以使用sort()方法将列表进行排序,默认是按照升序排列,也可以通过传入reverse=True实现降序排序。

my_list = [3, 1, 4, 2, 5]

my_list.sort()

print(my_list)

my_list.sort(reverse=True)

print(my_list)

输出结果为:

[1, 2, 3, 4, 5]

[5, 4, 3, 2, 1]

这些高级Python小技巧可以帮助我们更加方便地编写Python程序,提高编程效率。

后端开发标签