构造函数类括号内的隐式生成器?

时间:2017-02-21 12:54:45

标签: python

a = (x for x in range(5))
print(type(a))  # prints "<class 'generator'>"

但是这会引发SyntaxError(如预期的那样):

a = x for x in range(5)

如果我想用生成器中的值定义元组,这两个都可以工作:

tup1 = tuple(x for x in range(5))
tup2 = tuple((x for x in range(5)))

tup1中,括号是tuple类的构造函数的一部分。但为什么会有效?

1 个答案:

答案 0 :(得分:1)

在你的例子中:

  • 第一个<html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <style> p {color:#000;} </style> <script> $(document).ready(function(){ $("#f-hdr").click(function(){ $("#hidden").toggle(1000); }); }); </script> </head> <body> <a href="#anch">Link to anchor within hidden div</a> <h2><a id="f-hdr" href="javascript:void(0)">Div Header</a></h2> <div id="hidden" style="display:none"> <p id="anch">some text</p> </div> </body> </html>是生成器
  • 第二个<AnimatedCircularProgress size={200} width={3} fill={this.state.fill} tintColor="#00e0ff" backgroundColor="#3d5875"> { (fill) => ( <Text style={styles.points}> { this.state.fill } </Text> ) } </AnimatedCircularProgress> 无效
  • 第三个a1 = (x for x in range(5))
  • 和第四个a2 = x for x in range(5)将生成器转换为元组。与写tup1 = tuple(x for x in range(5))相比。

第三种方法是首选,因为如果你想得到一个元组,它会更清晰,噪音更小。第一种方法只是一个生成器,如果你实际上并不需要实例本身,那将是首选的,例如想要循环它。