一次掌握20个Python小技巧,让你的代码优雅到飞起!

Python 以其简洁优雅的语法受到广泛欢迎,然而,即便是老手,也难免有时会遗漏一些高效的 Python 技巧。

今天,我就来分享 20 个超实用的 Python 小技巧,帮助你写出更简洁、更优雅、更高效的代码!


1. 一行代码实现变量互换

想象一下,你有两个变量,一个是字符串 "text",一个是整数 100,如果想要交换它们的值,传统的方法可能需要借助一个临时变量,比如这样:

temp = a
a = b
b = temp

但在 Python 里,我们可以用一行代码搞定:

a, b = b, a

这样,a 和 b 的值就直接互换了!

甚至,你可以用同样的方式交换三个变量:

a, b, c = c, b, a

是不是超级方便?


2. 颠倒字符串和列表

有时候,我们需要把一个字符串或者列表的顺序颠倒,Python 提供了一个简单的方法:

reversed_list = my_list[::-1]  # 颠倒列表
reversed_string = my_string[::-1]  # 颠倒字符串

这比使用 reversed() 方法更加简洁直观。


3. 让字符串“无限”重复

如果你想快速生成多个相同的字符串,例如打印 20 个 "A",你可能会这样写:

shout = "A" * 20

结果就是 "AAAAAAAAAAAAAAAAAAAA"。如果你想重复整个单词,比如 "Hello" 5 次:

result = "Hello " * 5

输出:Hello Hello Hello Hello Hello

是不是比手动拼接更高效?


4. 一行代码搞定条件判断

通常,我们会用 if-else 来判断一个数是奇数还是偶数:

num = 10
if num % 2 == 0:
    result = "偶数"
else:
    result = "奇数"

但你可以直接写成一行:

result = "偶数" if num % 2 == 0 else "奇数"

Python 让代码变得更简洁直观!


5. 一行代码合并字符串

假设你有一组邮箱地址的列表,现在你想把它们拼接成一条 , 分隔的字符串:

emails = ["a@example.com", "b@example.com", "c@example.com"]
result = ", ".join(emails)
print(result)

输出:a@example.com, b@example.com, c@example.com

使用 join() 方法可以避免手动拼接字符串,提高代码的可读性。


6. 更安全地获取字典中的值

在操作 Python 字典时,如果你尝试访问一个不存在的键,Python 会抛出 KeyError,但你可以使用 .get() 方法安全获取值:

data = {"name": "Alice", "age": 25}
age = data.get("age", "默认值")  # 如果 'age' 存在,则返回其值,否则返回 '默认值'
print(age)  # 输出 25

7. 自动创建字典默认值

如果你要读取某个字典的键,并希望在键不存在时设置默认值,你可以使用 setdefault() 方法:

scores = {"Alice": 90, "Bob": 85}
bob_score = scores.setdefault("Bob", 0)  # 如果 Bob 存在,则返回其值,否则设置为 0
james_score = scores.setdefault("James", 0)  # James 不存在,则创建键并设为 0
print(scores)  # 输出 {'Alice': 90, 'Bob': 85, 'James': 0}

8. 统计列表中元素出现的次数

假设你有一个列表,想知道其中某个元素出现的次数,最简单的方法是使用 collections.Counter

from collections import Counter

letters = ["a", "b", "c", "a", "b", "a"]
counter = Counter(letters)

print(counter)  # 输出 {'a': 3, 'b': 2, 'c': 1}
print(counter.most_common(1))  # 获取出现次数最多的元素 [('a', 3)]

9. 给 enumerate() 设置起始值

通常,我们在遍历列表时会使用 enumerate(),默认情况下,它从 0 开始计数:

names = ["Alice", "Bob", "Charlie"]
for index, name in enumerate(names):
    print(index, name)

但如果你想让索引从 1 开始,可以这样做:

for index, name in enumerate(names, start=1):
    print(index, name)

输出:

1 Alice
2 Bob
3 Charlie

10. 一行代码合并两个字典

如果你想合并两个字典,传统方法是:

dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
merged = {**dict1, **dict2}

但 Python 3.9 以后,你可以用 | 运算符更简洁地合并字典:

merged = dict1 | dict2

这样,你就得到了合并后的字典!


11. 让大数字更易读

如果你需要在代码中写入一个大数字,比如 1000000,可能会因为数零太多而感到困惑。Python 允许你使用 下划线 _ 作为分隔符,让数字更易读:

big_number = 1_000_000  # 这个和 1000000 是一样的
print(big_number)  # 输出 1000000

这不会影响计算,Python 会自动忽略这些下划线。但它极大地提高了代码的可读性!

