我是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)
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)
我会用一个类:
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)