* 在 python 中对 range() 做了什么?
What does * do with range() in python?
我正在做一个 Hackerrank python 问题,任务是打印 123...N
(其中 N
是输入)
不使用任何字符串函数。
有人评论了一个解决方案是:
print(*range(1, int(input())+1), sep='')
我的问题是:
- 这个 range() 函数这里的 * 有什么用?
- 为什么我们不能仅在打印中使用 range() 函数来做到这一点?
- 还有其他方法吗?
*
"unpacks" 一个可迭代的,这样每个元素都作为一个单独的参数传递,而不是将可迭代对象作为单个参数接收的函数:
>>> print(range(1,3))
range(1, 3)
>>> print(*range(1,3))
1 2
>>> print(1,2)
1 2
range 会给你一个可迭代的,一个现成的对象,当使用它时会给你单独的值。尝试在没有 * 的情况下打印它,它将调用对象 __str__() 魔术方法并打印 range(start, end).
在调用函数时加星号将从可迭代对象中提取所有值并将它们作为 "comma separated" 参数传递给函数。这就是所谓的拆包。
你正在执行这个,本质上,
n = int(input())
print(*range(1, n + 1), sep='')
1.) star *args
syntax 允许您从可迭代对象中填充参数。例如,这些都是等价的:
def foo(a, b):
return a + b
foo(1, 2)
lst = [1, 2]
foo(*lst)
tup = (1, 2)
foo(*tup)
2.) 当然你可以只使用 range
而无需解压 *args
。请参阅下一项。
3.) 另一种方法是 print
在 for
循环中,或者更紧凑地创建字符串 s
:
s = "".join(map(str, range(1, n + 1)))
print(s)
我正在做一个 Hackerrank python 问题,任务是打印 123...N
(其中 N
是输入)
不使用任何字符串函数。
有人评论了一个解决方案是:
print(*range(1, int(input())+1), sep='')
我的问题是:
- 这个 range() 函数这里的 * 有什么用?
- 为什么我们不能仅在打印中使用 range() 函数来做到这一点?
- 还有其他方法吗?
*
"unpacks" 一个可迭代的,这样每个元素都作为一个单独的参数传递,而不是将可迭代对象作为单个参数接收的函数:
>>> print(range(1,3))
range(1, 3)
>>> print(*range(1,3))
1 2
>>> print(1,2)
1 2
range 会给你一个可迭代的,一个现成的对象,当使用它时会给你单独的值。尝试在没有 * 的情况下打印它,它将调用对象 __str__() 魔术方法并打印 range(start, end).
在调用函数时加星号将从可迭代对象中提取所有值并将它们作为 "comma separated" 参数传递给函数。这就是所谓的拆包。
你正在执行这个,本质上,
n = int(input())
print(*range(1, n + 1), sep='')
1.) star *args
syntax 允许您从可迭代对象中填充参数。例如,这些都是等价的:
def foo(a, b):
return a + b
foo(1, 2)
lst = [1, 2]
foo(*lst)
tup = (1, 2)
foo(*tup)
2.) 当然你可以只使用 range
而无需解压 *args
。请参阅下一项。
3.) 另一种方法是 print
在 for
循环中,或者更紧凑地创建字符串 s
:
s = "".join(map(str, range(1, n + 1)))
print(s)