Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个字典(dictionary),它的键就是变量名,它的值就是那些变量的值。
在一个 Python 程序中的任何一个地方,都存在几个可用的命名空间。
1、每个函数都有着自已的命名空间,叫做局部命名空间,它记录了函数的变量,包括函数的参数和局部定义的变量。
2、每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
3、还有就是内置命名空间,任何模块均可访问它,它存放着内置的函数和异常。
命名空间查找顺序:
当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:
1、局部命名空间:特指当前函数或类的方法。如果函数定义了一个局部变量 x,或一个参数 x,Python 将使用它,然后停止搜索。
2、全局命名空间:特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
3、内置命名空间:对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。
4、如果 Python 在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 异常,如,NameError: name 'aa' is not defined。
模块:
1、直接使用import 模块名(模块在默认搜索路径下)
注:直接使用import时,在使用函数时需要加上模块的命名空间。即:在使用该模块下的函数时,需要加上模块名
(模块名.函数名)同时调用多个模块时,可以将模块间用逗号隔开:import math,random
2、from 模块名 inport 函数名(模块在默认搜索路径下)
注:使用此方法调用函数时,可以直接使用函数(不需要加上函数的命名空间)
3、import 模块名 as 新名字
注:在使用该模块下的函数时,需要加上模块名(模块名.函数名)
搜索路径:
python模块的导入需要一个路径搜索的过程(告诉函数或模块在哪个位置)。python中由许多默认的搜索路径.
如:set-packages,libs等,如果模块直接在这些默认的搜索路径下则可以直接调用模块(不需要加上搜索路径),若模块没有在这些搜索路径下则需要加上模块的搜索路径。
包:
所谓的包就是为了有效的管理模块,将模块分门别类的放在不同的文件夹下。
创建一个包:
1、创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字
2、在文件夹下创建一个__init__.py的模块文件,内容可以为空。用来告诉python将该目录当成一个包来处理。
3、将相关的模块放入文件夹中
导入包中的模块:
1、import 包名(包路径).模块名
注:在使用该模块下的函数时,需要加上模块名(模块名.函数名)
2、from 包名(包路径) import 模块名
注:在使用该模块下的函数时,需要加上模块名(模块名.函数名)
3、from 包名(包路径).模块名 import 函数名
注:使用此方法调用函数时,可以直接使用函数例:from selenium.webdriver.common.keys import Keys
1、在导入模块时,若模块不在pothon的默认搜索路径下,则在导入模块时需要加上模块所在的包名(搜索路径)
2、上面的例子中selenium.webdriver.common为包在默认搜索路径(set-packages)下的路径。keys为模块名。Keys为函数名
if __name__ == '__main__':
作用:一般我们在写代码的时候,会在代码中加入测试代码,如果我们将这些代码作为模块导入到其他文件中时,
就有可能将我们的测试代码一起执行,所以当我们使用 if __name__ = '__main__'时,就不会执行我们的测试代码了
总结:
1、当作为程序运行时,__name__的属性值为'__main__',而作为模块导入时__name__的值就是该模块的名字了
2、当__name__ == '__main__'表示直接执行,即会执行测试代码(执行其本身),反之则表示已作为模块导入,不会执行测试代码
序列解包:
1、在python中交换所做的事情叫做序列解包,即将多个值的序列解开,然后放到变量序列中。
2、解包序列中的元素数量必须和放置在赋值符号" = "左边的数量完全一致
3、将多个值赋予多个变量,只需要用逗号把变量和值隔开,并且等号右边的值的数量和变量的数量一致
增量赋值:
即加减乘除的简写