scriptsvariable name constraints extend to your module filenames too for instanceyou can code files called and py and my-code py and run them as top-level scriptsbut you cannot import themtheir names without the pyextension become variables in your code and so must follow all the variable rules just outlined reserved words are off-limitsand dashes won' workthough underscores will we'll revisit this module idea in part of this book python' deprecation protocol it is interesting to note how reserved word changes are gradually phased into the language when new feature might break existing codepython normally makes it an option and begins issuing "deprecationwarnings one or more releases before the feature is officially enabled the idea is that you should have ample time to notice the warnings and update your code before migrating to the new release this is not true for major new releases like (which breaks existing code freely)but it is generally true in other cases for exampleyield was an optional extension in python but is standard keyword as of it is used in conjunction with generator functions this was one of small handful of instances where python broke with backward compatibility stillyield was phased in over timeit began generating deprecation warnings in and was not enabled until similarlyin python the words with and as become new reserved words for use in context managers ( newer form of exception handlingthese two words are not reserved in unless the context manager feature is turned on manually with from__future__import (discussed later in this bookwhen used in with and as generate warnings about the upcoming change--except in the version of idle in python which appears to have enabled this feature for you (that isusing these words as variable names does generate errors in but only in its version of the idle guinaming conventions besides these rulesthere is also set of naming conventions--rules that are not required but are followed in normal practice for instancebecause names with two leading and trailing underscores ( __name__generally have special meaning to the python interpreteryou should avoid this pattern for your own names here is list of the conventions python followsnames that begin with single underscore (_xare not imported by from module import statement (described in names that have two leading and trailing underscores (__x__are system-defined names that have special meaning to the interpreter assignmentsexpressionsand prints