当前位置: 首页 > 知识库问答 >
问题:

从函数中调用python 3中的函数

封德华
2023-03-14

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

last2('hixxhi') → 1

last2('xaxxaxaxx') → 1

last2('axxxaaxx') → 2

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

网站上对上述问题的回答如下:

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

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

last2 = str[len(str)-2:]

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

共有2个答案

侯涵煦
2023-03-14
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

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

方和宜
2023-03-14
def last2(str):
    . . .

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

但这是一个糟糕的做法。不要将变量命名为与现有内置变量相同的名称。这会导致类似的混乱情况,并导致类似的问题。

更好的名称应该是描述字符串的用途,而不仅仅是一个通用的、无意义的str

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

 类似资料:
  • 本文向大家介绍Python3 中sorted() 函数的用法,包括了Python3 中sorted() 函数的用法的使用技巧和注意事项,需要的朋友参考一下 描述 sorted() 函数对所有可迭代的对象进行排序操作。 语法 sorted(iterable, key=None, reverse=False)  iterable – 可迭代对象。 key – 主要是用来进行比较的元素,只有一个参数,具

  • 问题内容: 如何在声明中的另一个函数中调用一个函数? app.js bla.js 我正在尝试从函数内部访问函数,并且得到: TypeError:对象#没有方法’foo’ 如果我更改为仅得到: ReferenceError:未定义foo 问题答案: 更改为

  • 问题内容: 我有以下函数,可用于从我的代码中调用Lambda函数。 但是,当我尝试在Lambda函数中使用它时,出现以下错误: 如何从Lambda函数中调用Lambda函数? 我的功能: 问题答案: 使用每个Lambda中都提供的,从另一个Lambda函数中调用Lambda函数非常简单。 我建议首先从 简单的 事情开始。 这是lambda内调用的“ Hello World”: 使用包含一个参数的调

  • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 定义一个函数 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。 任何传入参数和自变量必须放在圆括号中

  • 这是我在编写java时从未考虑过的,因为我使用这个模式时没有任何问题: 这样做效果很好,因为重写的函数不依赖于任何未初始化的数据,但是它们对于每个派生的都是唯一的(因此需要抽象)。这在科特林也有效,但它仍然给出了警告。 那么在Java/Kotlin中这种做法是不是很糟糕呢?如果有,我该如何改进?是否可以在kotlin中实现而不被警告在构造函数中使用非final函数? 一个可能的解决方案是将行移动到

  • 问题内容: 是否可以从Go调用静态对象(.so)文件?我一直在搜寻Google,我不断提出我可以做到的主张 但是尝试这样做会出现错误 并搜索Godocs,但在syscall包中找不到对此功能的引用。是否可以加载库并调用其函数? 问题答案: 在POSIX平台上,您可以用来调用dlopen和朋友: