是的,有兩種選擇。
首先,您可以傳遞值而不是使用全局變量。例如,create_list_and_find_max_and_min可以在本地創建一個數組並返回它,那麼您可以在到the_smart_way傳遞:
import random
#----------------------------------------------#
def main():
my_array = create_list_and_find_max_and_min(10)
print the_smart_way(my_array)
#----------------------------------------------#
def create_list_and_find_max_and_min(n):
my_array = []
n = input("How many numbers do you want in your array?:")
for i in range(n):
my_array.append(random.randint(1,n))
print "My array is:", my_array
#----------------------------------------------#
min = my_array[0]
for number in my_array:
if min > number:
min = number
print "The minimum value in the array is:", min
#----------------------------------------------#
max = my_array[0]
for number in my_array:
if max < number:
max = number
print "The maximum value in the array is:", max
return my_array
#----------------------------------------------#
def the_smart_way(my_array):
# "This one uses the built-in Python functions for min/max..."
min_my_array = min(my_array)
max_my_array = max(my_array)
return min_my_array, max_my_array
#----------------------------------------------#
if __name__ == '__main__':
main()
其次,你可以創建一個封裝了對數據操作的數據和函數的類:
import random
#----------------------------------------------#
class MyArrayClass(object):
def create_list_and_find_max_and_min(self, n):
self.my_array = []
n = input("How many numbers do you want in your array?:")
for i in range(n):
self.my_array.append(random.randint(1,n))
print "My array is:", self.my_array
#----------------------------------------------#
min = self.my_array[0]
for number in self.my_array:
if min > number:
min = number
print "The minimum value in the array is:", min
#----------------------------------------------#
max = self.my_array[0]
for number in self.my_array:
if max < number:
max = number
print "The maximum value in the array is:", max
#----------------------------------------------#
def the_smart_way(self):
# "This one uses the built-in Python functions for min/max..."
min_my_array = min(self.my_array)
max_my_array = max(self.my_array)
return min_my_array, max_my_array
#----------------------------------------------#
def main():
my_array = MyArrayClass()
my_array.create_list_and_find_max_and_min(10)
print my_array.the_smart_way()
#----------------------------------------------#
if __name__ == '__main__':
main()
你或許應該明白原因全局變量是不好的做法。
想象一下,你想創建兩個數組。有了全局變量,第二個將取代第一個,這將永遠消失。
create_list_and_fix_max_and_min(10)
create_list_and_fix_max_and_min(20)
# No way to operate on the original array!
有了一個局部變量,可以存儲他們兩個:
my_array_1 = create_list_and_fix_max_and_min(10)
my_array_2 = create_list_and_fix_max_and_min(20)
the_smart_way(my_array_1)
使用對象提供相同的利益;兩者之間的差異最終歸結爲操作是否屬於數據含義的一部分,或數據是否獨立,操作是否通用。 (或者,你有時,不管你多一個功能勢利或OO勢利......的)
請編輯的問題*僅*如果你的信息添加或刪除無用的信息。如果您有任何問題,請在用戶的答案上發表評論。 – Blender 2012-07-13 00:09:38
對不起,我試圖更新我的代碼來修復它,並指出我仍然得到一個錯誤..:/ – 2012-07-13 00:14:29