PYTHON DAY3-DAY4

python3 的字符串分为两种
原则:
字符以什么格式编译的,就要以什么格式解码

PS:
python3中的字符串分为两种:
x='egon' 存成unicode
y=x.encode('utf-8') 存成bytes

python2中字符串也分为两种
x=u'egon' 与python3的字符串一样
y='alex'与python3的bytes一样

字符串:
字符串前加r代表原生字符串,r'c:\txt',其中\会被当做普通字符串
with opne(r'%s' %sys.argv[1],'rb') as read_f

read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

 

readlines
把文件里的所有内容都读到一个列表中,使用for循环可以将内容全部读出,但这种方式是有问题的,把文件的所有内容一次都读到内存里了,如果文件非常大,直接撑爆内存。

读文件可以直接以以下这种方式:
with open('a.txt','r',encoding='utf-8') as f:
for line in f:
print(line,end='')


seek 以文件开头作为参照物移动,以bytes为单位移动
f=open('a.txt','r',encoding='utf-8')
print(f.read(3))
f.seek(6)
print(f.tell())
# f.seek(6,0) 0模式,以文件开头为参照物,f.seek(6,1) 1模式,以光标的当前位置作为参照物,2模式是以文件末尾做参照物,但1,2模式只能在b模式才能运行 光标向右移动六个字节

tail命令原理:

#python3 tail.py -f access.log
import time
import sys
with open(r'%s' %sys.argv[2],'rb') as f:
f.seek(0,2)
while True:
line = f.readline()
if line:
print(line.decode('gbk'),end='')
print(f.tell())
else:
time.sleep(0.2)

函数:
无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印
有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求大值最小值
空函数:设计代码结构
def bar():
pass

def select(sql):
'''select function'''
pass

def insert(sql):
'''insert function'''
pass

def update(sql):
'''update function'''
pass

def delete(sql)
'''delete function'''
pass


大前提:return的返回值并没有类型限制
1、函数中没有return:返回None,等同于return None
2、return 一个值:返回该值
3、return val1,val2,val3:返回以元组(val1,val2,val3)


函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
1

 

空函数
如果想定义一个什么事也不做的空函数,可以用pass语句:
def nop():
pass
pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

pass还可以用在其他语句里,比如:

if age >= 18:
pass
缺少了pass,代码运行就会有语法错误。


很多初学者很疑惑,默认参数是[],但是函数似乎每次都“记住了”上次添加了'END'后的list。

原因解释如下:

Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

所以,定义默认参数要牢记一点:默认参数必须指向不变对象!

要修改上面的例子,我们可以用None这个不变对象来实现:

def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
现在,无论调用多少次,都不会有问题:

>>> add_end()
['END']
>>> add_end()
['END']

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

python按行读取文件去掉换行符方法:
for line in file.readlines():
line=line.strip('\n')

for循环:遍历列表, 打印索引和元素

#遍历列表, 打印索引和元素
names = ['Tom', 'Jerry', 'Marry']
for index, name in enumerate(names):
print('names[{}] = {}'.format(index, name))
打印结果:
names[0] = Tom
names[1] = Jerry
names[2] = Marry


python读取文件同时输出行号和内容
python文件
with open('file.txt','r',encoding='utf-8') as f:
for (num,value) in enumerate(f):
print "line number",num,"is:",value
输出结果:
line number 0 is: Hello, world.
line number 1 is: I'm a simple text file.
line number 2 is: Read me !


获取格式化的时间
你可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime():
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
localtime = time.asctime( time.localtime(time.time()) )
print "本地时间为 :", localtime
以上实例输出结果:
本地时间为 : Thu Apr 7 10:05:21 2016

posted @ 2017-07-28 11:00  DBKEEPER  阅读(138)  评论(0编辑  收藏  举报