Python 带变量的嵌套函数与 Class?
Python Nested Function with Variables vs. Class?
Python 带变量的嵌套函数与带属性和方法的 Class 有什么区别?
我在网上看过,问过程序员,但仍然没有弄清楚 class 与包含变量和其他函数的函数有何不同。
示例:
Class
class Add:
def __init__(self):
self.a = 5
self.b = 7
def inside_method(self):
return (self.a + self.b)
add1 = Add()
print('sum is:', add1.inside_method())
带变量的嵌套函数
def func():
a = 5
b = 7
def nested_func():
return (a + b)
return nested_func()
print('sum is:', func())
你的问题的评论已经是很好的答案了。
A Python 方法只是一个以 self
作为第一个参数的函数,它是定义 class 的(继承 class 的实例)方法。
确实,对于您的非常简单的示例,使用 class 几乎没有用。但是您可能熟悉 Python 字符串,它们属于 class str
:
>>> type("hello")
而一个字符串有 many methods : capitalize
, casefold
, center
, count
, encode
, endswith
, ...
这很方便,因为我不需要每次为每个要调用的方法创建相同的字符串,我可以重复使用相同的实例:
>>> s = "hello"
>>> s.capitalize()
"Hello"
>>> s.replace("h", "G")
'Gello'
>>> s.count("l")
2
更强大的是使用class个实例来存储状态。 Python 字符串是不可变的,但列表不是。
>>> temperatures = [14, 15, 10, 33]
>>> temperatures[1]
15
>>> temperatures[1] = 0
>>> temperatures
[14, 0, 10, 33]
>>> temperatures.sort()
>>> [0, 10, 14, 33]
在 Python 中实现的面向对象主要是将有状态数据与对其进行操作的函数(命名方法)耦合。它旨在简化这些经常有用的结构。
希望它澄清!
在我看来,function
是对“action”的抽象,class
是对“thing”的抽象。从这个角度看,函数中的成员(局部变量、闭包变量、嵌套函数)都是为了辅助顺利完成一个“动作”。另一方面,class的成员(里面的变量和方法)作为一个“对象”一起工作。当您尝试使用它们时,差异会更加明显。
正如Lenormju
所说,它们是不同的范式。选择哪个适合您的需求的目的是关于您希望如何抽象现实世界。在你的例子中,使用嵌套函数进行加法计算更合适。
Python 带变量的嵌套函数与带属性和方法的 Class 有什么区别? 我在网上看过,问过程序员,但仍然没有弄清楚 class 与包含变量和其他函数的函数有何不同。
示例:
Class
class Add:
def __init__(self):
self.a = 5
self.b = 7
def inside_method(self):
return (self.a + self.b)
add1 = Add()
print('sum is:', add1.inside_method())
带变量的嵌套函数
def func():
a = 5
b = 7
def nested_func():
return (a + b)
return nested_func()
print('sum is:', func())
你的问题的评论已经是很好的答案了。
A Python 方法只是一个以 self
作为第一个参数的函数,它是定义 class 的(继承 class 的实例)方法。
确实,对于您的非常简单的示例,使用 class 几乎没有用。但是您可能熟悉 Python 字符串,它们属于 class str
:
>>> type("hello")
而一个字符串有 many methods : capitalize
, casefold
, center
, count
, encode
, endswith
, ...
这很方便,因为我不需要每次为每个要调用的方法创建相同的字符串,我可以重复使用相同的实例:
>>> s = "hello"
>>> s.capitalize()
"Hello"
>>> s.replace("h", "G")
'Gello'
>>> s.count("l")
2
更强大的是使用class个实例来存储状态。 Python 字符串是不可变的,但列表不是。
>>> temperatures = [14, 15, 10, 33]
>>> temperatures[1]
15
>>> temperatures[1] = 0
>>> temperatures
[14, 0, 10, 33]
>>> temperatures.sort()
>>> [0, 10, 14, 33]
在 Python 中实现的面向对象主要是将有状态数据与对其进行操作的函数(命名方法)耦合。它旨在简化这些经常有用的结构。
希望它澄清!
在我看来,function
是对“action”的抽象,class
是对“thing”的抽象。从这个角度看,函数中的成员(局部变量、闭包变量、嵌套函数)都是为了辅助顺利完成一个“动作”。另一方面,class的成员(里面的变量和方法)作为一个“对象”一起工作。当您尝试使用它们时,差异会更加明显。
正如Lenormju
所说,它们是不同的范式。选择哪个适合您的需求的目的是关于您希望如何抽象现实世界。在你的例子中,使用嵌套函数进行加法计算更合适。