python - 将多个变量声明为同一类型
问题描述
问题:我有一个接受参数的函数n
和base
,我想确保这两个参数实际上都是整数。到目前为止,我已经完成了以下工作:
# Conditions in which the function makes sense.
assert isinstance(n, (int)), 'n must be an integer. n: {0}'.format(n)
assert isinstance(base, (int)), 'base must be an integer. base: {0}'.format(base)
assert not isinstance(n, bool)
问题:这似乎很乏味,我想以某种方式做一些类似于assert isinstance((n, base), (int, int)), 'n and base must be integers. n: {0}, base: {1}'.format(n, base)
. 但这在意外时间给了我一个 AssertionError (n
并且base
都是 int)。也许不能使用元组?有没有类似的方法有效?
编辑:我想一个理想的处理方法是列出每个应该是 t 类型的参数,如果一个或多个失败,只打印失败的那些。
为了完整起见,下面是整个代码。我不认为它会有用,但我可能弄错了。它不是任何东西的一部分,我只是在查看此处的另一个问题后使用可选参数。
def pascal(n, base=1):
"""Makes a dictionary where the keys are row-indexes in a pascal-trangle
of size n, and the values are the rows as a list. E.g. pascal(3) should
return {1 : [1], 2: [1,1], 3: [1,2,1]}.
pascal(0) should returns an empty dictionary.
Optional argument 'base=': set an integer as a new base. E.g.
pascal(3, base=2) should return {1: [2], 2: [2, 2], 3: [2, 4, 2]}"""
# Conditions in which the function makes sense.
# assert isinstance((n, base), (int, int)), 'n and base must be integers. n: {0}, base: {1}'.format(n, base)
assert isinstance(n, (int)), 'n must be an integer. n: {0}'.format(n)
assert isinstance(base, (int)), 'base must be an integer. base: {0}'.format(base)
assert not isinstance(n, bool)
if not n:
return {}
if n == 1:
return {1: [base]} # The basic case.
else:
bottom_row = list()
prev_p = pascal(n-1, base) # Only do one recursive call!
for i in range(0, n):
if i == 0:
bottom_row.append(prev_p[n-1][i])
elif i == n-1:
bottom_row.append(prev_p[n-1][i-1])
else:
bottom_row.append(prev_p[n-1][i-1]+prev_p[n-1][i])
bottom_row = {n: bottom_row}
pascal_dict = prev_p
pascal_dict.update(bottom_row)
return pascal_dict
解决方案
没有矢量化的isinstance
.
assert isinstance((n, base), (int, int))
应该
assert isinstance(n, int) and isinstance(base, int)
如果你有大量的变量......
for var in [n, base, count, blah, foo, bar]:
assert isinstance(var, int)
如果您不需要对它们进行单独维修:
assert(all(isinstance(var, int) for var in list))
推荐阅读
- amazon-web-services - API Gateway Mapping Template for context.requestTime is Blank
- java - 使用@Query注释按名字排序数据库信息不起作用,我该如何解决这个问题?
- powershell - 从属于另一个 AD 的组中删除用户
- design-patterns - 同时抽象对象和行为的模式
- reactjs - 安装 Material-ui-pickers 后编译错误“@material-ui/core”不包含名为“makeStyles”的导出
- python - 如何在熊猫中连接 DatetimeIndex 对象?
- regex - 匹配所有具有特定 src 值的 img 标签
- c - 在 3d 空间中实现 n 个最近邻的 knn
- python - 如何使用 Django 和 pdb 调试 Web 请求?
- .net - Listing and selecting installed voice (for text to speech)