Во-первых, если вы когда-либо использовали sys.argv
или os.sep
, вы уже использовали переменные и константы другого модуля.
Потому что способ, которым вы делитесь переменными и константами, точно такой же, как вы делитесь функциями и классами.
На самом деле, функции, классы, переменные, константы - все это просто глобальные переменные модуля, насколько это касается Python. Они могут иметь значения разных типов, но это переменные одного типа.
Итак, допустим, вы пишете этот модуль:
# spam.py
cheese = ['Gouda', 'Edam']
def breakfast():
print(cheese[-1])
Если вы import spam
, вы можете использовать cheese
, точно так же, как вы используете eggs
:
import spam
# call a function
spam.eggs()
# access a variable
print(spam.cheese)
# mutate a variable's value
spam.cheese.append('Leyden')
spam.eggs() # now it prints Leyden instead of Edam
# even rebind a variable
spam.cheese = (1, 2, 3, 4)
spam.eggs() # now it prints 4
# even rebind a function
spam.eggs = lambda: print('monkeypatched')
spam.eggs()
Заголовочные файлы C ++ на самом деле являются просто модулями для бедняков. Не каждый язык так гибок, как Python, но почти каждый язык от Ruby до Rust имеет какую-то реальную модульную систему; только C ++ (и C) требует, чтобы вы имитировали его, имея код, который включается во множество разных файлов во время компиляции.