你还可以使用格式化字符串来让输出更直观:

print(f"{big_number:_}")  # 输出 1_000_000

12. 让类像函数一样调用

Python 允许你创建可调用的类,这样类的实例可以像函数一样使用。这是通过 __call__ 方法实现的:

class Multiplier:
    def __init__(self, factor):
        self.factor = factor

    def __call__(self, value):
        return self.factor * value

double = Multiplier(2)  # 创建一个倍数器
print(double(10))  # 输出 20

这里 double(10) 直接调用了 Multiplier 类的实例,就像调用函数一样,是不是很有趣?


13. 方法链式调用

如果你写过 OOP(面向对象编程),你可能会遇到这样的情况:一个类有多个方法,你需要连续调用它们。这时,我们可以返回 self,从而支持链式调用

class Person:
    def__init__(self, name, age):
        self.name = name
        self.age = age

    defset_name(self, new_name):
        self.name = new_name
        returnself# 关键:返回 self 以支持链式调用

    defset_age(self, new_age):
        self.age = new_age
        returnself# 关键:返回 self

bob = Person("Bob", 25)
bob.set_name("Alice").set_age(30)  # 一行代码完成两次修改

print(bob.name, bob.age)  # 输出:Alice 30

通过链式调用,我们可以让代码更简洁优雅!


14. 让列表输出更美观

假设你有一个列表,想要以更直观的方式打印出来,你可以使用 * 运算符结合 print()

foods = ["苹果", "香蕉", "橘子"]
print(*foods, sep=", ")  # 输出:苹果, 香蕉, 橘子

sep 关键字参数用于指定元素之间的分隔符,让输出格式更友好。


15. 让对象打印更可读

在 Python 里,如果直接打印一个对象,默认会返回类似 <__main__.Person object at 0x7ff6d8e1f9d0> 这样的信息,根本没法看懂。我们可以定义 __repr__ 方法,让它返回更有意义的字符串:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person(name={self.name}, age={self.age})"

bob = Person("Bob", 25)
print(bob)  # 输出:Person(name=Bob, age=25)

这样,当我们打印对象时,能清楚地看到它的内容。


16. 一行代码获取列表的首尾元素

假设你有一个列表 people = ["Bob", "Alice", "Charlie", "David"],想要获取第一个最后一个元素,你可以这样做:

first, *middle, last = people
print(first, last)  # 输出:Bob David

*middle 会捕获中间所有的元素,而 first 和 last 则分别获取开头和结尾的元素。


17. 超方便的调试技巧

调试代码时,我们经常会打印变量的值,例如:

name = "Alice"
age = 25
print(f"name={name}, age={age}")

但 Python 3.8 以后,你可以这样写:

print(f"{name=}, {age=}")

输出:

name='Alice', age=25

它会直接显示变量名和值,省去了手动输入 name=... 的麻烦,非常适合调试!


18. 数字四舍五入的新玩法

Python 提供了 round() 函数来进行四舍五入。例如:

print(round(3.14159, 2))  # 输出:3.14

但你可能不知道,它不仅可以保留小数位数,还能对整数部分进行四舍五入

print(round(12345, -2))  # 输出:12300

-2 表示保留到百位,类似于“银行家舍入法”,让数据更加易读。


19. 字符串替换的正确姿势

如果你想替换某个单词,比如:

sentence = "The quick red fox jumps over the lazy red dog."
new_sentence = sentence.replace("red", "blue")
print(new_sentence)

输出:

The quick blue fox jumps over the lazy blue dog.

但有时候,替换某个特定单词时,可能会误替换掉子字符串。正确做法是添加空格,避免误替换:

sentence = "The quick red fox jumps over the lazy red dog."
new_sentence = sentence.replace(" red ", " blue ")

20. 按自定义规则找最大/最小值

Python 内置的 max() 和 min() 支持自定义规则。例如,找出字母 a 出现最多的名字:

names = ["Timothy", "Bob", "James", "Zebra", "Amanda", "Anna", "Luigi"]
most_a_name = max(names, key=lambda x: x.lower().count("a"))
print(most_a_name)  # 输出:Amanda

还可以按字符串长度查找最短和最长的名字:

shortest_name = min(names, key=len)
longest_name = max(names, key=len)
print(shortest_name, longest_name)  # 输出:Bob Timothy

总结

今天我们分享了 20 个超实用的 Python 技巧,能让你的代码更简洁、更高效、更 Pythonic!

你最喜欢哪个技巧呢?欢迎在评论区留言分享!


文末福利
  • 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ Python实战案例,学习不再是只会理论
  • ④ Python漫画教程,手机也能学习
可以扫描下方二维码领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值