python-半省略号、三个点、点点点、...符号的用法小结

python-半省略号、三个点、点点点、...符号的用法小结,第1张

一、...符号(省略号)和Ellipsis对象

在Python中,一切皆对象。

【...】符号,在python中其实也有相应的对象——Ellipsis。

如下面的代码所示:【...】和Ellipsis的地址是相同的,打印【...】显示的结果是Ellipsis,打印【...】的类型显示ellipsis,说明两者是同一个主体。

print(...)

print(bool(...))

print(id(Ellipsis))

print(id(...))

print(type(...))

# Ellipsis
# True
# 140736120145904
# 140736120145904
# 

但是,请注意,python2并没有这个对象的存在,这个特性是在3.x加入的。 

二、在缩进代码块中用于占位(eq to 'pass')

哪些地方会用到缩进代码块?1.定义函数(def)、2.异常处理(try except)、3.循环/遍历语句(while和for)、4.上下文管理器(with),等等。

2.1 函数代码块

当我想自定义一个函数,但是还没想好其中执行哪些代码,可以用pass或...占位。

如下图所示,定义函数时如果没有任何代码加入,运行时就会报错【SyntaxError: unexpected EOF while parsing】。

而加上pass或...符号后,再运行就是正常的;如下面代码所示,函数已经被正确定义和分配地址。

def func1():
    pass

def func2():
    ...

print(func1)
print(func2)

# 
# 

2.2 循环/遍历代码块

比如for遍历代码块

 

2.3 异常处理代码块 

 2.4 上下文管理代码块

三、函数定义时作为默认参数
def func1(a:int=...):
    print(a)


func1('This is a beautiful object.')  # This is a beautiful object.
func1(23)  # 68
func1()  # Ellipsis
func1(...)  # Ellipsis

四、函数传参/实例化类时作为默认参数传入

之所以会写出这篇文章,是因为在tensorflow官网看到这样一串代码:Model(...),这里为啥传入省略号参数?

model = tf.keras.Model(...)
checkpoint = tf.train.Checkpoint(model)

# Save a checkpoint to /tmp/training_checkpoints-{save_counter}. Every time
# checkpoint.save is called, the save counter is increased.
save_path = checkpoint.save('/tmp/training_checkpoints')

# Restore the checkpointed values to the `model` object.
checkpoint.restore(save_path)

我自己实验了一下。

实验目的是想看看“把【...】作为参数传入函数会发生什么”,解决发现和普通的参数没有任何区别。当存在多个位置参数时,并不能用一个省略号来同时赋值给所有位置参数。

接着又来一个实验。这次是直接把参数传入Model()这个类,试试有什么效果。

在实例化的时候,不传参数和传入【...】都不会出错;但是在summary()的时候,却出错了。

 

五、数组的索引省略符

作用用一句话总结就是“省略在相应位置所有的冒号”。

如果把三点省略号放在最前面,表示省略前面所有的维度;放在最后面表示省略后面所有的维度;放在中间表示省略中间的维度。

我们可以通过人工添加一些索引和合理地放置半省略号,来改变冒号索引的维度。

>>> d
array([[[ 0,  1,  2],
        [ 2,  3,  4],
        [ 4,  5,  6]],
 
       [[ 8,  9, 10],
        [10, 11, 12],
        [12, 13, 14]],
 
       [[16, 17, 18],
        [18, 19, 20],
        [20, 21, 22]]])
>>> d[1,...]
array([[ 8,  9, 10],
       [10, 11, 12],
       [12, 13, 14]])
>>> d[...,1]
array([[ 1,  3,  5],
       [ 9, 11, 13],
       [17, 19, 21]])
>>> d[1,...,1]
array([ 9, 11, 13])
 
参考:https://zhuanlan.zhihu.com/p/264896206

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/733553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存