如何在所有函数中使用相同的代码行?

Joh*_*ght 19 python

我是Python的新手.我想知道所有函数是否可能继承相同的代码行?

with open(filename, 'r') as f:因为这行代码在所有三个函数中都是相同的.是否可以在不使用类的情况下继承代码?

我试图在stackoverflow和python文档上找到答案,但没有运气.

def word_count(filename):
    with open(filename, 'r') as f:
        return len(f.read().split())


def line_count(filename):
    with open(filename, 'r') as f:
        return len(f.read().splitlines())


def character_count(filename):
    with open(filename, 'r') as f:
        return len(f.read())
Run Code Online (Sandbox Code Playgroud)

fja*_*rri 45

您的常见代码是

with open(filename, 'r') as f:
    contents = f.read()
Run Code Online (Sandbox Code Playgroud)

所以只需将其移动到自己的功能:

def get_file_contents(filename):
    with open(filename, 'r') as f:
        return f.read()

def word_count(filename):
    return len(get_file_contents(filename).split())

def line_count(filename):        
    return len(get_file_contents(filename).splitlines())

def character_count(filename):
    return len(get_file_contents(filename))
Run Code Online (Sandbox Code Playgroud)

  • @PeterWoord函数的名称应该描述它的作用.我认为"内容"不能充分满足这一要求. (31认同)
  • @PeterWood为什么? (9认同)
  • 我将函数`contents`命名为`get_file_contents`. (5认同)
  • @jsn使用它读得更好,例如`len(contents(filename))` (2认同)

AJe*_*iss 15

我在过去所做的就是将代码拆分为另一个函数,在您的示例中

with open(filename, 'r') as f:
         f.read()
Run Code Online (Sandbox Code Playgroud)

在你的所有方法中都很常见,所以我会考虑重写它.

def read_file(filename):
    with open(filename, 'r') as f:
         return f.read()

def word_count(filename):
    return len(read_file(filename).split())

def line_count(filename):
    return len(read_file(filename).splitlines())

def character_count(filename):
    return len(read_file(filename))
Run Code Online (Sandbox Code Playgroud)


rol*_*ika 6

我会用一个类:

class Count:
    """ Object holds everything count-related """
    def __init__(self, filename):
        """ specify filename in class instance """
        with open(filename, 'r') as f:
            self.content = f.read()

    def word_count(self):
        return len(self.content.split())

    def line_count(self):
        return len(self.content.splitlines())

    def character_count(self):
        return len(self.content)

file = Count("whatever.txt")
print(file.word_count())
print(file.line_count())
print(file.character_count())
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这也是一种不会为每个操作重新读取文件的解决方案. (3认同)