python学习笔记(四)

脚本
python是一种脚本语言

脚本和程序:
脚本与一般程序的主要区别在于是否编译。相对于程序而言,脚本更加随性。写完了脚本,直接就可以在某种具有解释功能的环境中运行。
非脚本语言(c,java)需要通过编译和链接等步骤,生成可执行文件,通过可执行文件在计算机上运行

python安装和环境设置

安装的anaconda和python3.8

运行和修改python脚本

与用户输入交互

name=input ("enter your name:")
print("hello there,{}!".format(name.title()))

提示用户输入姓名,在问候语中使用该输入。

num=int(input("enter an integer"))
print("hello"*num)

生成消息test
在这里插入图片描述

代码

处理异常
python由两种类型的错误:语法错误和异常。
如果没有使用正确的语法,并且python不知道如何运行代码,就会发生语法错误。如果python在执行代码时遇到意外情形,会发生异常。

常见异常:
ValueError:向内置操作或函数中传入类型正确但是值不合适的对象作为输入
AssertionError:断言语句失败了
IndexError:序列下标超出了范围
KeyError:在字典中找不到某个键
TypeError:向操作或函数中传入类型不受支持的对象作为输入

处理错误
Try语句:
可以使用try语句处理异常,
try:这是try语句中唯一必需子句。该块中的代码是python在try语句中首先运行的代码
except:如果python在运行try块时遇到异常,它将跳到处理该异常的except块。
else:如果python在运行try块时没有遇到异常,它将在运行try块后运行该块中代码
finally:在python离开此try语句之前,在任何情形下它都将运行此finally块中的代码,即使要结束程序。

指定异常
可以指定要再except块中处理哪个错误

tryexcept ValueError:

则会捕获valueerror异常,但是不会捕获其他异常。
如果希望该程序处理多种异常,则可以再except后面添加异常元组:

try:

except(ValueError,KeyboardInterrupt):

或者分开
tryexcept ValuError:

except KeyboardInterrupt:

示例:
在这里插入图片描述
运行结果
在这里插入图片描述

访问错误消息(相当于手动断点)
在处理异常时,访问其错误消息:

try:

except ZeroDicisionError as e:
	print("ZeroDivisionError occurred:{}".format(e))

输出:
ZeroDivisionError occurred:division by zero

以然可以访问错误消息,辑视已经处理异常来防止程序崩溃

如果没有要处理的具体错误,依然可以访问消息:

tryexcept Exception as e:
	print("Exception occurred:{}".format(e))

Exception是所有内置异常的基础类。

读写文件
读取文件

f=open('my_path/my_file.txt','r')
file_data=f.read()
f.close()

首先使用内置函数open打开文件。需要文件路径字符串。open函数会返回文件对象,它是一个python对象,python通过该对象与文件本身交互。上面例子中,将此对象赋值给变量f

可以在open函数中指定可选参数。参数之一是打开文件时采用的模式。
在此示例中,使用r(只读模式) 这是模式参数的默认值(默认值是只读)

使用read访问文件对象的内容。该read方法会接受文件中包含的文本并放如字符串中。在此示例中,将该方法返回的字符串赋值给变量file_data

处理完文件后,使用close方法释放该文件占用的系统资源

写入文件

f=open('my_path/my_file.txt','w')
f.write("hello,there")
f.close()

以写入‘w’模式打开文件。如果文件不存在,python将创建一个文件。以写入模式打开现有文件,该文件中之前包含的所有内容将被删除 向现有文件添加内容,但是不删除其中的内容,可以使用附加(’a’)模式,而不是写入模式

使用write方法向文件中添加文本

关闭文件

With
python提供了一个特殊的语法,该语法会在使用完文件后自动关闭该文件

with open'my_path/my_file.txt','r') as f:
	file_data=f.read()

with关键字能够打开文件,对文件执行操作,并在缩进代码执行之后自动关闭文件。

(练习题,关注)

导入本地,标准库和第三方模块
如果处理的是大型项目,需要将代码整理成多个文件并重复利用这些文件中的代码,则到二u脚本很有用。
如果要导入的python脚本与当前脚本位于同一个目录下,只需要输入import,然后是文件名,无需扩展名.py

每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,python就把这个目录当成普通目录而不是一个包。
__init__.py可以是空文件,也可以又python代码,因为__init__.py本身就是一个模块,模块名是包名

多级目录,组成多级层次的包结构
在自己创建模块时要注意命名,不能和python自带的模块名称冲突

使用模块
以sys模块为例,编写一个hello模块

#!/user/bin/env python3
# -*- coding:utf-8 -*-

'a test module'

__author__='xie'

import sys

def test():
	args=sys.argv
	if len(args)==1:
		print('hello,world')
	elif len(args)==2:
		print('hello,%s!'%args[1])
	else:
		print('too many arguments')

if __name__=='__main__'
	test()

第一行和第二行是标准注释,第一行注释可以让这个hello.py文件直接在unix/linux/mac上运行,第二行注释表示.py文件本身使用标准UTF-8编码
第四行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释
第六行使用__author__变量把作者写进去
前六行是python模块的标准文件模板,也可以全部删掉不写
代码部分:
首先导入sys模块,导入模块后,就有了变量sys指向该模块,利用sys这个变量,就可以访问sys模块的所有功能
sys模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该.py文件的名称:
运行 python hello.py 获得的sys.argv就是[‘hello.py’]
运行 python hello.py Michael 获得的sys.argv就是[‘hello.py’,‘Michael’]

import useful_functions

import语句在写python脚本的顶部,每个导入语句各占一行。
import语句会创建一个模块对象,叫做useful_functions。模块是包含定义和语句的python文件。要访问导入模块中的对象,需要使用点记法

