python中的奇技淫巧

写代码,优雅性必不可少,能用一行代码解决的是绝不用两行,这里就介绍一些python代码中的奇技淫巧。

  1. 两个变量互换值
>>> a = 1
>>> b = 2
>>> a, b = b, a
>>> a
2
>>> b
1
>>> 
  1. 连续赋值
>>> a = b = c = 60
>>> a
60
>>> c
60
>>> 
  1. 自动解包
>>> a,b,c = [2, 4, 6]
>>> a
2
>>> b
4
>>> c
6

  1. 链式比较
a = 15
if (10 < a < 20):
    print(a)

等价于

a = 15
if (a > 10 and a<20):
    print(a)
  1. 三目运算
href = "wwww.baicu.com"
href = href if "http" in href else "http://"+href
print(href)

等价于

href = "wwww.baicu.com"
if "http" in href:
    href = href
else:
    href = "http://"+href
print(href)
  1. 字典合并
>>> a = {'a': 1}
>>> b = {'b':2}
>>> {**a, **b}
{'a': 1, 'b': 2}
>>> 
  1. 列表转字符串
>>> s = ['I', 'love', 'java']
>>> ' '.join(s)
'I love java'
>>> 
  1. 字典推导式
>>> m = {x:x**2 for x in range(0,5)}
>>> m
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
>>> 
  1. 默认字典值
    给字典中的value设置为列表,普通方法
d = dict()
if 'a' not in d:
    d['a'] = []
d['a'].append(1)
print(d)

使用defaultdict默认字典构建一个初始值为空列表的字典

from collections import defaultdict
d = defaultdict(list)
d['a'].append(1)
print(d)
  1. 赋值表达式
    这是3.8的新特性,赋值表达式又成为海象运算符:=, 可以将变量赋值和表达式放在一行,什么意思?看代码就明白
import re
data = "hello031415world"
match = re.search("(\d+)", data)  # 3
if match:                         # 4
    num = match.group(1)
else:
    num = None
print(num)

等价于

import re
data = "hello031415world"
if match:=re.search("(\d+)", data):
    num = match.group(1)
else:
    num = None
print(num)
  1. 列表推导式
>>> list = [x*2 for x in range(10)]
>>> list
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> 
  1. 生成器表达式
>>> ge = (x*2 for x in range(10))
>>> ge
<generator object <genexpr> at 0x03B43830>
>>> next(ge)
0
>>> next(ge)
2
>>> next(ge)
4
>>> next(ge)
6
>>> next(ge)
8
>>> next(ge)
10
>>> next(ge)
12
>>> next(ge)
14
>>> next(ge)
16
>>> next(ge)
18
>>> next(ge)
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
StopIteration
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heromps

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值