2019.5.11,补充day03没学完的知识:
文件操作之文件修改:
1 # Author:K 2 3 file_path = r"D:\PycharmProjects\python learning\day03\test_file" 4 file_new_path = r"D:\PycharmProjects\python learning\day03\test__new_file" 5 6 file = open(file_path,'r',encoding = 'utf-8') 7 file_new = open(file_new_path,'w',encoding = 'utf-8') 8 9 for line in file: 10 if "只要心中藏有春天" in line: 11 line = line.replace("只要心中藏有春天","只要心中藏有理想") # 修改文件,修改字符串后重新写入一个新的文件 12 file_new.write(line) 13 14 file.close() 15 file_new.close() 16 17 # 通过传参数修改文件 ----------------为什么这个不行? 18 import sys 19 20 file = open(file_path,'r',encoding = 'utf-8') 21 file_new = open(file_new_path,'w',encoding = 'utf-8') 22 23 find_file = sys.argv[1] 24 replace_file = sys.argv[2] 25 26 for line in file: 27 if find_file in line: 28 line = line.replace(find_file,replace_file) 29 file_new.write(line) 30 31 file.close() 32 file_new.close()
编码与解码:
encode() 与 decode():
encode(encoding = "XXX") 编码成XXX
decode(encoding = "XXX") 用XXX来解码字节其中函数中的 encoding 可以不写
1 # Author:K 2 ''' 3 总结: 4 encode(encoding = "XXX") 编码成XXX 5 decode(encoding = "XXX") 用XXX来解码字节 6 其中函数中的 encoding 可以不写 7 ''' 8 9 10 import sys 11 print(sys.getdefaultencoding()) #打印默认编码 12 13 str = "你好" # str是unicode编码,不管系统默认读取这个py文件的编码是什么。 14 15 str_to_utf8 = str.encode("utf-8") 16 print("utf-8:",str_to_utf8) 17 18 test = str_to_utf8.decode("utf-8").encode("gbk") 19 print("test:",test) 20 21 str_to_gb2312 = str.encode("gb2312") #编码成gb2312 22 print("gb2312:",str_to_gb2312) 23 24 decode_gb2312 = str_to_gb2312.decode("gb2312") #用gb2312来解码(PS:用什么编码用什么解码!) 25 print("str:",decode_gb2312) 26 27 28 str_to_utf8 = str.encode() #与上述语句一样,这证明了系统默认是utf-8 29 print("系统默认:",str_to_utf8) 30 31 str_to_gbk = str.encode("gbk") #编码成gbk 32 print("gbk:",str_to_gbk) 33 34 gbk_to_str = str_to_gbk.decode("gbk") #gbk编码转成字符串 用gbk来解码字节 35 print("str:",gbk_to_str) 36 37 gbk_to_utf8 = str_to_gbk.decode("gbk").encode("utf-8") #gbk转成utf-8 38 print("utf-8:",gbk_to_utf8)
函数:
函数的作用:(1)减少重复代码 (2)保持数据的一致性 (3)可扩展
函数的返回值:
(1)什么都不写,返回None
(2)返回值的个数是一个,则返回这个对象object
(3)返回值的个数是多个,则返回一个元祖tuple
作用:想要得到函数的结果
def func(x,y)
位置参数调用 func(1,2) 与形参一一对应
关键字参数调用,func(x = 1,y = 2) 与形参顺序无关
在调用的时候两种调用方式若混合使用的话关键字参数必须得在位置参数后面,不过一般不会这样使用。
def func(x,y = 2)
默认参数,调用时:func(1) 自动会给y赋值2而不会报错
作用:默认参数非必须传递
def func(*args)
print(*args) #得到实参的值
print(args) #得到元祖
print(args[0]) --> 打印1
多个实参传递,用下标形式取出来
func(1,2,3,4,5,6)
def func_convert_to_dic(**kwargs):
# print(**kwargs) 这样写回报错
print(*kwargs) #取出实参传递的key
print(*kwargs["name"]) #取出key为“name”的值,每个字符之间以空格隔开
print(kwargs)
func_convert_to_dic(name = "zhangsan",age = 10,sex = 'M')
*args 与 **kwargs 比较:
*args 是位置参数的传递
**kwargs 是关键字参数的传递
局部变量和全局变量:
局部变量:在函数中定义的变量
全局变量:在“第一级”写的变两个为全局变量
递归函数:函数调用自身的函数
(1)必须要有递归出口(即有结束条件)
(2)问题规模必须比上一层函数少
1 # Author:K 2 ''' 3 函数的作用:(1)减少重复代码 (2)保持数据的一致性 (3)可扩展 4 5 函数的返回值: 6 (1)什么都不写,返回None 7 (2)返回值的个数是一个,则返回这个对象object 8 (3)返回值的个数是多个,则返回一个元祖tuple 9 作用:想要得到函数的结果 10 11 def func(x,y) 12 位置参数调用 func(1,2) 与形参一一对应 13 关键字参数调用,func(x = 1,y = 2) 与形参顺序无关 14 在调用的时候两种调用方式若混合使用的话关键字参数必须得在位置参数后面,不过一般不会这样使用。 15 16 def func(x,y = 2) 17 默认参数,调用时:func(1) 自动会给y赋值2而不会报错 18 作用:默认参数非必须传递 19 20 def func(*args) 21 print(*args) #得到实参的值 22 print(args) #得到元祖 23 print(args[0]) --> 打印1 24 多个实参传递,用下标形式取出来 25 func(1,2,3,4,5,6) 26 27 def func_convert_to_dic(**kwargs): 28 # print(**kwargs) 这样写回报错 29 print(*kwargs) #取出实参传递的key 30 print(*kwargs["name"]) #取出key为“name”的值,每个字符之间以空格隔开 31 print(kwargs) 32 func_convert_to_dic(name = "zhangsan",age = 10,sex = 'M') 33 34 *args 与 **kwargs 比较: 35 *args 是位置参数的传递 36 **kwargs 是关键字参数的传递 37 38 局部变量和全局变量: 39 局部变量:在函数中定义的变量 40 全局变量:在“第一级”写的变两个为全局变量 41 42 递归函数:函数调用自身的函数 43 (1)必须要有递归出口(即有结束条件) 44 (2)问题规模必须比上一层函数少 45 46 47 ''' 48 49 import time 50 51 def write_demo(content): 52 file_path = r"D:\PycharmProjects\python learning\day03\test_file" 53 with open(file_path,'a',encoding='utf-8') as f: 54 time_format = "%Y-%m-%d %X" #打印时间的格式 55 f.write("\n{0} {1}".format(time.strftime(time_format),content)) 56 57 write_demo("添加的内容".center(20,'-')) 58 59 def return_rst_None(): 60 pass 61 62 def return_rst_one(): 63 return 1 64 65 def return_rst_more(): 66 return 1,"string",["list"],{"key":"value"} 67 68 print(return_rst_None()) 69 print(return_rst_one()) 70 print(return_rst_more()) 71 72 def func(x,y): 73 print(x) 74 print(y) 75 76 func(1,2) #与形参一一对应 77 func(y = 2,x = 1) #与形参顺序无关 78 79 def func_more_argument(*args): 80 print(*args) #得到实参的值 81 print(args) #得到元祖 82 83 func_more_argument(1,2,3,4,5,6) 84 85 def func_convert_to_dic(**kwargs): 86 # print(**kwargs) 这样写回报错 87 print(*kwargs) #取出实参传递的key 88 print(*kwargs["name"]) #取出key为“name”的值,每个字符之间以空格隔开 89 print(kwargs) 90 91 func_convert_to_dic(name = "zhangsan",age = 10,sex = 'M') 92 93 # 全局变量 & 全局变量 94 name = "黄文锲" 95 age = "23" 96 def test_argument(name): 97 # global age # 若需要改全局变量,要在前面加 global 关键字,!!!!!不建议使用!!!!! 98 age = 24 # 不提前声明 global ,即使在函数改了,在函数外也不会改变这个值 99 print("before:",name,age) 100 name = "hwq" # 当前函数内的name的作用域就在这个函数中 --> 局部变量 101 print("after:",name,age) 102 103 test_argument(name) 104 print(name,age) 105 106 #字符串、数字改了也不发生变化。 107 string = "string" 108 109 def test_modify1(string): 110 string = "STRING" 111 print(string) 112 113 test_modify1(string) 114 print(string) 115 116 #列表,字典,类改了会发生变化 117 names = ["zhangsan","lisi","wangwu"] 118 119 def test_modify2(): 120 print("Before:",names[0]) 121 names[0] = "ZHANGSAN" 122 print("After:",names[0]) 123 124 test_modify2() 125 print(names[0]) 126 127 # 函数递归调用 128 def fibonacci(n): 129 if n == 0 or n == 1: 130 return n 131 else: 132 return fibonacci(n-1) + fibonacci(n-2) 133 134 for i in range(1,10): 135 print(fibonacci(i),end = ' ')
作业:
需求:
1、查
输入:www.oldboy.org
获取当前backend下的所有记录
2、新建
输入:
arg = {
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
}
3、删除
输入:
arg = {
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
}