版权声明:本文为博主原创文章,转载请注明作者和出处。https://blog.csdn.net/xq920831/article/details/82178555
在开始记录之前,先利用文件操作写一个简单的修改文件的代码。
这里以周杰伦的四面楚歌的歌词为例,将一段歌词保存为txt文件。
目的新建文件读取歌词,并将‘男人’改为‘Agent Xu’,下面附上代码:
# -*- coding:utf-8 -*-
# Author: Agent Xu
f = open('file1.txt','r')
ff = open('file1.bak','w')
for line in f:
if '我只知道好像认真的男人最美丽'in line:
line = line.replace('我只知道好像认真的男人最美丽','我只知道好像认真的Agent Xu最美丽')
ff.write(line)
f.close()
ff.close()
得到的结果如下图:
完成!
好了,回归正题。
今天主要学习了with的用法、编码解码、函数基本内容。
1. with用法
为了避免打开文件后忘了关闭,可以通过with来管理上下文。
with open('file1.txt','r') as f:
而且可以支持多个文件的打开
with open('file1.txt','r') as f, open('file2.txt','w') as f2:
为了开发规范建议每一行不超过80个字符,可以分行写:
with open('file1.txt','r') as f ,\
open('file2.txt','w') as f2:
2. 编码与解码
这部分教程很多,python2默认编码为ASCII码,python3默认编码为utf-8。
可以用下面的语句打印查看系统编码:
import sys
print(sys.getdefaultencoding())
#utf-8
需要注意的是:在不同环境下需要对程序进行编码转换。这就需要对程序进行解码再编码的操作。
对于python2来说可以进行如下操作:
s = '你好'
s1 = s.decode('utf-8').encode('gbk')
3. 函数
def 函数名(参数):
同文件调用直接:函数名(参数)
跨文件调用(同目录下的其他文件)先声明:import 函数文件.函数名,以后再调用。
这里给一个日志时间的函数做例子:
import time
def logger():
time_format = '%Y-%m-%d %X'
time_current = time.strftime(time_format)
with open('file1.txt','a+') as f:
f.write('%s logger: \n' %time_current)
def logger_file():
logger()
print('success write logger.')
logger_file()
logger_file()
定义两个函数:logger函数为日志时间函数;logger_file为声明函数(执行成功)。
file1文件添加内容:
函数返回值:return ......
在有需要返回函数值的情况下,在函数定义的结尾加上return (需要返回的值)即可。
return也作为函数的结束点,函数不执行写在return后面的语句。(注:不写return,则系统返回None)
return总结:返回值=0个时,返回None;
返回值=1个时,返回object;
返回值>1个时,返回tuple。
4. 函数的参数
函数的参数分为:形参,实参。
# -*- coding:utf-8 -*-
# Author: Agent Xu
def test(x,y,z): #x,y,z为位置参数
print(x)
print(y)
print(z)
test(1,2,3) #实参 和参数位置一一对应
test(1,y=4,z=2) #形参和实参混合(注:形参不能在实参前面)(关键字参数不能在位置参数前面)
test(y=2,z=5,x=1)#形参(关键字参数)
test(x=1,y=6,z=3)#形参可以变换位置(以形参对应而不是位置对应)
默认参数:设置默认值,在调用函数的时候,默认参数为非必须传参。
def test(x, y=2,z):
这里就是把y设置了一个默认参数.
5. 参数组
在实际参数不固定的情况下可以这么来更改形参:
- *args:接受N个位置参数,转换成元组的形式。
def test1(*args):
print(args)
test1(1,2,3,4,5,6)
#(1, 2, 3, 4, 5, 6)
test1(*[1,2,3,4])
#(1, 2, 3, 4)
会被当做一个元组传进函数。也可以两者结合:def test(x, *args):
- **kwargs
# **kwargs:把N个关键字参数转换成字典的形式
def test2(**kwargs):
print(kwargs)
print(kwargs['name']) #查看具体内容
test2(name='agent xu',age=20,weight='60kg')
#{'name': 'agent xu', 'weight': '60kg', 'age': 20}
#agent xu
test2(**{'name':'agent xu','age':20})
#{'name': 'agent xu', 'age': 20}
#agent xu
注:参数组和其他参数混用时,参数组必须放在最后面。
例如: def test(x ,y ,age=20 ,**kwargs ):
给一个混合的完整例子:
def test3(x,name='agent xu',**kwargs):
print(x)
print(name)
print(kwargs)
test3(1,age=20,name='xu',sex='M')
#1
#xu
#{'sex': 'M', 'age': 20}