python学习日记--入门!

本博客内容大多来自Eric Matthes的《Python编程 从入门到实践》袁国忠译本,感谢原作者以及译者的辛苦劳作,这是非常好的一本python入门书籍。

内容


字符串

数字

注释

列表

列表操作

元组

if

字典

输入

While循环

函数

 类

文件

异常

代码重构

测试代码



字符串

1:单引号与双引号都可以表示字符串,因此可以在字符串内出现引号。

2:title()函数可以将首写字母变成大写,如将name = bob通过name.title()变为Bob。

3:upper()与lower()函数转换大小写,用法与上一样。

4:合并使用+

5:添加空白使用\t  \n  \n\t 等。

6:删除空白:strip() lstrip() rstrip(),此操作是临时操作,如果想永久删除需要写入原来变量。如name = name.rstrip()。

7:变量名慎用l与大写字母O,有可能被看作1和0。尽量使用小写的变量名。


数字

1:+-*/  乘方:**

2:数字转化为字符串:str(number)

3:python2中整数除法不能除尽时直接删除小数部分,而不是四舍五入,例如3/2=1。为了避免这种情况可以使用3.0/2或者3/2.0以及3.0/2.0,结果都为1.5。python3中则是3/2=1.5


注释

1:#注释掉该行

2:多行注释用三个单引号 ''' 或者三个双引号 """ 将注释括起来如

'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号 
这是多行注释,用三个单引号
'''

列表

1:[]表示列表,索引从0开始。访问最后一个元素下标为-1。

2:修改某元素指定索引与对应的新值即可。

3:添加元素:列尾append(新元素)  中间插入用insert(下标,元素值),该位置原有元素向右移。

4:删除元素:del +列表名[元素索引]。

5:删除元素:pop() 刪除列表末尾的元素。或者pop(下标)。pop是临时操作,二del是永久删除。

6:删除元素:知道元素具体的值,可以使用remove(元素值),此方法只删除第一个(如果包含多个)。

7:排序:sort()和sort(reverse=True)对列表进行永久性排序。sorted(列表名)进行临时性排序,同时也可以传递参数reverse=True进行反向排序。reverse()将列表反转,永久性改变。

8:len(列表名):获取列表长度。

9:不能对空列表提取最后一个元素。


列表操作

1:遍历列表使用循环

2:range()函数生成一些列数字,需要注意的是range()到达指定的第二个值后停止。如

for value in range(1,5)
    print(value)

    得到结果是1,2,3,4

    range(2,5,2)得到的是2,4。其中2表示步长。

3:可以利用list()将range()结果转换为列表。如numbers = list(range(1,3))。

4:对于数字列表可以使用min(列表名)、max和sum进行一些简单的统计操作。

5:列表解析,可以将for循环和创建新元素的代码合为一行。如:

squares = [value**2 for value in range(1,4)]
print(squares)

      得到的结果为[1,4,9,16]

6:切片:处理列表中部分元素。列表名[下标:下标],注意列表的开始下标为0。[:下标]表示从头开始提取,同理[下标:]表示终止于末尾。[-3:]提取最后三个元素。这里可以看出负数在列表中表示距离末尾相应距离的元素,可以参考-1表示最后一个元素。

7:复制列表可以使用[:],这里的语法与MATLAB有些相似。但是不能直接利用list_new = list_old 的方式进行复制,这样list_new将指向list_old对应的内容,对其做的操作相当于对old进行操作,只能使用list_new = list_old[:]。这里跟指针的思想很相似。


元组

1:元组用(a,b,...)定义,与列表相比,元组一经定义就不可以更改,只能访问。

2:my_tuple = (1,2),如果使用my_tuple[0] = 3这个操作是错误的,只能重新定义元组,如my_tuple = (2,4),这时my_tuple就是一个新的元组了。


if

1:判断是否包含在列表使用 in 和not in。

2:注意if后面语句结束要有冒号:。

3:else if在Python中的形式为if-elif-else。

4:有时可以使用elif代替else这样使代码更为清晰。


字典

1:表示方法:字典名= {键:值,   键:值...},调用方法为 字典名[键]。键名一般用引号''括起来,这也比较好理解,不加引号则显示无定义,用""也可以,有意思的是打印出来仍为''。

    空字典:{}

2:添加键-值对:直接定义键名然后调用对其赋值,字典名[新键]=新值。

3:修改:字典可以通过调用直接赋值修改。

4:删除:del 字典名[键],相应的键-值对被删除。

5:由类似对象组成的字典,对于较长的字典可以这样定义

favorite_languages = {
    'Alice':'Python',
    'Bob':'C',
    'Candy':'ruby',
    }

6:遍历字典:.items()

遍历所有键-值对,其中key, value可以是任何变量名,如常用的k, v

favorite_languages = {
    'Alice':'Python',
    'Bob':'C',
    'Candy':'ruby',
    }
for key,value in favorite_languages.items():
    print(key)

遍历所有键:.keys(),下面两个等价。实际上.keys()返回的是一个列表,可以对其进行其他操作,如查询等。

for key in favorite_languages.keys():
for key in favorite_languages:

7:按照顺序遍历所有的键,前面的遍历方法获取顺序不可测,测试发现一般跟定义时顺序一样。因为字典关心的是键与值的对应关系,如果想按照一定的顺序遍历字典,可以使用sorted().

for key in sorted(favorite_languages.keys()):

