栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2021-10-30

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-30

慕课网Python3入门加进阶(笔记) 第八章:包、模块、函数与作用域 (一)Python项目的组织结构


1、包模块和类为Python项目的组织结构,函数变量是类的属性和方法,不属于组织架构。
2、一个包可以包含多个模块,一个模块也可以包含多个类。
3、包中可以包含模块和子包,模块可以和包平级。
4、不建议在模块里直接写业务逻辑,而应该封装成类。
5、不是所以文件夹都是Python的包,Python包用__init__.py文件进行标识
6、知识点:
  __init__.py文件
(1)__init__.py中的文件在导入包时(包括导入包下的模块、函数、和变量)自动执行。
(2)__init__.py文件一般会做一下包和模块的初始化工作。
(3)批量导入,当多个模块需要导入相同库时,在__init__.py文件导入利用(1),直接导入包即可
(4)dir()方法,查看包和模块封装的属性和方法。

import sys
infos = dir(sys)
print(infos)
(二)模块

1、模块的导入
(1)包名和模块名
  就是文件夹名称和.py文件名称(__init__.py文件名就是包名)。区分不同包的相同模块使使用命名空间(包名.模块名)。
(2)import导入模块
   import只能导入包和模块(.py文件)不能直接导入函数和变量,引用变量(函数)名时,使用模块名.变量函数名。
(3)from import

from module import 变量、函数、*(引入被引模块内置变量__all__=[‘变量’]列表中的所有变量)

(4)相对导入和绝对导入
a、顶级包
    和miam.py入口文件同级的包(不能再到入口文件的上级)。
b、绝对导入
    从顶级包通过通过点符号链接,一直到被导入模块的形式进行导入。

import package2.package4.m2

c、相对导入
    相对于模块的位置一个点表示同级,两个点表示上一级、、、,入口文件不能使用相对导入(相对导入通过模块内置变量__name__进行定位进而进行导入,而入口文件的内置变量__name__为’__main__’)
(5)知识点
a、包和模块不会被重复导入。
b、避免循环导入
p1.py

from p2 import p2
p1 = 1  
print(p2)

p2.py

# 执行p1是会导入p2,然后p2第一行又导入p1,循环导入报错
from p1 import p1
p2 = 2

c、Python在导入模块过程中会直接执行模块所以代码
2、模块内置变量
(1)查看Python内置变量

# 查看Python内置变量
a = 2
c = 3
d = 5

infos = dir()
print(infos)


(2)重要内置变量
a、__name__:文件名称
b、__package__:包名
c、__doc__:注释信息
d、__file__:系统中的物理路径
(3)入口文件和普通模块变量区别
a、__name__为__main__。

# 常用于判断那当前模块是否入口文件
if __name__ == '__main__':
	pass

b、__package__为NoneType(没有包)。
c、__file__为入口文件名称,不是系统中的物理路径。
d、将入口文件当做普通文件内置变量,在模块的上级包中执行python -m
包.模块.py。

(三)函数

1、基础语法

def funcname(args, lastargs='Geng'):
	pass
	
# 参数列表可以没有
# 在函数体中可以使用return关键字返回函数结果,如果没有return关键字,函数将返回None(空值)

2、函数的参数
(1)形式参数
  定义函数时参数列表中的参数。
a、必须参数:必须输入实参的形式参数,否则会报错(必须参数按顺序依次对实参取值)。
b、可变参数:定义时使用(*param),调用时可以直接传入多个实参用逗号隔开,或者组装成列表活元组使用(**list、**tuple序列解包),否则会组装成高维元组。

'''
以函数sumsqr()为例,演示可变参数定义、获取和调用时的主要事项
'''

def sumsqr(*param): # 定义时:*param
    sum = 0
    for i in param:  # 循环时用for
        sum += i*i
    print(sum)
    
# 调用1,多个实参用逗号隔开
sumsqr(1, 2, 3)  

