Shawn's Blog

一个伪程序员的伪技术博客

文章中的代码仅在Python3中测试成功,没有在Python2中测试。

0X00 指定编码

每个文本文件都是以某一编码格式保存的,如果解码格式和文本格式不同就会出现乱码,在Python中可以简单的控制用什么编码来打开文件以读写文件。使用open打开文件的时候指定一个encoding参数就可以使用其他而非默认编码打开文件了。这里用到了一个打开文件的方式是with open() as f:这样,这样做的话在这个with下面的代码块中可以直接调用f这个文件对象,并且执行到with代码块之外的时候会自动关闭文件,不需要再手动关闭文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python
# coding=utf-8


if __name__ == '__main__':

# 使用utf-8编码,写模式,打开文件D:/test.txt
with open('D:/test.txt', 'w', encoding='utf-8') as f:
f.write('你好,世界') # 写一行汉子

# 使用utf-8编码,读模式,打开文件D:/test.txt
with open('D:/test.txt', 'r', encoding='utf-8') as f:
print(f.read()) # 因为是编码相同所以可以正常读出文字

# 使用latin-1编码,读模式,打开文件D:/test.txt
with open('D:/test.txt', 'r', encoding='latin-1') as f:
print(f.read()) # 因为使用的编码格式不同,所以会出现乱码
阅读全文 »

文章中的代码仅在Python3中测试成功,没有在Python2中测试。

0X00 任意个参数

Python中一般定义函数是这样的def add(a, b),参数的个数是固定的,那么怎么才可以接收任意多个参数就像rm 1.txt 2.jpg 3.mp3 4.cpp这样?很简单,使用***就可以。下面代码里第一个参数a接收到了hello,world*b则接收到了其余所有的参数,将其作为一个元组。

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python
# coding=utf-8


def add(a, *b):
print(a)
return b


if __name__ == '__main__':
x = add('hello,world', 2, 3, 4, 5)
print(x)
阅读全文 »

文章中的代码仅在Python3中测试成功,没有在Python2中测试。

0X00 split升级

字符串有一个split方法,可以用某个字符或字符串把源字符串切开。但是存在一个弊端,切割位置是固定的,不能灵活切割。有这样一个需求,将这个字符串hello 1 wrld 2 python 3 linux切割开,以每个数字为分隔符。这样标准的str.split就不能完成任务了。但是在re模块中有一个re.split可以完成这任务。这个方法的分隔符不是使用准确不变的字符/串而是使用正则表达式。

1
2
3
4
5
6
7
8
9
#!/usr/bin/python
# coding=utf-8

import re

if __name__ == '__main__':
my_str = 'hello 1 wrld 2 python 3 linux'
res = re.split('[0-9]', my_str)
print(res)

这里使用的正则表达式就是普通的字符串形式,而不需要re.compile进行编译。有了这个方法就可以更加灵活地切割字符串了。

阅读全文 »

文章中的代码仅在Python3中测试成功,没有在Python2中测试。

0X00 *表达式

从某个可迭代对象中分解出N个元素,但是这个可迭代的对象可能会超过N,会出现too many values to unpack异常。

比如我这儿有N个统计信息,因为第一次和最后一次的信息不准确需要删除掉,而将中间的信息保留下来,那么就可以这么弄。

1
2
3
4
5
6
7
#!/usr/bin/python
# coding=utf-8

if __name__ == '__main__':
grade = [23, 45, 42, 45, 78, 98, 89, 97, 69, 77, 88, 50, 65, 99, 98]
first, *new_grade, last = grade
print(new_grade)

这里的赋值就是将第一个和最后一个赋给了first和last,而中间的给了new_grade

阅读全文 »

0X00 实例方法

Python中的实例方法是在面向对象编程中用到的最多的方法类型了。 实例方法 从字面理解就可以,就是说这个方法是属于实例的。每次实例化一个对象出来,这个对象都会拥有这个方法。从下面代码中就可以看得出来,这里我定义了一个实例方法’get_name()’,定义实例方法不需要任何特殊的修饰符。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/python
# coding=utf-8

class Student:
def __init__(self):
self.name = None

# 一个实例方法
def get_name(self):
return self.name

if __name__ == '__main__':
a = Student()
a.name = '小明'
print a.get_name()
b = Student()
b.name = '小红'
print b.get_name()

从运行结果可以看出来,针对每一个实例,调用实例方法的输出是不同的,也就可以证明这个方法是属于某个实例的。

1
2
小明
小红
阅读全文 »
0%