8:遍历所有的值:.values()。  当含有重复相同的值时,可以通过set()来获取独一无二的值

for value in set(favorite_languages.values()):

9:嵌套:可以在列表中嵌套字典,字典中嵌套列表或者字典中嵌套字典。

    字典列表:如班级名单,每个同学又有各自属性。

    字典中嵌套列表

    字典中嵌套字典:如用户的名单,每个用户包括他的姓氏,名字,住址等。


输入

1:input()输入  括号内是用户提示信息。  输入的是字符串,可以用int()转换得到数字。


While循环

1:可以使用break、continue

2:删除特定值的所有列表元素,while '  '  in  '  ' :


函数

1:形参与实参

2:位置实参、关键字实参默认值

3:返回值 return

4:可以传递列表,如果不想改变列表,则需传递副本即  列表名[:]

5:传递任意实数实参:  *参数名 生成的是一个元组    **参数名  生成一个字典。

6:模块:即.py文件,可以使用import调用。  使用调用模块函数时需要: 模块名.函数名

   调用特定函数: from file_name import  function_name1,function_name2,这时使用函数不再需要声明模块名。

   还可以使用as 给函数制定别名, from file_name import function_name  as  function_new_name

   同样还可以使用as给别的模块指定别名,import module_name as new_name

   导入所有函数: from module_name inport *

7: 一些注意事项

    形参制定默认值时等号两边不要留空号,同样调用时也不要留空号。

    函数注释应该紧跟定义之后。


 类

Python中一般首写字母大写的为类。

1:创建和使用: class 类名():  相关函数如 _init_(self, 属性名...):      访问直接用 .  可以访问属性和函数。

2:python2.7创建类是,需要在括号类包括object,即class ClassName(object):

3:可以给属性指定默认值。

4:改变属性值:可以直接调用属性并赋予新的值,也可以通过定义函数去改变。

5:继承:class 子类名(父类名)    调用父类使用super(),因为父类也称为超类。

   Python2.7 使用super()时需要两个实参,即super(父类名, self)。

6:重写父类:  重写某些函数时直接定义一个同名的函数,然后进行相应的修改。

7:导入类

      导入单个类或者多个类:from file_name import class_name(, class_name2....)

      导入模块或者所有类的方法跟上面一样,import module_name或则 from module_name import *。但是不建议使用*号导入,因为对于阅读代码没有帮助且容易出错。

     模块类导入模块的方式一样。

8:Python 标准库如:

      from collections import OrderedDict        OrderedDict这个类能够记录添加键-值对的顺序,使用方法为OrderedDict()。

      from random inport randint   可以生成随机整数。

9:类编码风格:类名应该使用驼峰命名法,即类名中的每个单词的首写字母应该大写,不适用下划线。实例名和模块名都应该小写,单词之间加上下划线。

     使用空行来组织代码,不要滥用,比如类之间可以用两个空行,类中不同的方法可以使用一个空行。

     先导入标注库模块,空行,再导入自己编写的模块


文件

1:读取文件:open('文件名',模式),一般不需刻意使用close()去关闭文件,Python在适当时候会将其关闭。 

     打开模式:    默认是只读模式,  'w':写入文件,如果文件不存在将创建文件,如果存在则在返回文件对象前清空该文件。

                            'w+':可以读写,不存在则创建,会将文件清零。

                             'r':读取模式,不创建文件。

                            'a':附加模式,不可读。给文件添加内容,写入的内容将添加到文件末尾,若文件不存在则创建文件。

                            ’a+':附加读写,可以创建文件。

                            'r+':读取和写入,不创建文件。

读取使用read()

      with在不需要访问文件后将其关闭。这里文件名也可以是文件路径+文件名,路径使用反斜杠\ 

with open('filename') as file_object
    contents = file_object.read()
    print(contents)

2:逐行读取

with open('filename') as file_object:
    for line in file_object:
        print(line)

with open('filename') as file_object:
    lines = file_object.readlines()
for line in lines:
    print(line)

3:写入文件

with open('filename','w') as file_object
    file_object.write("I love programming.")

4:存储数据 

     先import json

      json.dump() 接受两个实参,要存储的数据以及可以存储数据的文件对象。

     json.load() 可以读取json文件。

import json
numbers = [1,3,4,5,6,9]
filename = 'numbers.json'
with open(filename,'w') as f_obj1:
    json.dump(numbers,f_obj1)

with open(filename) as f_obj2:
    number_read = json.load(f_obj2)

print(number_read)

异常

1:try-except模块

try:
    print(3/0)
except ZeroDivisionError:
    print("You can't diveide by zero")

try:
    answer = int(num1)/int(num2)
except ZeroDivisionError:
    print("You can't diveide by zero")
else:
    print(answer)

2:FileNotFoundError

3:分析文本  .split()可以得到所有单词的列表。

4:不处理使用 pass,如在except那里使用pass,则不对错误做出任何事情。


代码重构

1:将代码划分为一系列完成具体工作的函数,使代码更加清晰、易于理解并容易扩展。


测试代码

1:使用一些判断语句避免错误发生。

2:单元测试:核实函数在各方面没问题        测试用例是一组单元测试       全覆盖式测试  用例包含一整套单元测试,一般等项目投入使用再广泛测试。

     import unittest

    其中unittest.Testcase

猜你喜欢

转载自blog.csdn.net/lee_firefly/article/details/81053245