首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从函数内部调用python 3中的函数

从函数内部调用python 3中的函数
EN

Stack Overflow用户
提问于 2019-12-23 00:22:31
回答 2查看 41关注 0票数 0

给定一个字符串,返回子字符串长度2在字符串中出现的次数,并且作为字符串的最后2个字符,因此"hixxxhi“返回1(我们不计算结束的子字符串)。

代码语言:javascript
复制
last2('hixxhi') → 1

last2('xaxxaxaxx') → 1

last2('axxxaaxx') → 2

我在其中一个网站(https://codingbat.com/prob/p145834)上发现了这个问题。

现就上述问题在网站上的答案如下:

代码语言:javascript
复制
def last2(str):
  # Screen out too-short string case.
  if len(str) < 2:
    return 0

  # last 2 chars, can be written as str[-2:]
  last2 = str[len(str)-2:]
  count = 0

  # Check each substring length 2 starting at i
  for i in range(len(str)-2):
    sub = str[i:i+2]
    if sub == last2:
      count = count + 1

  return count

我对下面提到的代码行有疑问。

代码语言:javascript
复制
last2 = str[len(str)-2:]

现在,我知道这段代码正在提取字符串'str‘的最后两个字母。让我感到困惑的是变量名。正如您所看到的,变量名称与函数的名称相同。那么这行代码是否再次调用函数并更新变量'str‘的值??

EN

回答 2

Stack Overflow用户

发布于 2019-12-23 00:27:27

代码语言:javascript
复制
def last2(str):
    . . .

这将创建一个名为str的参数,该参数隐藏了内置的str*。在此函数中,str引用的是str参数,而不是str内置类。

不过,这是一种糟糕的做法。不要将变量命名为与现有内置相同的名称。这导致了像这样的混乱情况,并导致了像this这样的问题。

更好的名称应该是描述字符串用途的名称,而不仅仅是泛型的、没有意义的str

*内置的str实际上是一个类,而不是一个普通的函数。str(x)是对str类的构造函数的调用。

票数 0
EN

Stack Overflow用户

发布于 2020-10-26 09:31:40

代码语言:javascript
复制
def last2(str):
  if len(str) == 0:
    return 0
  last_two = str[-2::]
  
  count = 0
  for i in range(len(str)):
    if last_two == str[i :i + 2]:
      count += 1
    
  return count-1

这是第一次对我来说正确的答案。官方的答案更好,但这个答案可能不会让你感到困惑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59445968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档