# 调用2,列表或元组使用*
a = [1, 2, 3]  
sumsqr(*a)  

c、默认参数:在定义函数时,对形参进行赋值。
d、关键字可变参数:结合可变参数和默认参数定义时使用(**param),遍历时使用.items()方法,调用时可直接输入多个关键字参数用逗号隔开,或者组装成字典使用(**dict),否则会组装成高维字典。

'''
以函数city_temp()为例,演示关键字可变参数定义、获取和调用时的主要事项
'''

def city_temp(**param):  # 定义时:**param
    for key, value in param.items():  # 注意字典的遍历,获取时用itmes()方法,
        print(key, ':', value)

# 调用1,多个关键字实参用逗号隔开
city_temp(bj='32c', sh='12c')

# 调用2,字典使用**
data = {'bj':'32c', 'sh':'12c'}
city_temp(**data)

(2)实际参数
  在调用时输入的参数。
a、关键字参数:函数调用时,除按顺序依次输入实参外可以通过输入形参关键字进行赋值(增强代码可读性)。
(3)知识点:
a、参数裂表定义顺序为必须参数、默认参数、可变参数(不建议设置类型过于复杂的参数裂表)
b、调用时关键字参数不能和必须参数混淆

# name和age为必须参数,gender和school为默认参数,scholarships为可变参数

def print_student_file(name, age, gender='女', school='人民路小学', **scholarships):
    print('我叫' + name)
    print('我今年%d岁了'%(age))
    for year, infos in scholarships.items():
        print('我在%s年获得了%s'%(year, infos))
    print('我一共获得了%d次奖学金'%(len(scholarships)))
    print('我是%s生'%(gender))
    print('我在%s念书'%(school))

award = {'2019':'三等学业奖学金', '2020':'三等学业奖学金', '2021':'三等学业奖学金'}
print_student_file('耿天霸', 24,  school='西北大学', gender='男',**award)

3、函数的返回值(return)
(1)函数执行到return语句后,不会再执行函数体内return语句后面的代码。在函数体中可以使用return关键字返回函数结果,如果没有return关键字,函数将返回None(空值)。
(2)多个返回值(序列解包)
  序列解包指:使用变量接收函数的多个结果是,以元组的形式进行组合,可以通过下标进行访问,但Python推荐使用多个具有明显语义的变量对多个结果进行接收,增强代码的可阅读性(序列解包)。

def damage(skill1, skill2):
    damage1 = skill1 * 3
    damage2 = skill2 * 2 + 10

    return damage1, damage2  # 包含多个返回值时,用逗号分隔

# Python将多个返回结果组成元组,可以使用下标的方式进行索引,但是不推荐(语义不明确)
damages = damage(3, 6)
print(damages[0], damages[1])

# 推荐使用带有明显语义的变量进行存储
damage_skill1, damage_skill2 = damage(3, 6)
print(damage_skill1, damage_skill2) 

知识点:
(1)、查看Python内置函数
  Python命令行输入help(函数),输入import this,查看Python之禅。
(2)、函数的作用
a、功能性:实现某一通用功能,避免编写重复代码。
b、隐藏细节:实现可以很复杂,但调用必须简单。

(四)作用域 1、全局变量

  直接在模块中定义的变量。

2、局部变量

  Python局部变量指在函数中定义的变量,for循环和while等语句不能形成块级作用域。

3、作用域链

  局部变量只在函数内起作用,在函数外部无法引用,逐级寻找。

'''
理解作用域链
(1)该模块输出结果为3
(2)注释掉c=3后模块输出结果为2
(3)注释掉c=2后输出结果为1
'''
c = 1

def fun1():
    c = 2
    def func2():
        c = 3
        print(c)
    func2()

fun1()
4、global关键字

(1)概念
  将局部变量转换为全局变量。
(2)用法

'''
global关键字用法
'''

def demo():
    global c  # 先一行定义c,再赋值
    c = 10    

demo()
print(c)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/423621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号