包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!
1.单行代码实现变量值交换
a = 3;
b = 4;
c = a;
a = b;
b = c;
a: str = 'I love you'
b: int = 520
print(f'Before swap: a = {
a}, b = {
b}')
a, b = b, a
print(f'After swap: a = {
a}, b = {
b}') # 多个变量同样适用
c: str = 'Every single night'
a, b, c = c, a, b
print(f'After swap: a = {
a}, b = {
b}, c = {
c}')
Output:
Before swap: a = I love you, b = 520
After swap: a = 520, b = I love you
After swap: a = Every single night, b = 520, c = I love you
2.序列反转很简单
numbers: list[int] = [1, 2, 3, 4, 5]
greeting: str = 'Hello, Jack!'
print(numbers[::-1]) # [5, 4, 3, 2, 1]
print(greeting[::-1]) # !kcaJ ,olleH
- 表示从后往前逐一遍历元素。
3.字符串乘法
target = 'lovelovelovelovelove'
target: str = 'loveloveloveloveloveyou!'
target2: str = ('love' * 5) + 'you!' # 等价于 target
print(target) # loveloveloveloveloveyou!
print(target2) # loveloveloveloveloveyou!
4.单行代码实现条件赋值
number: int = 10 result: str = None if number % 2 == 0: result = 'Even' else: result = 'Oddd'
nubmer: int = 10
result: str = 'Even' if
nubmer % 2 == 0 else 'Odd'
print(result) # Even
5.字符串连接有妙招
names: list[str] = ['John', 'Doe', 'Jack', 'Bob', 'Smith']
result: str = ''
for name in names:
result = result + name + ', '
print(result)
# 可以使用任何指定分隔符
print(f'Names: {
", ".join(names)}')
print(f'Names: {
"---".join(names)}')
Output:
Names: John, Doe, Jack, Bob, Smith
Names: John---Doe---Jack---Bob---Smith
6.使用 get 方法获取字典元素不报错
-
获取字典元素的常规方法是通过中括号加键值的方式,但是如果访问的键值不存在时,则会报KeyError错误,中止代码运行。
-
而如果改用字典的get方法的话,则可以完全避免这个问题,并且对于不存在的键值,还可以设置个性化返回默认值。
info: dict[str, str] = {
'Name': 'John', 'Age': 25}
# print(info['job'])
# 报 KeyError 错误
print(info.get('job')) # 返回 None
print(info.get('job', -1)) # 返回指定的默认值 -1
7.使用 setdefault 方法给字典设置默认值
-
上一个技巧中,我们讲到了用get方法获取字典元素不会报错,但不会对字典本身做任何修改。这里,我们要说的setdefault方法也可以根据键值获取字典元素,但是如果键值不存在,它会向字典中添加一个条目。
scores: dict[str, int] = {
'Jack': 100, 'Smith': 50}
jacks_score: int = scores.setdefault('Jack', 102)
print(jacks_score)
james_score: int = scores.setdefault('James', 0)
print(james_score)
print(scores) # 现在 scores 会多出一个条目,即 'James': 0
Output:
100
0
{
'Jack': 100, 'Smith': 50, 'James': 0}
提问:你知道为什么最后输出的字典会多出一个新的条目(‘James’: 0)吗?
8.简单便捷的元素计数器
from collections
import Counter
letters: list[str] = ['a', 'b', 'c', 'a', 'a', 'c', 'c', 'd']
counter: Counter = Counter(letters)
print(counter.total()) # Output: 8
print(counter.most_common()) # Output: 每个元素出现次数构成的列表
print(counter.most_common(n=3)) # Output: 出现频次最高的前3个元素
Output:
8
[('a', 3), ('c', 3), ('b', 1), ('d', 1)]
[('a', 3), ('c', 3), ('b', 1)]
9.便捷高效的 Enumerate
names: list[str] = ['John', 'Doe', 'Jack', 'Bob']
for idx, name in enumerate(names):
print(f'{
idx}: {
name}')
Output:
0: John
1: Doe
2: Jack
3: Bob
for idx, name in enumerate(names, start=1):
print(f'{
idx}: {
name}')
Output:
1: John
2: Doe
3: Jack
4: Bob
10.字典合并很简单
a: dict[str, int] = {
'a': 1, 'b': 2}
b: dict[str, int] = {
'c': 3, 'd': 4}
c: dict[str, int] = {
**a, **b} # 使用双 * 号解包字典并合并
d: dict[str, int] = a | b # 使用竖线(|)符号合并字典 a |= b
# 直接就地执行合并操作,等价于 a = a | b
print(a)
print(c)
print(d)
Output:
{
'a': 1, 'b': 2, 'c': 3, 'd': 4}
{
'a': 1, 'b': 2, 'c': 3, 'd': 4}
{
'a': 1, 'b': 2, 'c': 3, 'd': 4}
11.千分位标识符——让你输入长串数字时不再眼花缭乱
big_number: int = 10000000000000000
# 让你数有多少个0你是什么感觉?
print(big_number)
big_number2: int = 10_000_000_000_000_000
# 解释器会忽略下划线
print(big_number2)
Output:
10000000000000000
10000000000000000
print(f'{
big_number:,}') # 解释器会自动加上千分位标识符
Output:
10,000,000,000,000,000
12.__call__ 特殊方法——让类的实例直接可调用
class Multiplier:
def __init__(self, value: int) -> None:
self.value = value
def __call__(self, other_value: int) -> int:
return self.value * other_value
double: Multiplier = Multiplier(2)
print(double(10)) # Output: 20
print(double(5)) # Output: 10
13.创建你自己的方法链技术
love: str = 'I love you'
result: str = love.replace('love', '❤').replace('you', 'u').upper()
print(result) # I ❤ U
from typing
import Self
class Person:
def __init__(self, name: str, age: int) -> None:
self.name = name
self.age = age
def modify_name(self, new_name: str) -> Self:
self.name = new_name
return self
def modify_age(self, new_age: int) -> Self:
self.age = new_age
return self
jack: Person = Person(name='Jack', age=29)
print(f'{
jack.name}: {
jack.age}') # Output: Jack: 29
jack.modify_name('Stefan').modify_age(17) # modify_name返回实例本身,因此可以接着调用类的其他方法 print(f'{jack.name}: {jack.age}') # Output: Stefan: 17
14.让你的控制台输出更友好可读
foods: list[str] = ['Apples', 'Oranges', 'Bananas'] # 可指定任意分隔符
print(*foods, sep=', ', end='.\n')
print(*foods, sep=' -- ', end='.\n')
Output:
Apples, Oranges, Bananas.
Apples -- Oranges -- Bananas.
15.__repr__ 特殊方法——让类实例具象化
class Person:
def __init__(self, name: str, age: int) -> None:
self.name = name
self.age = age
jack: Person = Person(name='Jack', age=29)
print(jack) # Output: <__main__.Person object at 0x0000019454570A10>
class Person:
def __init__(self, name: str, age: int) -> None:
self.name = name
self.age = age
def __repr__(self) -> str:
return f'Person(name="{
self.name}", age={
self.age})'
jack: Person = Person(name='Jack', age=29)
print(jack) # Output:Person(name="Jack", age=29)
16.更优雅的获取序列首尾元素
first = target_sequence[0]
last = target_sequence[-1]
people: list[str] = ['John', 'Doe', 'James', 'Bob', 'Smith', 'Stefan']
first_person, *_, last_person = people
print(first_person, last_person) # Output: John Stefan
print(_) # 你猜这会输出什么?
17.简洁高效的控制台输出方式——你的调试好帮手
name: str = 'Jack'
age: int = 29
print(f'{
name=}') # 等价于 print(f'name={name}'),下同
print(f'{
age=}')
print(f'{
5+10=}')
Output:
name='Jack'
age=29
5+10=15
18.round——四舍五入还可以这么用
number: float = 1314521.56789
print(round(number, 2)) # 这种用法 我们的熟悉,保留小数点后2位
print(round(number, -1))
print(round(number, -3))
19.字符串替换
sentence: str = 'The tired red fox on the red farm ate a bored red pig.'
print(sentence.replace('red', 'XXX'))
print(sentence.replace(' red', ' blue'))
Output:
The tiXXX XXX fox on the XXX farm ate a boXXX XXX pig.
The tired blue fox on the blue farm ate a bored blue pig.
print(sentence.replace('red', ' blue'))
20.自定义获取元素最大最小值的方式
names:
list[str] = ['John', 'Doe', 'Jack', 'Bob', 'Smith','Timothy', 'Amanda', 'Zebra'] # 默认按字母顺序排序
print('Max: ', max(names)) # Output: Max: Zebra
print('Min: ', min(names)) # Output: Min: Amanda
for name in names:
print(name, len(name), sep=': ')
print('Max: ', max(names, key=len))
print('Min: ', min(names, key=len))
John: 4
Doe: 3
Jack: 4
Bob: 3
Smith: 5
Timothy: 7
Amanda: 6
Zebra: 5
Max: Timothy
Min: Doe
提问:如果你仔细观察的话,
Doe
和Bob
的长度都为3,为什么最小值是Doe
?你知道原因吗?
for name in names:
print(name, name.count('a'), sep=': ')
print('Max: ', max(names, key=lambda x: x.count('a')))
print('Min: ', min(names, key=lambda x: x.count('a')))
Output:
John: 0
Doe: 0
Jack: 1
Bob: 0
Smith: 0
Timothy: 0
Amanda: 2
Zebra: 1
Max: Amanda
Min: John
提问:类似的问题,有好几个名字中都不含字母‘a’,为什么最小值却是
John
?你知道原因吗?
练习:如果长度相同或字母‘a’的数量相同时,我想根据字母顺序排序,该如何实现呢?有兴趣的朋友可以去实践一下,留言给大家分享。
好啦,今天关于Python每天常用的20个技巧就分享到这,感谢你的阅读!
总结
- 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!
文末福利
- 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
- ① Python所有方向的学习路线图,清楚各个方向要学什么东西
- ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
- ③ 100多个Python实战案例,学习不再是只会理论
- ④ 华为出品独家Python漫画教程,手机也能学习