函数定义中的变量使用与python中调用函数时使用的变量相同的名称是否错误

函数定义中的变量使用与python中调用函数时使用的变量相同的名称是否错误,python,Python,基本上就是标题所说的 假设我得到了一个函数定义 def add_one (num1): numOut = num1 +1 return numOut 我调用函数如下 num1 = 11 numOut = add_one (num1) 当我们用相同的名称命名两个不同的对象时,这被认为是一种不好的做法,还是一种提高可读性的好做法?还是我完全错过了什么 (也被选中了,但他们没有提到python)我完全缺少的东西 python中函数的一个重要特性是它们的可重用性,想象一下改变需求z会

基本上就是标题所说的

假设我得到了一个函数定义

def add_one (num1):
    numOut = num1 +1
    return numOut
我调用函数如下

num1 = 11
numOut = add_one (num1)
当我们用相同的名称命名两个不同的对象时,这被认为是一种不好的做法,还是一种提高可读性的好做法?还是我完全错过了什么

(也被选中了,但他们没有提到python)

我完全缺少的东西

python
中函数的一个重要特性是它们的可重用性,想象一下改变需求z会迫使您使用函数

def add_one (num1):
    numOut = num1 +1
    return numOut
不是针对一个,而是针对两个不同的变量,您可能会以

num1 = 11
num2 = 15
numOut = add_one (num1)
numOut2 = add_one (num2)
现在你们有了一些变量,它们的名字在函数中是相同的,在函数中是相同的,在函数中是不同的。如果您从一开始就使用不同的名称,则不会出现此类问题,例如:

x1 = 11
x2 = 15
x1out = add_one(x1)
x2out = add_one(x2)
我完全错过的东西

python
中函数的一个重要特性是它们的可重用性,想象一下改变需求z会迫使您使用函数

def add_one (num1):
    numOut = num1 +1
    return numOut
不是针对一个,而是针对两个不同的变量,您可能会以

num1 = 11
num2 = 15
numOut = add_one (num1)
numOut2 = add_one (num2)
现在你们有了一些变量,它们的名字在函数中是相同的,在函数中是相同的,在函数中是不同的。如果您从一开始就使用不同的名称,则不会出现此类问题,例如:

x1 = 11
x2 = 15
x1out = add_one(x1)
x2out = add_one(x2)

首先,让我们谈谈作用域:

在python和许多其他语言中,变量都存在于其范围内。这意味着,如果在某个范围内创建变量,当您离开该范围时,该变量将停止存在

外部作用域上的变量也可以在内部作用域中访问,但如果您将某些内容添加到该变量,则该变量将在该作用域中重新声明为局部变量。这意味着该变量将与外部范围上的变量不同

如果你问我,我不认为使用与函数参数相同的名称是一种不好的做法。事实上,我会称之为坏习惯试图避免这种情况,因为您最终会尝试为具有相同含义的不同变量找到新名称


您应该避免使用不在本地范围内的变量(无论您使用的是什么语言)。

首先,让我们谈谈范围:

在python和许多其他语言中,变量都存在于其范围内。这意味着,如果在某个范围内创建变量,当您离开该范围时,该变量将停止存在

外部作用域上的变量也可以在内部作用域中访问,但如果您将某些内容添加到该变量,则该变量将在该作用域中重新声明为局部变量。这意味着该变量将与外部范围上的变量不同

如果你问我,我不认为使用与函数参数相同的名称是一种不好的做法。事实上,我会称之为坏习惯试图避免这种情况,因为您最终会尝试为具有相同含义的不同变量找到新名称


您应该避免使用不在本地范围内的变量(无论您使用的是哪种语言)。

尽量不要担心这一点。有时,参数变量与函数的参数具有相同的名称是有意义的,但您永远不想强制这样做。您主要关心的是,定义函数的代码应该是有意义的,无论如何调用它


请记住,您可能希望调用传递非普通变量的表达式的函数,或者您可能希望在同一范围内使用不同参数多次调用同一函数。只有在无法为变量想出更好的名称时,才可以尝试匹配正在调用的函数的参数名。

不要担心这一点。有时,参数变量与函数的参数具有相同的名称是有意义的,但您永远不想强制这样做。您主要关心的是,定义函数的代码应该是有意义的,无论如何调用它


请记住,您可能希望调用传递非普通变量的表达式的函数,或者您可能希望在同一范围内使用不同参数多次调用同一函数。只有在无法为变量想出更好的名称时,才有必要尝试匹配正在调用的函数的参数名。

进行此操作时,始终需要考虑以下事项:

  • 我是否覆盖了可能需要的变量名
  • 我是否覆盖了函数的名称
  • 在函数的上下文中,变量是否已经存在
但是,在python中,最后一点并不重要,因为外部变量(不包括全局变量)不能在函数的范围内访问

在以下示例中,函数名被覆盖(这是错误的):

def myFunc(a,b):
myFunc=2
如果a>2且a>b:
归还
返回b
在下一个示例中,函数的上下文/作用域将更改您在非python语言中可以访问的变量:

x=3
def myFunc(a、b):
如果a+x>b+x:#在某些语言中这是可行的,但在python中这是一个错误,因为函数中没有定义x。
x=5#这里x=5,因为我们已经重新定义了它。但是x仍然是3,超出了我们的函数范围。
返回a+x
返回b

在第二个示例中,在设置值之前使用变量的值被视为不好的做法,但是在python中,您不必担心这一点,因为这是不可能做到的。

在执行此操作时,始终需要考虑以下事项:

  • 我是否覆盖了可能需要的变量名
  • 我是否覆盖了函数的名称
  • 在函数的上下文中,变量是否已经存在
霍维夫