函数的调用(显示内容的隐藏)以及命名冲突
写程序的终极原则:高内聚,低耦合 ---> high cohesion low coupling
设计函数最为重要的原则:单一职责原则(一个函数只做好一件事情) ---> 高度内聚
模块调取隐藏判定:if name == 'main':
输入main一回车就会出现下面这个代码if name == 'main':
如何设置模板缩写
file ---> settings ---> editor ---> live templates
# __name__是一个隐藏变量,它代表了当前模块(文件)的名字
# 如果直接通过Python解释器运行example16.py文件,__name__的值是__main__
# 如果是在其他的模块(文件)中导入了example16,那么此时__name__的值就是example16
if __name__ == '__main__':
print('当前文件执行会输出的内容,调取文件则不会输出')
# 输出内容为__main__
print(__name__)
如果要使用其他文件(模块)中定义的函数,
方法一:可以通过import导入模块,然后通过“模块名.函数名”的方式调用函数;
方法二:直接从模块中导入函数 ---> “from 模块 import 函数” ---> 直接通过函数名调用函数
实际上就和调用Python标准库是一样的,只不过库名换成了文件名
import导入函数、模块时,可以使用as(alias)关键字进行别名
做工程化项目开发时,如果项目中的代码文件非常多,我们可以使用“包”(package)来管理”模块“(module)
再通过模块来管理函数,包其实就是一个文件夹,而模块就是一个Python文件,通过这种方式就可以很好地解决
大型项目团队开发中经常遇到的命名冲突的问题。
Python中的from、import/as关键字就是专门用来处理包河模块导入的操作
如果是同个项目下的其他包的文件,调用 import 文件名.函数名
import test.example01
from test.example01 import test
解决命名冲突
方法一:导入函数的时候对函数进行别名
方法二:使用完全限定名(qualified name) ---> [包名.]模块名.函数名
在同个项目下,有一个包utils,下面有一个test.py,test.py中有一个函数print_test
import random
# import utils.test
#
# utils.test.print_test()
# from utils.test import print_test as pt
#
# pt()
from utils import test
test.print_test()
import random
import example16
data = [random.randrange(1, 101) for _ in range(10)]
print(f'平均分{example16.average(data)}')
print(f'中位数{example16.median(data)}')
import random
from example16 import average as avg, median
data = [random.randrange(1, 101) for _ in range(10)]
print(f'平均分{avg(data)}')
print(f'中位数{median(data)}')
example16
样本数据描述性统计信息的一些函数
import math
def ptp(data):
"""求极差(全距)
:param data: 一组数据
:return: 极差
"""
return max(data) - min(data)
def average(data):
"""求均值"""
return sum(data) / len(data)
def variance(data):
"""求方差"""
temp = average(data)
list_temp = [(val - temp) ** 2 for val in data]
# 整除的话,返回的就是int。用除法的话,返回是float
return sum(list_temp) / (len(data) - 1)
def standard_deviation(data):
"""求标准差"""
return math.sqrt(variance(data))
def median(data):
"""求中位数"""
# 得到一个新列表,不可以直接在原先列表上进行排序
temp, size = sorted(data), len(data)
if size % 2 == 0:
# 切片
return average(temp[size // 2 - 1: size // 2 + 1])
else:
return temp[size // 2]