说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
大家可能一直认为 Python 中的圆括号 ()
代码元组数据类型,其实这是不对的,圆括号在 Python 中是一种形式表达式,它可以容纳其他表达式,还可以来构建生成器。
带圆括号的表达式:
元组的展示形式总是以圆括号包裹,比如和字面值配合,我们可以定义一个元组显示:
(1, 'b', 3.0)
一个空内容的圆括号可以定义一个空的元组:
a = ()
type(a)
# tuple
但是,请注意元组并不是由圆括号构建,实际起作用的是逗号操作符,以上空元组只是一个例外,是为了让人们方便定义一个空元组。
a = (1, 'b', 3.0)
b = 1, 'b', 3.0 # 用逗号隔开
type(a), type(b) # 注意,这儿整体也是一个元组
# (tuple, tuple)
a == b
# True
要理解元组是逗号构建的,可以看看这个例子,我们怎么用圆括号创建一个元素的元组:
a = (3)
a
# 3
type(a) # 没有创建成功,竟然是整型
# int
b = (3,)
b
# (3,)
type(b) # 创建成功
# tuple
c = 3,
c
# (3,)
不知道这下是否有明白?
可以将表达式放入圆括号,让代码更加紧凑、清晰,也可以将单行的表达式换行格式化:
(1+1)
# 2
(1 > 3)
# False
a, b = 1, (1,2,3)
(a in b)
# True
(c := 10, d := 20)
c,d
# (10, 20)
if (a in b) or (c>d):
print(1)
# 1
(1 if a==1 else 0)
# 1
(
1
if a==1
else
0
)
# 匿名函数表达式
(lambda x, y: x+y)(1, 2)
# 3
有时候需要写大段的字符串,可以用圆括号将这们分行:
# 这是一个断言语句
assert 1 + 1 == 3, (
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
"Donec id magna id lectus gravida finibus. In gravida, "
"mauris condimentum rhoncus sagittis, mi nisl lacinia "
"tortor, non interdum nisl diam et lectus. Sed vitae "
"ante vestibulum, volutpat neque non, vehicula erat. "
"Nullam aliquam risus orci, blandit varius metus pulvinar id."
)
有时候,在写比较长的代码时,可以用圆括号让代码排列更加整齐:
import pandas as pd
(
# 生成100年时间序列
pd.Series(pd.date_range('1920', '2021'))
# 筛选 12月25日 的所有日期
.loc[lambda s: (s.dt.month==12) & (s.dt.day==25)]
.dt.day_of_week # 转为星期数
.add(1) # 由于0代表周一,对序列加1,符合日常认知
.value_counts() # 重复值计数
.sort_values() # 排序,星期从1-7
.plot
.bar() # 绘制柱状图
)
以上是 pandas 常用的链式方法的写法。
以下不是圆括号表达式的内容,但也需要注意分辨。
有:
func()
、func(a=3, 4)
with (A() as a,B() as b,)...
,详见 with as 上下文管理器。以下是生成器表达式的示例:
i = (i for i in range(3))
i
# <generator object <genexpr> at 0x7ff1bea5c580>
type(i)
# generator
next(i) # 0
next(i) # 1
# ...
更新时间:May 24, 2024, 3:23 p.m. 标签:python 圆括号 括号