我敢保证,90%以上的Python程序员没用过这个语法

Python中,有一个语法你可能之前都没见过,或者见过但不知道什么意思,他就是...(省略号的三个点),在这里先给大家看几个例子:

  1. 下面代码中函数中的...代表什么意思?

    def hello():
        ...
    
  2. 下面代码中类型定义中的...代表什么意思?

    Tuple[int,...]
    
  3. 下面代码中下标取值中的...代表什么意思?

    n = np.arange(8).reshape(2, 2, 2)
    n[1,...,1]
    

注意:以上代码都是正确的,没有任何语法错误。 那你知道...在每个例子中分别代表什么意思吗,如果不知道,可以接着往下看啦。

...介绍:

实际上,...Python中的一个内置常量,他有一个正式的名字叫做——Ellipsis,翻译成中文的意思就是“省略号”。

这个常量是Python六大内置常量之一(其余几个常量是NoneFalseTrueNotImplemented__debug__),他的数据类型是ellipsis。就相当于False这个常量的数据类型是bool一样。

下面我们再在python中做了以下尝试,能帮助你更好的理解...: image

用途介绍

1. 函数中的...

我们的第一个例子,在函数中写上...

def hello():
    ...

是什么意思呢?其实在函数中写...没有任何特殊意义,就是当做一个常量被放到函数中是一样的,你可以把...替换为None,作用是一样的。但是...因为是省略号的意思,所以一般我们看到函数中...的时候,会自然而然想到这是一个还没有写完的函数,所以在理解起来会把他等同于pass。总结一下:

  • 真实的意思就是一个常量被放到函数中。
  • 语义上的理解就是一个还没写完的函数,等同于pass

2. Type Hint中的...

Python3.5后,引入了Type Hint语法,也就是类型提示,在定义函数参数,函数返回值的时候加上类型提示,方便在调用的时候不会报错。比如:

def hello(word: str) -> str:
    return "hello %s"%word

以上参数和返回值就都指定了要返回字符串类型。

再来看一个小需求。 比如我们现在有一个函数的参数是Tuple类型,然后这个Tuple中的元素必须为(int,str)类型,那么可以写成一下:

def fun(mytuple: Tuple[int,str]):
    for x in mytuple:
        print(x)

再来看一个和...有关的小需求,假设我们的函数参数还是Tuple类型,但是元组中的元素必须都为int类型,并且元组中个数是不固定的,那么可以使用以下代码来实现:

def fun(mytuple: Tuple[int,...]):
    for x in mytuple:
        print(x)

3. 切片操作:

假设现在我们有一个有一个np.array数组对象,然后是一个(2,2)的数组,这时候可以通过...来代表所有的(有点类似于:)进行切片。代码如下:

n = np.arange(4).reshape(2, 2)
n[1,...]

以上的n对象是:

array([[0, 1],
       [2, 3]])

然后我们用[1,...]来进行切片后,得到的是:

array([2, 3])

所以此时...可以等价为:

4. 表示无限循环:

加入我们现在有一个列表a=[1,2,3],然后我们执行代码a.append(a),那么再来打印a的时候,a的值为:

a = [1,2,3]
a.append(a)
print(a)
>> [1, 2, 3, [...]]

因为a中又添加了自己a,所以是一个无限循环了。此时用...来表示,再合适不过了。

以上就是...的用法,觉得有用的点个关注呗。你还发现有哪些很少用,但必须要掌握的小技巧,欢迎在评论区留言哦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

资深Python开发工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值