__name __
导入模块的时候会从头到尾执行一遍,因此如果我们在我们的.py 文件中,写了 直接能执行的代码,比如print("xxx") 这样的代码,就会在导入的时候执行一遍,但是有些是我们的测试代码,需要在开发模块的时候进行测试,还比如,我们自己开发的功能调用的时候需要执行一个方法,但是呢,如果我们被别人引入的时候,不希望执行这些代码:
python有一个 变量叫 __name__
在直接执行的时候的值为 __main__
在作为模块导入的时候为 模块的名字;
因此:
if __name__ == " __main__ ":
# 需要执行的代码
main()
什么是模块?
模块就是.py文件,或者文件夹
导入模块的方法:
import moduleName
form moduleName import 功能
其中功能包括: 函数,全局变量,类
有一个属性可以控制 模块对外开放的功能
__all__ = ['test', 'test2']
"""
列表中添加的是需要暴露的功能,也就是 函数,全局变量,
类等,只有这个列表中有的功能外部才能导入,
如果不写,默认是可以导入全部功能。
"""
包 : 按照包来组织代码
1 需要创建一个文件夹,在这个文件夹下,创建一个
__init__.py
文件,这样这个文件夹就能够称之为一个包;
这个文件夹下面可以放置多个py文件
__init__.py
文件里也可以定义__all__
属性,和上面类似,导入一个包的时候,就会执行__init__.py
这个文件,因此如果在__init__.py
文件中写上:import xxx
:就表示可以使用这个功能。
发布一个python包:
需要创建
setup.py
文件
程序传参;
ping 192.158.1.13
这里面的ip地址是可以变的,因此程序肯定是可以在执行的时候接收到这些参数,然后进行处理---python是如何接收传参的呢?
python中有一个模块叫 sys
import sys
sys.argv: 这个参数就代表程序执行的时候传入的参数
argv是一个列表,列表的第一个元素 也就是argv[0]:表示的程序的名称
argv[1]....等 就表示程序运行时传入的参数
range的危害:
在python2中range会创建到内存中,一次如果创建一个数量很大的range列表,会导致内存占用过多甚至溢出。python3中只有在实际获取的时候才真正创建对象 分配内存
列表推导式:
推导一个列表:实际上是对 for xx in xxxx:循坏的一个简写
1 原始版:
a = []
for i in range(1, 10):
a.appeng(i)
2简略版
[]: 代表列表
[ for i in range(1,10)] :列表中for循环
[i for i in range(1,10)] 列表中的元素为i 因此前面再加个i
既然可以for循环,也可以再进行扩展
[i for i in range(1, 10) if i%2 == 0] :满足连个条件的i
[(1,1), (1, 2),...] 列表中是元组如何构成?
[(i, j) for i in range(1, 10) for j in range(10)]
set集合: 自动去重的无序列表
set2 = {11, 22, 33, 44}