はい、2 つの選択肢があります。
まず、グローバルを使用する代わりに値を渡すことができます。たとえば、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()
おそらく、グローバル変数が悪い習慣である理由を理解する必要があります。
2 つの配列を作成するとします。グローバル変数を使用すると、2 番目の変数が最初の変数に置き換わり、永久に失われます。
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)
オブジェクトを使用すると、同じ利点が得られます。この 2 つの違いは、最終的には、操作がデータの意味の一部なのか、それともデータが独立していて操作が一般的なものなのかによって決まります。(あるいは、あなたがより機能的な俗物であるか、オブジェクト指向の俗物であるかに関係なく...)