簡體   English   中英

在 function 定義中使用與在 python 中調用 function 時使用的變量相同的名稱是否錯誤

[英]is it wrong to use same names for variables inside the function definition as thevariables used when calling a function in python

基本上就是標題所說的。

說我有一個 function 定義

def add_one (num1):
    numOut = num1 +1
    return numOut

我調用 function 如下

num1 = 11
numOut = add_one (num1)

這被認為是不好的做法,因為我們用相同的名稱命名兩個不同的對象,還是增加可讀性的好做法? 或者它是我完全錯過的東西?

(還檢查了使用相同名稱將變量傳遞給 function以及在 function 中使用一些與其同名的變量 function 是否正常,但他們不參考 python?

首先,讓我們談談范圍:

在 python 和許多其他語言變量中存在於其 scope 中。 這意味着如果您在 scope 中創建一個變量,那么當您離開該 scope 時,它將停止存在。

外部 scope 上的變量也可以在內部 scope 中訪問,但是如果您對該變量進行了某些操作,那么它將被重新聲明為該 scope 中的局部變量。 這意味着該變量將不同於外部 scope 上的變量。

如果您問我,我認為使用與您的函數的 arguments 相同的名稱不是一個壞習慣。 事實上,我會稱之為不好的做法,試圖避免這種情況,因為你最終會試圖為具有相同含義的不同變量找出新名稱。

您應該避免的是使用不在本地 scope 上的變量(無論您使用什么語言)。

盡量不要擔心。 有時,參數變量與函數的參數具有相同的名稱是有意義的,但您永遠不想強制執行。 您主要關心的是定義 function 的代碼應該是有意義的,無論它如何被調用。

Remember that you might want to call a function passing some expression other than a plain variable, or that you might want to call the same function more than once in the same scope with different arguments. 嘗試匹配您調用的 function 的參數名稱只有在您想不出更好的變量名稱時才有意義。

這樣做時,總是需要考慮以下事項:

  • 我是否覆蓋了我可能需要的變量的名稱?
  • 我是否覆蓋了 function 的名稱?
  • 在函數的上下文中,變量是否已經存在?

但是,在 python 中,最后一點無關緊要,因為無法在函數的 scope 內訪問外部變量(不包括全局變量)。

在以下示例中,function 的名稱被覆蓋(這是錯誤的):

def myFunc (a, b):
    myFunc = 2
    if a > 2 and a > b:
        return a
    return b

在下一個示例中,function 的上下文 / scope 更改了您在非 python 的語言中可以訪問的變量:

x = 3

def myFunc (a, b):
    if a + x > b + x:    # in some languages this would work, but in python this is an error because x is not defined in the function.
        x = 5            # here x == 5, because we have redefined it. x is still 3 outside of our function though.
        return a + x
    return b

在第二個示例中,在設置值之前使用變量的值被認為是不好的做法,但是在 python 中您不必擔心,因為這是不可能的。

我完全錯過的東西

python中函數的重要特征是它們的可重用性,想象一下改變需求會迫使你使用你的 function

def add_one (num1):
    numOut = num1 +1
    return numOut

不是一個,而是兩個不同的變量,你可能會以

num1 = 11
num2 = 15
numOut = add_one (num1)
numOut2 = add_one (num2)

現在你有一些變量,它們的名稱與 function 中的名稱相同,但它們不同。 如果您從一開始就使用不同的名稱,則不會出現此類問題,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM