Python笔记2(函数参数、面向对象、装饰器、高级函数、捕获异常、dir)
Python笔记1.1
1、字符串日期转换
# 字符串转换为日期
dt_date = datetime.datetime.strptime(ymd, "%Y%m%d")
# 日期转换为字符串
date = dt_date.strftime("%Y-%m-%d")
# 昨天
(datetime.datetime.strptime(date, "%Y%m%d") - datetime.timedelta(1)).strftime("%Y%m%d")
2、argparse
命令行选项、参数和子命令解析器
3、sys模块
提供了一系列有关Python运行环境的变量和函数
- sys.argv:实现从程序外部向程序传递参数,可以用sys.argv获取当前正在执行的命令行参数的参数列表(list)。
- sys.path:返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
4、overwrite
dataframe写入的一种模式,dataframe写入的模式一共有4种
def mode(saveMode: String): DataFrameWriter = {
this.mode = saveMode.toLowerCase match {
case "overwrite" => SaveMode.Overwrite // 覆盖已经存在的文件
case "append" => SaveMode.Append // 向存在的文件追加
case "ignore" => SaveMode.Ignore // 如果文件已存在,则忽略保存操作
case "error" | "default" => SaveMode.ErrorIfExists // 如果文件存在,则报错
case _ => throw new IllegalArgumentException(s"Unknown save mode: $saveMode. " +
"Accepted modes are 'overwrite', 'append', 'ignore', 'error'.")
}
this
}
5、eval
用来执行一个字符串表达式,并返回表达式的值
eval(expression[, globals[, locals]])
参数
- expression – 表达式。
- globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
还可以进行字符串与list、tuple、dict的转化
6、json.dumps()和json.loads()
json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)
- json.dumps():Python 字典类型转换为 JSON 对象
- json.loads():将 JSON 对象转换为 Python 字典
7、os.system(cmd)
使用os.system(cmd)即可在python中使用linux命令
8、if __name__ == ‘__main__’:的作用
一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == ‘main’: 的作用就是控制这两种情况执行代码的过程,在 if __name__ == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。
9、zfill
返回指定长度的字符串,原字符串右对齐,前面填充0
10、如果不够两位,前位补0
# 如果不够两位,前位补0
conf = "qzk"
date = "20220606"
h = 6
h1 = 16
s1 = f"{conf}/{date}/{h:0>2d}"
s2 = f"{conf}/{date}/{h1:0>2d}"
print(s1)
print(s2)
# 输出
qzk/20220606/06
qzk/20220606/16
11、Python 直接赋值、浅拷贝和深度拷贝解析
- 直接赋值:其实就是对象的引用(别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
字典浅/深拷贝实例
>>> a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})
解析
1、b = a: 赋值引用,a 和 b 都指向同一个对象。
2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
3、b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
12、endswith()
作用:判断字符串是否以指定字符或子字符串结尾,常用于判断文件类型
相关函数:判断字符串开头 startswith()
函数说明语法:
string.endswith(str, beg=[0,end=len(string)])
string[beg:end].endswith(str)
参数说明:
- string: 被检测的字符串
- str: 指定的字符或者子字符串(可以使用元组,会逐一匹配)
- beg: 设置字符串检测的起始位置(可选,从左数起)
- end: 设置字符串检测的结束位置(可选,从左数起)
如果存在参数 beg 和 end,则在指定范围内检查,否则在整个字符串中检查
返回值:
如果检测到字符串,则返回True,否则返回False。
解析:如果字符串string是以str结束,则返回True,否则返回False
注:会认为空字符为真