列表推导式
i在my_list遍历,每一个做i*2,输出列表
nn_list = [i*2 for i in my_list]
print(nn_list)
结果:[2, 4, 6]
if
语句是一个判断,其中 i
也是前面循环产生的迭代变量。
nn_list = [i*2 for i in my_list if i>1] #若i>1成立进行遍历
print(nn_list)
for循环嵌套
nn_list = [(x,y) for x in range(3) for y in range(3) ]
print(nn_list)
#结果:[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
字典推导式
{键:值 for 迭代变量 in 可迭代对象 [if 条件表达式]}
可迭代对象
再次查看推导式语法结构中,涉及了一个关键字,叫做 可迭代对象,因为我们可以把自己目前掌握的所有可迭代对象,
都进行一下尝试,例如使用 range()
函数。
三元表达式
age = 20
cn = "成年" if age >= 18 else "未成年"
print(cn) #成年 if条件成立输出cn
cn = "成年", "大于18" if age >= 18 else "未成年"
print(cn) #代码返回一个元组,内容为 ('成年', '大于18') ,这里一定注意不要使用分号 ; ,否则只返回第一个语句的结果。
三元表达式与 lambda
声明一个函数,返回较大值
def max(a, b):
if a > b:
ret = a
else:
ret = b
return ret
r = max(5, 6)
print(r)
同
max = lambda a, b: a if a > b else b
r = max(10, 15)
print(r)
不常见
断言
Python 断言,即 Python assert 语句,简单理解就是简易版的 if 语句,用于判断某个表达式的值,结果为 True,程序运行,否则,程序停止运行,抛出 AssertionError
错误。
assert+表达式 形同
if not 表达式:
raise AssertionError
- assertEqual(a,b,msg=msg):判断两个值是否相等;
- assertNotEqual(a,b,msg=msg):上一函数的反义;
- self.assertTrue(a,msg=none):判断变量是否为 True;
- assertFalse(a,msg=none):同上反义;
- assertIsNone(obj=‘’):判断 obj 是否为空;
- assertIsNotNone(obj=‘’):同上反义;
with-as
with 表达式 [as 指定一个变量名]:
代码块
代码块
with as 的使用方法
异常捕获预处理
try:
可能会出错的代码
except 异常对象:
处理异常代码
num1 = 20
num2 = 0
try:
num3 = num1 / num2
except ZeroDivisionError:
print("除数不可以为 0 ")
此时程序不会报错,当发现除数为 0 会进入异常处理,直接输出除数不能为 0。
try 表示测试代码部分是否存在异常,except 表示捕获异常,前提是出现异常。如果 try 语句中没有任何错误,except 中的代码不会执行。
还有一点需要注意,在 except 后面是异常对象,该异常对象我们设置为 ZeroDivisionError 这是因为已经知道是会出现这个异常,如果在编码过程中不知道会出现哪种异常,依旧会出现错误。
try … except … else 语句
num1 = 20
num2 = 1
try:
num3 = num1 / num2
except ZeroDivisionError:
print("除数不可以为 0 ")
except TypeError:
print("除数类型不对")
else:
print("无异常,会被执行")
在 try … except 语句后面可以增加一个 else 语句,当出现异常的时候执行 except 语句中的代码,当无异常执行 else 语句代码
常见异常类型
AttributeError 某个对象没有属性
Exception 通用型异常对象
FileNotFoundError 找不到文件
IOError 输入输出异常
IndexError 索引异常
KeyError 键异常
NameError 对象名称异常
SyntaxError 语法错误
TypeError 类型错误
ValueError 值错误
捕捉多个异常
try:
可能出错的代码块
except 异常对象1:
异常处理代码块
except 异常对象2:
异常处理代码块
一个 except 捕获多个异常
try:
可能出错的代码块
except (异常对象1,异常对象2...):
异常处理代码块
finally语句
try:
可能出错的代码块
except:
代码出错执行的代码块
else:
代码正常执行的代码块
finally:
无论代码是否有异常出现都会执行的的代码块
lambda函数
lambda [参数列表]:表达式
例:
fun = lambda x:x+1 #对
x
进行 x+1
操作print(fun(1))
lambda 关键字后面,冒号前面是参数列表,参数数量可以从 0 到任意个数。多个参数用逗号分隔,冒号右边是 lambda 表达式的返回值。
my_list = [(1, 2), (3, 1), (4, 0), (11, 4)]
my_list.sort(key=lambda x: x[1])
print(my_list)
my_list
变量调用 sort
函数,参数 key
赋值了一个 lambda 表达式,
该式子表示依据列表中每个元素的第二项进行排序。
文件
.
没错,就是一个点,表示的是当前文件夹;..
两个点表示的是上一层文件夹
os 模块
获取当前 Python 文件的目录
getcwd 方法可以获取当前 Python 文件所在的工作目录,就是当前文件在那个文件夹中,获取到的是绝对地址 os.getcwd()
绝对路径:abspath
方法需要一个参数 path
,即一个路径,基于该路径在返回绝对路径。例如通过该代码返回 demo4.py
文件的绝对路径
import os
ret = os.path.abspath("demo4.py")
print(ret)
路径检查方法
检查路径主要是为了检查文件或者文件夹是否存在,或者判断一个路径对应的是一个文件夹还是一个文件。
- exists(path) 如果 path 文件或文件夹存在返回 True,否则返回 False;
- isabs(path) path 是绝对路径返回 True,否则返回 False;
- isdir(path) path 是文件夹返回 True,否则你懂;
- isfile(path) path 是文件返回 True。
目录操作
以下几个方法在 os 模块中,执行如下操作建议先通过 os.path.exists
判断目录是否存在。
- mkdir(path) 创建目录;
- rmdir(path) 删除目录;
- chdir(path) 切换当前工作目录到 path;
- remove(path) 删除文件,注意如果 path 是一个目录,删除会报错,权限不足,删除目录请使用
rmdir
。
获取指定目录下面的所有内容
通过 os.listdir
方法可以获取指定目录下的所有内容,包括文件与文件夹。
import os
print(os.listdir("."))
Python 读取文件
# 文件地址,注意提前在当前目录新建一个 test.txt 文件
file = "test.txt"
# 打开文件
f = open(file, encoding="utf-8")
# 读取文件全部内容
read_str = f.read()
# 关闭文件
f.close() print(read_str)
逐行读取文件内容
# 文件名 file = "test.txt" # 打开文件 f = open(file, encoding="utf-8") # 循环逐行读取 for line in f: print(line) # 关闭文件 f.close()
逐行读取方式 readlines
# 文件名
file = "test.txt"
# 打开文件
f = open(file, encoding="utf-8")
# 逐行读取
data = f.readlines()
# 关闭文件
f.close() print(data)
with 上下文
with open(待打开文件) as 文件对象:
文件操作代码块
file = "test.txt"
# 打开文件
with open(file,encoding="utf-8") as f:
# 读取文件全部内容
read_str = f.read()
print(read_str)
写入文件
open 函数,2 个参数,第一个是操作的文件,第二个是文件的编码 encoding
,在补充一个文件打开模式 mode
参数,open 函数中该参数的默认值是 r
,代码写作 open("text.txt",mode="r",encoding="utf-8")
表示以只读的方式打开文件,如果想要向文件中写入内容,需要将 mode
参数设置为 w
。
写入:文件对象.write(待写入内容)
# 文件地址,注意提前在当前目录新建一个 test.txt 文件
file = "test.txt"
# 打开文件
with open(file, mode="w", encoding="utf-8") as f:
# 写入文件内容
f.write("我是即将被写入的内容")
文件复制
使用该模块中 shutil 对象的 copy 方法可以对文件进行复制操作。
shutil.copy(旧文件,新文件)
目录复制
import shutil
# 第一个参数是旧目录,第二个参数是新目录
shutil.copytree("../1","a4")
解析命令行参数
argparse 是 Python 内置的一个用于命令项选项与参数解析的模块;
add_argument(‘-f’, ‘–foo’) # 可选参数
add_argument(‘foo’) # 位置参数
action #该action关键字参数指定的命令行参数应该如何处理
action = ‘store’ # 默认操作仅存储参数的值,可以不写
action = ‘store_const’ # 将存储由const关键字参数指定的值
action = ‘store_true’ # 这些是’store_const’分别存储值True和False的情况下使用
action = ‘store_false’
action = ‘append’ # 存储一个列表,并将命令行的每个参数值附加到列表中
action = ‘append_const’ # 存储一个列表,并将const关键字参数指定的值附加到列表中,可用于多个参数需要将常量存储到同一列表,const默认参数为None
action = ‘count’ # 计算关键字参数出现的次数
action = ‘extend’ # 存储一个列表,并将每个参数值添加到列表中
nargs : 将单个命令行参数与要执行的单个操作相关联,并收集到一个列表中
nargs = N(一个整数) # nargs=2,命令行python test.py --foo a b 将a,b收集到一个列表中
nargs = ? # 表示从命令行使用一个参数,作为选项参数的值,如果命令行指定了参数的值则使用(python test.py --foo xx),如果不存在命令行参数(python test.py),使用default默认值,如果存在可选项参数(python test.py --foo),但是没有指定参数值,会使用const的值。
nargs = * # 存在的所有命令行参数都收集到一个列表中
nargs = + # 跟*用法一样,都会收集到一个列表中,但是如果没有命令行参数则会报错
default #指定默认值
type # 指定类型 int float等
choices # 指定某些命令行参数应从一组受限制的值中选择,如果参数不是可接受的值一直,则报错
required=True # 指定参数值为必填
help #帮助信息说明
import argparse
# 创建解析对象,并添加描述信息
parser = argparse.ArgumentParser(description = "输出数字2倍数")
# 添加命令行参数“num",还有该参数的帮助信息,参数类型
parser.add_argument("num", help="2*num a given number", type = int)
# 进行解析
args = parser.parse_args()
# 实现功能
print(args.square*2)
操作系统
文件和文件夹相关:
os.remove(path) 删除指定的文件
os.rename(src,dest) 重命名文件或目录
os.stat(path) 返回文件的所有属性
os.listdir(path) 返回path目录下的文件和目录列表
os.mkdir(path) 创建目录
os.makedirs(path1/path2/path3/…) 创建多级目录
os.rmdir(path) 删除目录
os.removedirs(path1/path2/path3/…) 删除多级目录路径相关函数:
os.path.isabs(path) 判断path是否是绝对路径
os.path.isdir(path) 判断path是否为目录
os.path.isfile(path) 判断path是否为文件
os.path.exists(path) 判断指定路径的文件是否存在
os.path.getsize(filename) 返回文件大小
os.path.abspath(path) 返回绝对路径
platform模块也是系统内置模块,给我们提供了很多方法去获取操作系统的信息
import platform
platform.platform() #获取操作系统名称及版本号,
platform.version() #获取操作系统版本号,
platform.architecture() #获取操作系统的位数
platform.machine() #计算机类型,
platform.node() #计算机的网络名称,
platform.processor() #计算机处理器信息,
platform.uname() #包含上面所有的信息汇总