函数的调用(显示内容的隐藏)以及命名冲突

写程序的终极原则:高内聚,低耦合 ---> 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]
posted @ 2023-09-06 15:02  Danlis  阅读(10)  评论(0编辑  收藏  举报