type(1,)
Out[1]: int
a=1,
a
Out[3]: (1,)
type(a)
Out[4]: tuple
我正在使用Python 3.6,并且我期望type(1,)返回一个元组。
根据this link:
...一个带有一个项目的元组是通过在值后面加上逗号来构造的。
我想念什么?
答案 0 :(得分:9)
问题在于python如何解释函数自变量,同时允许“生活质量”后缀逗号。使用带有逗号分隔参数的括号来调用函数。当您传递type(1,)
时,逗号分隔的参数(带有逗号)和实际的元组之间存在歧义。
一个简单的例子:
def test(x):
print(x)
test("hello") #Output: hello
test("hello",) #is also valid, Output: hello
要查看python实际如何接受参数,可以使用repr
函数。
repr(1)
'1'
repr(1,)
'1'
要特别确保将元组作为第一个参数传递,应将其包装在括号中并解决歧义。
repr((1,))
'(1,)'
type((1,))
tuple
赋值后工作的原因是因为在将值存储为元组时解决了歧义。
a = 1,
repr(a)
'(1,)'
其他信息
关于尾随逗号可能有用的情况,我们可以参考相关的PEP8部分。
如果结尾的逗号多余,则当 当使用值,参数或 预计进口项目会随着时间的推移而延长。模式是 将每个值(等)单独放在一行上,始终添加结尾 逗号,然后在下一行添加右括号/括号/括号。
这意味着,永远不要将多余的尾部逗号放在一行中。
#No good
func_with_future_changes_or_variable_args(arg1, arg2=True,)
#Good
func_with_future_changes_or_variable_args(arg1,
arg2=True,
)
我个人不会遇到很多会更改功能的问题,但是当维护列表或字典会随着时间变化时,逗号会节省生命。例如:
FILES = [
'setup.cfg',
'tox.ini',
]
从这样的列表中添加或删除值,仅需要像下面这样单独更改一行,就可以非常轻松地跟踪版本控制提交。
FILES = [
'setup.cfg',
'tox.ini',
+ 'new_item.txt',
]
答案 1 :(得分:0)
从文档中
可以通过多种方式构造音色组:
- 使用一对圆括号表示空元组:()
- 为单例元组使用尾部逗号:a或(a,)
- 用逗号分隔项目:a,b,c或(a,b,c)
- 使用内置的tuple():tuple()或tuple(可迭代)
因此,以下所有都是元组。您将注意到对变量的显式分配消除了所有歧义:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" ></script>
<div class="navbar navbar-dark bg-dark fixed-top navbar-expand-md">
<div class="container">
<a class="navbar-brand" href="#">Brand</a>
<button type="button" class="navbar-toggler" data-toggle="collapse" data-target=".navbar-collapse">☰</button>
<div class="collapse navbar-collapse float-right">
<ul class="nav navbar-nav">
<li class="active nav-item"><a href="#" class="nav-link">Home</a>
</li>
<li class="nav-item"><a href="#about" class="nav-link">About</a>
</li>
<li class="nav-item"><a href="#contact" class="nav-link">Contact</a>
</li>
</ul>
</div>
</div>
</div>
当我们查看In [8]: a = ()
In [9]: type(a)
Out[9]: tuple
In [10]: b = (1,)
In [11]: type(b)
Out[11]: tuple
In [12]: b = 1,
In [13]: type(b)
Out[13]: tuple
时,应该记住type(1,)
是一个函数,而逗号后面是参数分隔符。 type()
是第一个参数,它是一个整数,由于Python中允许使用逗号作为后缀,因此这是一个有效的语句,但显式的少得多。根据{{3}},建议使用内置的isinstance函数进行类型检查,该函数更明确:
1