Python一些常用的方法技巧

基于python3

列表元素操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 插入元素
a.insert(位置,'值')
a.insert(0,'hello')

# 删除元素
>>> a = ['f', 'a', 'b', 'c', 'g', 'd', 'z']
>>> del a[0] # 永久删除
>>> a
['a', 'b', 'c', 'g', 'd', 'z']

# pop()可删除列表末尾的元素,相当于弹出栈顶元素
# pop(位置)可删除指定位置的元素
>>> a
['a', 'b', 'c', 'g', 'd', 'z']
>>> ap = a.pop(1)
>>> ap
'b'
>>> a
['a', 'c', 'g', 'd', 'z']

# 根据值删除元素
>>> a
['a', 'c', 'g', 'd', 'z']
>>> a.remove('g')
# remove()只删除第一个指定的值,如果要删除的值可能在列表中出现多次,那么就要循环判断是否删除了所有这样的值
>>> a
['a', 'c', 'd', 'z']

# 组织列表
# sort()永久性修改列表元素的排序
>>> a = ['f','a','b','c','g','d','z']
>>> a.sort()
>>> a
['a', 'b', 'c', 'd', 'f', 'g', 'z']

# sorted()对列表进行临时排序
>>> a = ['f','a','b','c','g','d','z']
>>> print(sorted(a))
['a', 'b', 'c', 'd', 'f', 'g', 'z']

# 反序排列reverse()
# 并不是字母倒叙排列,而是按照原来元素的排列顺序
>>> a
['f', 'a', 'b', 'c', 'g', 'd', 'z']
>>> a.reverse()
>>> a
['z', 'd', 'g', 'c', 'b', 'a', 'f']

# 确定列表的长度(从1开始的,不用考虑差1)
>>> a
['z', 'd', 'g', 'c', 'b', 'a', 'f']
>>> len(a)
7
1
2
3
4
# 创建数值列表:range()
for value in range(1,5):
print(value)
# 这里产生1-4的值

函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 禁止函数修改列表
# 利用切片表示法[:]创建列表的副本
function_name(list_name[:])
# 这种函数所修改的不会影响到列表list_name


# 传递任意数量的实参
function_name(*tuple)
# 形参名 *tuple 中的星号让python创建一个tuple的空元组
# 并将收到的所有值都封装到这个元组中。
# 例如
>>> def fu(*tuples):
... print("this is start:")
... for tuple in tuples:
... print('-' + tuple)
...
>>> fu('I')
this is start:
-I
>>> fu('like','you')
this is start:
-like
-you

# 传递任意数量的关键字实参
>>> def build_profile(first, last, **user_info):
... profile = {}
... profile['first_name'] = first
... profile['last_name'] = last
... for key,value in user_info.items():
... profile[key] = value
... return profile
...
>>> user_profile = build_profile('albert', 'einstein',location='princeton',filed='physics')
>>> print(user_profile)
{'location': 'princeton', 'first_name': 'albert', 'last_name': 'einstein', 'filed': 'physics'}

####################################################
# 如果一个.py文件只有函数,就构成了模块:
# example.py
def exfun():
print("hello!")

# demo.py:
import examples
examples.exfun()

# 输出为:
>>> hello!


# 导入特定的函数:
from module_name import function_name
# 使用分号导入任意数量的函数
from module_name import function_name1, function_name2


# 使用as给函数指定别名:
from module_name import function_name as fn

# 使用as给模块指定别名:
import module_name as mn

# 导入模块所有函数:
from module_name import *

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# python3 创建类
class ClassName():
--snip--

# python2.7 创建类
class ClassName(object):
--snip--

# python3 继承
class ClassName(object):
--snip--
class ClassName2(ClassName):
--snip--

# 例如:
class Car():

def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0

def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()

def increment_odometer(self, miles):
self.odometer_reading += miles


class ElectricCar(Car):
"""电动汽车独特之处"""

def __init__(self, make, model, year):
"""初始化父类属性"""
super().__init__(make, model, year)

my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())


# python2.7 继承
class ClassName():
--snip--
class ClassName2(ClassName):
--snip--

# python2.7 super()需要两个实参:子类名和对象self。
class ElectricCar(Car):
"""电动汽车独特之处"""

def __init__(self, make, model, year):
"""初始化父类属性"""
super(ElectricCar, self).__init__(make, model, year)

# 导入类的方法和导入函数的方法类似

文件和异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Linux 和 OS X中文件路径使用斜杠(/)
# 例如
with open('text_file / filename.txt') as file_object:
# 在Windows中使用反斜杠(\)
# 例如
with open('text_file \ filename.txt') as file_object:

# 写入空文件
filename = 'programing.txt'

with open(filename, 'w') as file_object:
file_object.write("I love programing.") # write()不会再写入的文本末尾加换行符

# 'w'写入模式 'r'只读模式 'r+'读写 'a'附加模式
# 以'w'打开文件时,如果指定的问价已经存在,python将在返回文件对象前清空该文件
# 写入多行需要在行后加入换行符'\n'还可偶一使用空格制表符空行来设置输出的格式
# 如果以附加模式('a')打开文件,python不会在返回文件对象前清空文件,而写入到文件的行都讲添加到文件末尾。如果指定的文件不存在,python将会创建一个空白文件。


# 异常
# 使用try-except代码块
try:
print(5/0)
except ZeroDivisionError:
print('you can not divide by zero!')
# 这时就不会出现traceback 输出为"you can not divide by zero!"

# try-except-else
# python尝试执行try代码块中的代码;只有可能引发异常的代码才需要放在try语句中,
# 有时候一些仅在try代码块成功执行时才需要运行的代码;这些代码应放在else代码块中。
# except代码块告诉python如果它尝试执行try代码块中的代码时引发了指定异常,该怎么办.


# 用json保存和读取用户生成的数据
# demo1.py
import json
username = input("what is your name?")
filename = 'username.json'
with open(filename, 'w') as f_obj:
json.dump(username, f_obj)
print("we'll remember you when you come back , " + username + "!")

# demo2.py
import json
filename = 'username.json'
with open(filename) as fn:
username = json.load(fn)
print("welcome back," + username + "!")

# 或者用FileNotFoundError异常处理
import json
filename = 'username.json'
try:
with open(filename) as fn:
username = json.load(fn)
except FileNotFoundError:
username = input("what is your name?")
with open(filename, 'w') as fn:
json.dump(username, f_obj)
print("we'll remember you when you come back , " + username + "!")
else:
print("welcome back," + username + "!")
Buy me a coffe. XD