Refining import
We saw in playing_cards.py that we had to refer to label by its full name playing_cards.label. This is not what we originally wanted. The original desire was to be able to write,
# blackjack.py
...
print('You are holding,')
for card in hand:
print('The', label(card))
...
Python allows us to do this using variations in import syntax. If we only want to import the function label from the module playing_cards.py and to refer to it by its 'first name' alone, i.e. as label, we can write
from playing_cards import label
...
print('You are holding,')
for card in hand:
print('The', label(card).)
...
If you want to import all the functions in playing_cards and refer to them just by their โfirst namesโ you can use,
from playing_cards import *
...
print('You are holding,')
for card in hand:
print('The', label(card))
...
You can even rename a function as you import it. If you want to import label but refer to it as card_name you can use,
from playing_cards import label as card_name
...
print('You are holding,')
for card in hand:
print('The', card_name(card))
...
A warning!
There is a danger of making a habit of importing functions and referring
to them by first name as in the first two examples above. If multiple
modules have functions by the same name, e.g. you import two modules
both of which have a function namedย label, the second import
ofย labelย will redefine the function and you will only have access to
that version. Like all conveniences there is a cost!