__all__ = ['add', 'number', 'calculate'] # 变量 number = 100 name = 'calculation' # 函数 def add(*args): if len(args) > 1: sum = 0 for i in args: sum += i return sum else: print("至少传入两个参数。。。") return 0 def minus(*args): if len(args) > 1: m = 0 for i in args: m -= i return m else: print("至少传入两个参数。。。") # 类 class Calculate: def __init__(self, num): self.num = num def test(self): print('正在使用Calculate进行计算。。。') @classmethod def test1(cls): print('------>Calculate中类方法') def test(): print("我是测试") print(__name__) # 打印模块名 if __name__ == '__main__': print(__name__) # __name__---->__main__ test()
------------------------------------------------------------------------------------------------------------------
''' __init__.py文件 当导入包时,默认调用__init__.py文件 1.当导入包的时候,把一些初始化的函数,变量,类定义在__init__.py文件中 2.此文件中函数,变量等的访问,只需要通过:包名,函数。。。 3.结合__all__=[通过*可以访问的模块] ''' # import user # # from user.models import User # # user.create_app() # user.printA() from user import * # from 模块 import * 表示可以使用模块里面所有内容,如果没有定义__all__所有的都可以访问,但是如果添加上了__all__,只有__all__=['',''] # 列表中可以访问 #from 包 import * 表示该包中内容(模块)是不能访问,就需要__init__.py文件中定义__all__=[可以通过*访问的模块] user = models.User("admin", "123456") user.show() print(test.MAX)
-----------------------------------------------------------------------------------------------------
# from user import models # # u=models.User('admin','123456') # u.show() # from user.models import User # # u=User('admin','123456') # u.show() # # from articel.models import Article # # a=Article('个人总结','佳伟') # a.show() from user.models import * # __all__ = ["User"]仅对*起作用 # print(version) 不可查阅 u=User('admin','123456') ''' article --models.py --__init__.py user --models.py --__init__.py --test.py package.py from 包 import 模块 from 包.模块 import 类|函数|变量 from 包.模块 import * '''
--------------------------------------------------------------------------------------------------------
ctrl+alt+l自动对齐 包的导入: import XX from xxx import a,b 文件夹 包:py文件 非py文件 directory(文件夹) 一个包里可以存放多个模块 项目>包>模块>类 函数 变量 marked directory as->Sources Root 使用包中模块中的User类
-----------------------------------------------------------------------------------------------------------
''' 循环导入:大型python项目中,需要很多的python文件,由于架构不当,可能会出现模块间的相互导入 A:模块 def test(): f() B:模块 def f(): test() 避免产生循环导入: 1.重新架构 2.将导入的语句放到函数里面 3.把导入语句放到模块最后 ''' from 循环导入2 import func def task1(): print('-----task1------') def task2(): print('-----task2------') func() # 调用task1 if __name__ == '__main__': task1() task2()
----------------------------------------------------------------------------------------------------
def func(): print('-------循环导入2里面的func---1----') from 循环导入1 import task1 task1() print('-------循环导入2里面的func---2----') -----------------------------------------------------------------------
''' 当你导入一个模块,Python解析器对模块位置的搜索顺序是: 1、当前目录 2、如果不在当前目录,Python则搜索在shell变量Pythonpath下的每个目录 3、如果都找不到,Python会查看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。 模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,Pythonpath和由安装过程决定的默认目录。 自定义模块 系统模块 sys模块 ''' import sys print(sys.path) print(sys.version) print(sys.argv) #运行程序时的参数
--------------------------------------------------------------------------------------------------------------------
''' 在python中,模块是代码组织的一种方式,把功能相近的函数或者类放到一个文件中,一个文件(.py)就是一个模块(module),模块名就是文件 名去掉后缀,这样做的好处是: -提高代码的可复用、可维护性。一个模块编写完毕后,可以很方便的在其他项目中导入 -解决命名冲突,不同模块中相同的命名不会冲突 1.自定义模块 2.使用系统模块 导入模块: 1.import 模块名 模块名.变量 模块名.函数 模块名.类 2. from 模块名 import 变量|函数|类 3.from 模块名 import * 该模块中所有的内容 但是如果想限制获取的内容,可以在模块中使用__all__=[使用*可以访问到的内容] 4.无论是import还是from形式,都会将模块内容进行加载 如果不希望其进行调用,就会用到__name__ 在自己模块里面__name__叫:__main__ 如果在其他模块中通过导入的方式调用的话:__name__:模块名 ''' list1 = [1, 2, 35, 68] # 导入模块 import 模块名 import calculate # 使用模块中的函数 模块名.变量 模块名.函数 模块名.类 value = calculate.add(*list1) print(value) # 使用模块变量 print(calculate.number) # 使用模块中的类 cal = calculate.Calculate(88) cal.test() calculate.Calculate.test1()