<p>我先澄清一下你的疑虑。你知道吗</p>
<p>首先,如何在另一个函数中使用函数的值:</p>
<ol>
<li><p>这里不需要将一个方法的<strong>引用传递给另一个方法。我的意思是,在<code>amountOfHashes(count_range_in_list,ctr)</code>中,你可以把<code>count_range_in_list</code>作为一个参数,然后像<code>amountOfHashes(ctr)</code>那样定义它。或者更好的方法是,在方法名中使用snake case而不是camel case,这样就得到了<code>amount_of_hashes(ctr)</code>。即使<strong>如果必须在<code>amount_of_hashes</code>内执行<code>count_range_in_list</code>,Python也非常聪明,可以让您在不必传递函数引用的情况下执行,因为两个方法已经在同一个文件内。</p></li>
<li><p>为什么你只需要<code>ctr</code>?好吧,<code>count_range_in_list</code>已经返回了一个计数器,所以这就是我们所需要的。一个名为<code>ctr</code>的参数。为此,要“在新函数中使用函数的结果”,我们可以:</p></li>
</ol>
<pre class="lang-py prettyprint-override"><code>def amount_of_hashes(ctr):
...
# now, passing the value of count_range_in_list in amount_of_hashes
amount_of_hashes(count_range_in_list(data, 10, 20))
</code></pre>
<p>你已经很好地理解了步骤1),所以我们可以马上进入步骤2)。你知道吗</p>
<p>在Python中,最好动态地考虑迭代过程,而不是以硬编码的方式。也就是说,可以通过这种方式避免创建方法来检查相同的条件,但它们之间的差别很小,例如<code>amountOfHashes</code>中的方法:</p>
<pre class="lang-py prettyprint-override"><code># Method name changed for preference. Use the name that best fits you
def counter_hashes(ctr):
# A '#' for each item in a range with the length of our counter
if ctr == 0:
return 'N/A'
return ''.join(['#' for each in range(ctr)])
</code></pre>
<p>但正如罗兰·史密斯所指出的,你可以把一个字符串乘以一个数字——这正是你所想的:把字符串重复多次。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>>>> 3*'#'
###
</code></pre>
<p>所以你甚至不需要我上面的<code>counter_hashes</code>,你只要<code>ctr*'#'</code>就可以了。但是为了一致性,我将用这个新发现来改变<code>counter_hashes</code>:</p>
<pre class="lang-py prettyprint-override"><code>def counter_hashes(ctr):
# will still return 'N/A' when ctr = 0
return ctr*'#' or 'N/A'
</code></pre>
<p>出于组织目的,由于您有特定的需要(打印哈希值<strong>和</strong>哈希计数),因此您可能希望正确格式化<code>print</code>中的内容,您可以为打印创建一个特定的方法,该方法同时调用<code>counter_hashes</code>和<code>count_Range_in_list</code>,并在之后为您提供更清晰的结果:</p>
<pre class="lang-py prettyprint-override"><code>def hash_range(data, min, max):
ctr = count_range_in_list(data, min, max)
hashes = counter_hashes(ctr)
print(f'{hashes} | {ctr} items in range')
</code></pre>
<p>其使用和输出将变成:</p>
<pre class="lang-py prettyprint-override"><code>>>> data = [90,30,13,67,85,87,50,45,51,72,64,69,59,17,22,23,44,25,16,67,85,87,50,45,51]
>>> hash_range(data, 0, 10)
N/A | 0 items in range
>>> hash_range(data, 10, 20)
### | 3 items in range
>>> hash_range(data, 20, 30)
#### | 4 items in range
</code></pre>
<p>等等。如果您只想立即打印内容,而不使用上面的<code>hash_range</code>方法,那么如果您想要一行,那么它会更简单,但会更冗长/重复:</p>
<pre class="lang-py prettyprint-override"><code>>>> ctr = count_range_in_list(data, 10, 20)
>>> print(counter_hashes(ctr), ctr)
### 3
</code></pre>