import useful_functions
useful_functiona,add_five([1,2,3,4])

可以为导入模块添加别名,使用不同的名称引用它

import useful_functions as uf
uf.add_five([1,2,3,4])

使用if main块
为了避免运行从其他脚本中作为模块导入的脚本中的可执行语句,(python解释器把一个特殊变量__name__置为__main__,如果在其他地方导入该hello模块时,if判断将失败,因此,if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试)
将这些行包含在if __name__=="__main__"块中。
或者,将它们包含在函数main()中并在if main块中调用该函数

当运行此类脚本时,python实际上会为所有模块设置一个特殊的内置变量__name__。当运行脚本时,python会将此模块识别为主程序,并将此模块的__name__变量设为字符串"__main__"
对于该脚本中导入的任何模块,这个内置__name__变量会设为该模块的名称。
条件if __name__=="__main__"会检查该模块是否为主程序

demo.py
在这里插入图片描述
useful_functions.py
在这里插入图片描述

运行结果

在这里插入图片描述

作用域
在一个模块中,可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用,可以通过_前缀来实现
正常的函数和变量名是公开的,可以被直接引用
类似__xxx__这样的变量是特殊变量,可以直接被引用,但是有特殊用途
类似_xxx和__xxx这样的函数或变量是非公开的,不应该被直接引用
非公开函数和变量不应该被直接引用,而不是不能被直接引用,是因为python 并没有一种方法可以完全限制访问非公开函数或变量,但是从变成习惯上不应该引用非公开(private)函数或变量。

关于标准库

datetime 当前时间和日期
zipfile 从zip文件中提取所有文件
time 现实代码的运行时间
csv 对于读取csv文件来说非常便利
collections 常见数据类型的实用扩展,包括OrderedDict,defaultdict和namedtuple
random 生成假随机数字,随机打乱序列并选择随机项
string 关于字符串的更多函数。此模块还包括使用的字母集合,例如string。digits(包含所有字符都是有效数字的字符串)
re 通过正则表达式在字符串中进行模式匹配
math 一些标准的数学函数
os 与操作系统交互
os.path os的子模块,用于操纵路径名称
sys 直接用于python解释器
json 适用于读写json文件(面向网络开发)

导入模块技巧
还有一些在不同情形下很有用的其他形式的import语句
1 要从模块中导入单个函数或类:

from module_name import object_name

2 要从模块中导入多个单个对象:

from module_name import first_object,second_object

3 要重命名模块:

import module_name as new_name

4 要从模块中导入对象并重命名:

from module_name import object_name as new_name

5 使用模块中的所有对象

import module_name

模块、软件包和名称
Standard标准库中的模块被拆分成了子模块并包含在软件包中。软件包是一个包含子模块的模块。子模块使用普通的点记法指定

import package_name.submodule_name

第三方库
使用pip安装第三方库。pip是在python3中包含的软件包管理器。它是标准python软件包管理器,但并不是唯一的管理器。另一个热门的管理器是anaconda,该管理器专门针对数据科学

要使用pip安装包,在命令行中输入"pip install"然后是软件包名称
会下载并安装该软件包,以便导入程序中。安装完毕后,可以使用从标准库中导入模块时用到的相同语法导入第三方软件包

使用requirements.txt文件
大型python程序可能依赖于十几个第三方软件包。为了更轻松的分享这些程序,程序员经常会在叫做requirements.txt的文件中列出项目的依赖项

beautifusoup4==4.5.1
bs4==0.0.1
pytz==2016.7
requests==2.11.1

该文件的每行包含软件包名称和版本号。版本号是可选项,但是通常都会包含。不同版本的库之间可能变化不大,可能截然不同,因此有必要使用程序作者在写程序时用到的库版本。

可以使用pip一次性安装项目的所有依赖项

pip install -r requirements.txt

一些实用的第三方软件包
IPython——更好的交互式python解释器
request——提供易于使用的方法来发出网络请求,适用于访问网络API
Flask——一个小型跨甲,用于构建网络应用和API
Django——一个功能更丰富的网络应用构建框架。Django尤其适合设计复杂、内容丰富的网络应用
Beautiful Soup——用于解析HTML并从中提取信息。事和网页数据抽取
pytest——拓展了python的内置断言,并且是最具单元性的模块
PyYMAL——用于读写YAML文件
NumPy——用于使python进行科学计算的最基本软件包。它包含一个强大的N维数组对象和实用的线性代数功能
pandas——包含高性能、数据结果和数据分析工具的库,pandas提供dataframe
matplotlib——二维绘制库,会生成达到发布标准的高品质图片,并且采用更重硬拷贝格式和交互式环境
ggplot——另一种二位绘制库,基于R’s ggplot2库
Pillow——python图片库可以python解释器添加图片处理功能
pyglet——专门面向游戏开发的跨平台应用框架
Pyganme——用于编写游戏的一系列python模块
pytz——python的世界时区定义

在解释器中进行实验
在终端里输入python启动python交互式解释器

在解释器中,提示符窗口中最后一行的值将自动输出。如果有多行代码需要输出值,以然需要使用print

定义函数时,需要自己添加缩进

解释器的不足之处是修改代码比较麻烦,如果在输入该函数时出现了拼写错误,或者忘记缩进函数的主体部分,无法使用鼠标将光标点到要点击的位置。需要使用箭头键在代码行中来回移动

可以引用在解释器中之前定义的任何对象

退出python交互式解释器,使用命令exit()/linux or mac按ctrl+D/windows按ctrl+Z,然后按下enter键

函数:
input()函数获取用户输入的任何内容并将其存储为字符串
eval() 将用户的输入解析为python表达式

readline()读取文件读取一行

append() 返回列表
.strip()删掉换行符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值