python 函式返回變數的有趣發現 (位址覆蓋)

2021-10-06 07:17:19 字數 1340 閱讀 4167

假設有乙個檔案sort.py:

def bubblesort_asc(arr):

for i in range(1, len(arr)):

for j in range(0, len(arr)-i):

if arr[j] > arr[j+1]:

arr[j], arr[j + 1] = arr[j + 1], arr[j]

# print(arr)

return arr

def bubblesort_des(arr):

for i in range(1, len(arr)):

for j in range(0, len(arr)-i):

if arr[j] > arr[j+1]:

arr[j], arr[j + 1] = arr[j + 1], arr[j]

arr.reverse()

# print(arr)

return arr

在另乙個檔案裡進行單元測試:

from sort import bubblesort_asc,bubblesort_des

if __name__ == '__main__':

arr = [5,2,3,7,9]

asc_sorted_arr = [2,3,5,7,9]

des_sorted_arr = [9,7,5,3,2]

a = bubblesort_asc(arr)

b = bubblesort_des(arr)

print(a)

print(b)

print(id(a),id(b),id(arr))

assert bubblesort_des(arr) == des_sorted_arr

assert bubblesort_asc(arr) == asc_sorted_arr

assert b == des_sorted_arr

assert a == asc_sorted_arr

結果如下:

[9, 7, 5, 3, 2]

[9, 7, 5, 3, 2]

4797941872 4797941872 4797941872

assertionerror : assert b == des_sorted_arr

即函式bubblesort_asc或者bubblesort_des返回的結果,是乙個位址。賦值給外面的變數的時候,那個變數相當於是個指標。就會指向這個位址。相當於一開始的那個變數arr已經發生了改變。這和python的語言特性是分不開的。

python返回 python 返回函式

返回函式 1.高階函式除了能夠接收函式作為引數外,還能把函式作為結果返回 2.例如乙個求和函式,通常情況下的定義以及呼叫 def sum nums x 0for n in nums x x n return x sum 1,2,3,4,5 不返回求和的結果,而是返回求和的函式 def sum 1 n...

函式區域性變數的返回

昨天看到一道程式設計糾錯題,在網上看到乙個講解非常詳細的文章,這裡拿來和大家分享一下 一般的來說,函式是可以返回區域性變數的。區域性變數的作用域只在函式內部,在函式返回後,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址 ...

函式的變數 函式的返回值

區域性變數 在函式中定義的變數一般只能在該函式內部使用,這種變數稱為區域性變數 全域性變數 在乙個檔案頂部定義的變數可以供檔案中的任何函式呼叫,這種變數稱為全域性變數 注意,函式只能對全域性變數做 print 操作,如果要做其他操作要用 global 宣告是全域性變數,同理,如果要在函式外部使用函式...