vue.js做个人网站/网络营销的特点
目录
- 1.模块
- import 导入
- from...import 导入
- 2. 模块的搜索顺序
- 3. __name__属性的使用
- 4. 包
- 包的使用步骤
- 5. 发布模块
- 6. 安装模块
- 7. 卸载模块
- 8. pip 安装第三方模块
- 9. 异常处理
- 异常捕获
- 异常的传递
- 抛出 raise 异常
1.模块
模块是 Python 程序架构的一个核心概念
- 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块
- 模块名 同样也是一个 标识符,需要符合标识符的命名规则
- 在模块中定义的 全局变量 、函数、类 都是提供给外界直接使用的 工具
- 模块 就好比是 工具包,要想使用这个工具包中的工具,就需要先 导入 这个模块
import 导入
import 模块名 是 一次性 把模块中 所有工具全部导入,并且通过 模块名/别名 访问
import 模块名1
import 模块名2
注意:在导入模块时,每个导入应该独占一行
导入之后 通过 模块名.
使用 模块提供的工具 —— 全局变量、函数、类。
如果模块名字太长还可以使用as
指定模块的别名, 例如:
import 模块名1 as 模块别名
from…import 导入
如果希望 从某一个模块 中,导入 部分 工具,就可以使用 from … import 的方式
# 从 模块 导入 某一个工具
from 模块名1 import 工具名
导入之后
- 不需要 通过 模块名.调用
- 可以直接使用 模块提供的工具 —— 全局变量、函数、类
注意:
如果 两个模块,存在 同名的函数,那么 后导入模块的函数,会 覆盖掉先导入的函数;
开发时 import 代码应该统一写在 代码的顶部,更容易及时发现冲突,一旦发现冲突,可以使用 as 关键字 给其中一个工具起一个别名;
不建议使用from…import *的方式导入某个模块的所有内容,因为函数重名并没有任何的提示,出现问题不好排查。
使用示例:
假设现在有2个模块, 分别是:
lz_01_测试模块1.py
# 全局变量
title = "模块1"# 函数
def say_hello():print("我是 %s" % title)# 类
class Dog(object):pass
lz_02_测试模块2.py
# 全局变量
title = "模块2"# 函数
def say_hello():print("我是 %s" % title)# 类
class Cat(object):pass
(1) import导包的使用方式如下:
import lz_01_测试模块1
import lz_02_测试模块2lz_01_测试模块1.say_hello()
lz_02_测试模块2.say_hello()dog = lz_01_测试模块1.Dog()
print(dog)cat = lz_02_测试模块2.Cat()
print(cat)
(2) import as导包的使用方式如下:
import lz_01_测试模块1 as DogModule
import lz_02_测试模块2 as CatModuleDogModule.say_hello()
CatModule.say_hello()dog = DogModule.Dog()
print(dog)cat = CatModule.Cat()
print(cat)
(3) from…import导包的使用方式如下:
from lz_01_测试模块1 import Dog
from lz_02_测试模块2 import say_hello# 直接使用导入后的方法
say_hello()# 直接使用导入后的类
wangcai = Dog()
print(wangcai)
2. 模块的搜索顺序
Python 的解释器在 导入模块 时,会:
- 首先搜索 当前目录 指定模块名的文件,如果有就直接导入
- 如果没有,再搜索 系统目录
在开发时,给文件起名,不要和 系统的模块文件 重名;
Python 中每一个模块都有一个内置属性 file 可以 查看模块 的 完整路径, 例如:
print(DogModule.file), 输出结果:
/Users/chenyousheng/workspace/python/Learn/day01/lz_01_测试模块1.py
如下是一个导入系统random模块的用法
import random# 生成一个 0~10 的数字
rand = random.randint(0, 10)print(rand)
假设当前目录下,存在一个 random.py 的文件,程序就无法正常执行了!
因为, Python 的解释器会优先 加载当前目录 下的 random.py 而不会加载 系统的 random 模块
3. __name__属性的使用
首先明确下模块的导入原则:
- 一个 独立的 Python 文件 就是一个 模块
- 在导入文件时,文件中 所有没有任何缩进的代码 都会被执行一遍!
假设某个模块内定义了一些测试代码, 不想让别人导入的时候被执行了,只允许在当前文件中直接执行,那么就可以用到__name__属性了.
__name__
是 Python 的一个内置属性,记录着一个 字符串:
- 如果 是被其他文件导入的,
__name__
就是 模块名 - 如果 是当前执行的程序
__name__
是 main
例如: lz_xiaoming_模块.py定义如下:
# 输出当前执行模块的名字
# 如果直接执行模块,__main__
print("当前模块名字:%s" % __name__)def say_hello():print("这里是测试逻辑...")if __name__ == "__main__":# 文件被导入时,能够直接执行的代码不需要被执行!print("小明写的测试代码")say_hello()
直接运行该模块,输出结果如下:
当前模块名字:__main__
小明写的测试代码
这里是测试逻辑...
然后在 test.py中导入模块使用
import lz_xiaoming_模块print("-" * 50)
输出结果如下:
当前模块名字:lz_xiaoming_模块
--------------------------------------------------
可以看到, 导入后运行,输出的结果和直接执行的结果是不一样的.
4. 包
包 是一个 包含多个模块 的 特殊目录,目录下有一个 特殊的文件 init.py,包名的 命名方式和变量名一致,小写字母 + _,使用 import 包名 可以一次性导入 包 中 所有的模块
包的使用步骤
- 新建一个 lz_message 的 包
- 在目录下,新建两个文件 send_message.py 和 receive_message.py
- 在 send_message 文件中定义一个 send 函数
- 在 receive_message 文件中定义一个 receive 函数
- 创建__init__.py声明对外导出的模块列表
- 在外部直接导入 lz_message 的包使用
目录结构如下:
send_message.py和receive_message.py定义如下:
# send_message.py
def send(text):print("正在发送 %s..." % text)# receive_message.py def receive():return "这是来自 100xx 的短信"
__init__.py
定义如下:
from . import send_message
from . import receive_message
使用方式如下:
# 导入包
import lz_message# 使用 包名.模块名.调用模块的方法
lz_message.send_message.send("hello")
txt = lz_message.receive_message.receive()
print(txt)
输出结果:
正在发送 hello...
这是来自 100xx 的短信
5. 发布模块
如果希望自己开发的模块,分享 给其他人,可以按照以下步骤操作
以发布上面创建的lz_message包为例
(1) 创建 setup.py
首先需要在模块外创建setup.py文件,内容如下:
from distutils.core import setupsetup(name="lz_message", # 包名version="1.0", # 版本description="lz's 发送和接收消息模块", # 描述信息long_description="完整的发送和接收消息模块", # 完整描述信息author="mchenys", # 作者author_email="mchenys@gmail.com", # 作者邮箱url="lz.com", # 主页py_modules=["lz_message.send_message","lz_message.receive_message"])
有关字典参数的详细信息,可以参阅官方网站:
(2) 构建模块
在控制台中切换到setup文件同级目录,我这里是pycharm项目的根目录,控制台输入如下命令:
python3 setup.py build
执行结果如下:
成功后会在当前目录下生成build目录
(3) 生成发布压缩包
控制台执行如下命令:
python3 setup.py sdist
执行结果如下:
此时根目录下会生成一个dist目录,里面有一个lz_message-1.0.tar.gz的压缩包
6. 安装模块
当你从别人那里得到一个已发布的模块压缩包后,我们就可以安装到python的内置目录内, 以上面发布的lz_message-1.0.tar.gz为例, 安装步骤如下:
假设我已经把lz_message-1.0.tar.gz复制到了桌面,那么需要在控制台上切换到~/Desktop目录
tar -zxvf lz_message-1.0.tar.gzcd lz_message-1.0 sudo python3 setup.py install
执行结果如下:
可以看到安装的模块被导入到/opt/homebrew/lib/python3.9/site-packages目录内, 进入该目录也可以查看到新安装的模块
模块安装完后, 就可以直接在import来使用了.
7. 卸载模块
直接从安装目录下,把安装模块的 目录 删除就可以
cd /opt/homebrew/lib/python3.9/site-packages
sudo rm -r lz_message*
8. pip 安装第三方模块
pip 是一个通用的 Python 包管理工具,提供了对 Python 包的查找、下载、安装、卸载等功能
例如针对pygame 模块的安装和卸载命令如下:
# 将模块安装到 Python 2.x 环境
$ sudo pip install pygame
$ sudo pip uninstall pygame# 将模块安装到 Python 3.x 环境
$ sudo pip3 install pygame
$ sudo pip3 uninstall pygame
安装效果:
如果在mac上提示sudo: pip: command not found, 按如下步骤进行安装:
- curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
- sudo python get-pip.py
- sudo easy_install pip
安装后通过pip --version 可以查看版本及安装目录
9. 异常处理
程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常。
程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常。
异常捕获
(1) 基本语法
如果 对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来捕获异常, 语法格式如下:
try:尝试执行的代码
except:出现错误的处理
用法示例:
try:# 提示用户输入一个数字num = int(input("请输入数字:"))
except:print("请输入正确的数字")
(2) 错误类型捕获
在程序执行时,可能会遇到 不同类型的异常,并且需要 针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了,语法如下:
try:# 尝试执行的代码pass
except 错误类型1:# 针对错误类型1,对应的代码处理pass
except (错误类型2, 错误类型3):# 针对错误类型2 和 3,对应的代码处理pass
except Exception as result:print("未知错误 %s" % result)
用法示例:
try:num = int(input("请输入整数:"))result = 8 / numprint(result)
except ValueError:print("请输入正确的整数")
except ZeroDivisionError:print("除 0 错误")
(3) 捕获未知错误
在开发时,要预判到所有可能出现的错误,还是有一定难度的,如果希望程序 无论出现任何错误,都不会因为 Python 解释器 抛出异常而被终止,可以再增加一个 except, 例如:
except Exception as result:print("未知错误 %s" % result)
(4) 异常捕获完整语法
在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:
try:# 尝试执行的代码pass
except 错误类型1:# 针对错误类型1,对应的代码处理pass
except 错误类型2:# 针对错误类型2,对应的代码处理pass
except (错误类型3, 错误类型4):# 针对错误类型3 和 4,对应的代码处理pass
except Exception as result:# 打印错误信息print(result)
else:# 没有异常才会执行的代码pass
finally:# 无论是否有异常,都会执行的代码print("无论是否有异常,都会执行的代码")
- else 只有在没有异常时才会执行的代码
- finally 无论是否有异常,都会执行的代码
用法示例:
try:num = int(input("请输入整数:"))result = 8 / numprint(result)
except ValueError:print("请输入正确的整数")
except ZeroDivisionError:print("除 0 错误")
except Exception as result:print("未知错误 %s" % result)
else:print("正常执行")
finally:print("执行完成,但是不保证正确")
异常的传递
- 异常的传递 —— 当 函数/方法 执行 出现异常,会 将异常传递 给 函数/方法 的 调用一方
- 如果 传递到主程序,仍然 没有异常处理,程序才会被终止
def demo1():return int(input("请输入一个整数:"))def demo2():return demo1()try:print(demo2())
except ValueError:print("请输入正确的整数")
except Exception as result:print("未知错误 %s" % result)
输出结果:
请输入一个整数:aaa
请输入正确的整数
抛出 raise 异常
在开发中,除了 代码执行出错 Python 解释器会 抛出 异常之外,还可以根据 应用程序 特有的业务需求 主动抛出异常。
Python 中提供了一个 Exception 异常类,在开发时,如果满足 特定业务需求时,希望抛出异常,可以这样处理:
- 创建 一个 Exception 的 对象
- 使用 raise 关键字 抛出 异常对象
用法示例:
def input_password():# 1. 提示用户输入密码pwd = input("请输入密码:")# 2. 判断密码长度,如果长度 >= 8,返回用户输入的密码if len(pwd) >= 8:return pwd# 3. 密码长度不够,需要抛出异常# 使用异常的错误信息字符串作为参数raise Exception("密码长度不够")try:user_pwd = input_password()print(user_pwd)
except Exception as result:print("发现错误:%s" % result)
输出结果:
请输入密码:aaa
发现错误:密码长度不够
可以看到捕获的异常结果就是抛出异常的字符串内容。
相关文章:

模块、包和异常
目录1.模块import 导入from...import 导入2. 模块的搜索顺序3. __name__属性的使用4. 包包的使用步骤5. 发布模块6. 安装模块7. 卸载模块8. pip 安装第三方模块9. 异常处理异常捕获异常的传递抛出 raise 异常1.模块 模块是 Python 程序架构的一个核心概念 每一个以扩展名 py …...

RocketMQ控制台的安装与启动
RocketMQ控制台的安装与启动下载修改配置开放端口号重启防火墙添加依赖编译 rocketmq-dashboard运行 rocketmq-dashboard本地访问rocketmq无法发送消息失败问题。connect to <公网ip:10911> failed下载 下载地址 修改配置 修改其src/main/resources中…...

pytorch安装的超级详细教程(没有之一)
一、发展历程 (简单介绍) (15年)caffe --> (16年)tensorflow1.x --> (17年)keras --> (18年)Tensorflow2.x --> (19年)pytorch。 面向gihub开源项目编程。 向下支持比较好,各个版本之间支持比较好,兼容性强。 版本…...

leetcode两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…...

断点调试(debug)
目录 F8案例 编辑 debug过程中报错 编辑用debug查看方法源码 一层一层查看 Arrays.sort()方法 F9 DebugExercise 介绍:断点调试是指在程序的某一行设置一个断电,调试时,程序运行到这一行就会停住,然后可以一步步往下调试…...

Vuex 状态管理
文章目录Vuex概述安装单向数据流Vuex核心概念StatemapState 辅助函数扩展运算符GettermapGetters 辅助函数Mutation提交载荷提交载荷对象对象风格提交使用常量替代mutation事件类型Action异步分发Module命名空间Vuex 概述 Vuex 是一个状态管理库,用于管理 Vue.js …...

射频功率放大器在辉光放电特征及风速测量原理中的应用
实验名称:辉光放电特征及风速测量原理研究方向:辉光放电测试设备:信号发生器、ATA-8202射频功率放大器,热成像仪、万用表、等离子体传感器实验过程:在等离子体形成条件和流场响应机制的基础上,可以明确影响…...

keepalived+nginx 双机热备搭建
keepalivednginx 双机热备搭建一、准备工作1.1 准备两台centos7.91.2 nginx 与 keepalived软件 双机安装1.3 ip分配1.4 修改主机名1.5 关闭selinux(双机执行)1.6 修改hosts(双机执行)二、安装keepalived2.1 执行一下命令安装keepa…...

零基础如何入门学习Python?
阶段一:Python开发基础 Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法、数据类型、字符编码、文件操作、函数、装饰器、迭代器、内置方法、常用模块等。 阶段二:Python高级编程和数据库开发 Python全栈开发与人…...

认识CSS之基础选择器
🌟所属专栏:前端只因变凤凰之路🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该系列将持续更新前端的相关学习笔记,欢迎和我一样的小白订阅,一起学习共同进步~👉文章简…...

JavaScript面试题整理汇总
1、面试官:说说JavaScript中的数据类型?存储上的差别?在JavaScript中,我们可以分成两种类型:基本类型和复杂类型。两种类型的区别是:存储位置不同基本类型主要为以下6种:NumberStringBooleanUnd…...

科普| 什么是云原生?
“新冠疫情从根本上改变了商业模式,工作流向在线迁移的速度比以往任何时候都要快。越来越多的公司和消费者依靠电子商务“ B2B”和B2C”,以及网上银行促进创新以满足日益增长的客户需求,云原生技术在其中发挥重要作用,同时也加速了…...

Spring Boot 3.0系列【9】核心特性篇之依赖管理
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言依赖管理1. dependencyManagement、parent2. spring-boot-starter-parent3. spring-boot-dependencies4. 实际开发中的…...

每日算法题
目录 第一题 第二题 第一题 题目描述 小蓝要为一条街的住户制作门牌号。 这条街一共有 20202020 位住户,门牌号从 11 到 20202020 编号。 小蓝制作门牌的方法是先制作 00 到 99 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌…...

xss靶场绕过
目录 第一关 原理 payload 第二关 原理 payload 第三关 原理 payload 第四关 原理 payload 第五关 原理 payload 第六关 原理 payload 第七关 原理 payload 第八关 原理 payload 第九关 原理 payload 第十关 原理 payload 第十一关 原理 payl…...

【数据结构】核心数据结构之二叉堆的原理及实现
1.大顶堆和小顶堆原理 什么是堆 堆(Heap)是计算机科学中一类特殊的数据结构,通常是一个可以被看作一颗完全二叉树的数组对象。 完全二叉树 只有最下面两层节点的度可以小于2,并且最下层的叶节点集中在靠左连续的边界 只允许最后…...

Spring Cloud Alibaba+saas企业架构技术选型+架构全景业务图 + 架构典型部署方案
基于Spring Cloud Alibaba 分布式微服务高并发数据平台化(中台)思想多租户saas设计的企业开发架构,支持源码二次开发、支持其他业务系统集成、集中式应用权限管理、支持拓展其他任意子项目。 一、架构技术选型 核心框架 Spring Boot SOA Spring Cloud …...

RocketMQ-03
1. 高级功能 1.1 消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储。 消息生成者发送消息MQ收到消息,将消息进行持久化,在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者,然后等待消费者返回A…...

大神教你在 Linux 中查看你的时区
在这篇短文中,我们将向你简单介绍几种 Linux 下查看系统时区的简单方法。在 Linux 机器中,尤其是生产服务器上的时间管理技能,是在系统管理中一个极其重要的方面。Linux 包含多种可用的时间管理工具,比如 date 或 timedatectlcomm…...

Redis持久化策略
Redis有两种持久化方式:快照(snapshotting,或者叫Redis DataBase,RDB)和只追加文件(append-only,AOF)。两种方式可以单独使用,也可以同时使用。 1.RDB模式 RDB:将某时刻所有数据都写入到硬盘里,存储为.rdb快照文件,新的快照文件生成之后会替换旧的快照文件。用户可以将…...

显著性检验【t-test、方差分析、ks检验】
显著性检验【t-test、方差分析、ks检验】 0、目录 1显著性检验基本定义(what?) 2.使用显著性检验的意义(why? ) 3.显著性检验的具体操作流程(how? ) 1、显著性检验基本定义 统计假设检验…...

访问学者在德国访学生活衣食住行攻略
德国因其优质的教育水平、高价值的学制、低廉的访学成本,逐渐成为访学领域的宠儿。对于初次来到德国生活的访问学者,一定不是很熟悉德国的真实生活情况。今天51访学网小编就给大家介绍德国访学学衣食住行,希望可以帮助到即将出国的你。 一、…...

SQL-刷题技巧-删除重复记录
一. 原题呈现 牛客 SQL236. 删除emp_no重复的记录,只保留最小的id对应的记录。 描述: 删除emp_no重复的记录,只保留最小的id对应的记录。 drop table if exists titles_test; CREATE TABLE titles_test (id int(11) not null primary key…...

基于JSP的虚拟账号交易平台
技术:Java、JSP等摘要:随着网络游戏以及各种平台的出现与更新,虚拟账号交易平台正逐渐成为电商的新增长点。当今社会,互联网发发展飞速,游戏产业也渐渐兴起,随之虚拟游戏账号的交易量逐渐增多,但…...

LeetCode201_201. 数字范围按位与
LeetCode201_201. 数字范围按位与 一、描述 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输…...

一款好的风险管理软件可以做什么
风险管理软件哪个好?使用Zoho Projects易于使用的项目风险管理软件,最大限度地减少收入损失并快速调整您的投资组合,保护您的项目投资。Zoho Projects的高级风险管理软件可在您最需要的时候安全的保护您的业务。使用Zoho Projects强大的风险管…...

html2canvas使用文档
一、安装 Install NPM npm install --save html2canvasInstall Yarn yarn add html2canvas二、引入 import html2canvas from html2canvas;三、使用 以 vue 举例,这样写起来比较方便 <div ref"picture"><h4>Hello world!</h4> &l…...

HTML DOM 改变 CSS
HTML DOM 允许 JavaScript 改变 HTML 元素的样式。改变 HTML 样式如需改变 HTML 元素的样式,请使用这个语法:document.getElementById(id).style.propertynew style 下面的例子会改变 <p> 元素的样式:实例<html><body><…...

基于EB工具的TC3xx_MCAL配置开发01_WDG模块配置介绍
目录 1.概述2. WDG 配置2.1 General部分配置2.2 WdgSettingsConfig配置2.2.1 配置概述2.2.2 CPU WDG具体配置2.3 WdgDemEventParameterRefs3. WDG配置注意事项1.概述 本篇开始我们基于EB Tresos工具对英飞凌TC3xx系列MCU的MCAL开发进行介绍,结合项目经验对各MCAL外设的开发及…...

Activty启动到显示的过程[二]
Activity的显示从handleResumeActivity()方法开始。 //ActivityThread.javaOverridepublic void handleResumeActivity(IBinder token, boolean finalStateRequest, boolean isForward,String reason) {final ActivityClientRecord r performResumeActivity(token, finalStat…...