day6(Alex python)

版权声明:本文为博主原创文章,转载请注明作者和出处。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}

猜你喜欢

转载自blog.csdn.net/xq920831/article/details/82178555