python 学习路线

学习顺序

  • 《python编程:从入门到实践》
  • 《Head-First Python》
  • 《“笨方法”学python3》
  • 《Python Cookbook》
  • 《Python 机器学习基础教程》
  • 《Fluent Python》
  • 《Python 编程》

《Python 编程: 从入门到实践》


  • 变量

变量命名:仅用小写和下划线。

变量本质: 指向特定的值。


  • 字符串

在字符串中使用变量:f’{varies1} {varies2}’

更早版本: ‘{} {}’.format(varies1, varies2)

注意:字符串里面可包含/n/t

删除末尾空白:str = str.rstrip() # 必须重新赋值


大整数:可用_隔离开来,增加可读性


  • 你一定会写出让别人觉得很漂亮的代码!

不要企图编写完美无缺的代码,而是要先编写行之有效的代码,再决定是对其做进一步改
进,还是转而去编写新代码。


  • 列表

索引:左边从0右边从-1开始

添加:list.append(element)

插入:list.insert(index, element)

删除:del list[index]

弹出: list.pop()

删除并返回:list.pop(index)

据值删除:list.remove(value)

排序:list.sort(reverse=True) 降序

临时排序:sorted(list)

反转:list.reverse()

长度: len(list)

遍历: for item in list:

range()函数:左闭右开 for value in range(1, 6):

可以指定步长

默认从零开始

转化为列表:list(range(6))

统计计算: min(list), max(list), sum(list)

列表解析:squares = [value**2 for value in range(1, 11)]

切片:左闭右开

默认:一直到‘头’或一直到‘尾’

复制:list2 = list1[:] 无缺点

list2 = list1 缺点:一改全改


  • 元组

不可变的列表

定义:tuple1 = (1,2,3)   tuple2 = (1,)

修改元组:将元组指向另一个元组


  • if

单个条件:if express:

多条件: and, or

包含: in, not in

if-elif-else


  • 字典

访问:dir[key] #键不存在时报错

dir.get ( key, return_value if not exist [ 默认值:None ] )

添加: dir[key] = value

创建: dir = {}

修改: dir[key] = value

删除: del dir[key]

定义格式

favorite_language{
    'jen':'python',
    'sarah':'c',
}

遍历

键值对: for key, value in dir.items():

: for key in dir.keys():

dir.keys() 返回一个列表。

:for value in dir.values():

删除重复值: set(dir.values())


集合

创建: set1 = {1,2,3} set2 = set()

增加: set1.add(4) set2.update([1,2,3,4])

删除: set1.remove(value)


  • 嵌套

经常在列表中包含大量字典,存储不同对象的信息。

字典中包含列表,描述同一对象的不同方面。

在字典中包含字典,描述不同对象的不同方面。


  • 用户输入

input(): massage = input(‘prompt words’)

获取数值:age = int(input('prompt words))

循环交互:

input_= ""
while input_ != 'quit':
    if input_:
        print(input_)
    input_ = input("please input your chose:")

化简

active = True
while active:
    input_ = input("please input your chose:")
    if input_ == 'quit':
        active = False
    else
        print(input_)

  • 函数

定义与调用

def func():
    print('hello, world!')
func()

参数传递

关键字参数,位置参数。

定义时若有默认值,往后放。

在函数中保留原列表

直接传入list, 在函数中的修改是永久的,一改全改的。
要想不改,传入list[:], 即原列表的副本。

传递任意数量的实参

def func(arg1, arg2, *args):

函数将接收到的所有参数封装到元组args中。明确数量的参数放在前面。

传递任意数量的关键字实参:

def func(arg1, arg2, **args):

函数将接收到的所有关键字参数封装到字典args中。


模块导入

使用as给模块指定别名

导入整个文件: import file

导入一个函数: from file import func1

不推荐使用from file import * : 因为容易导致函数名字重叠而覆盖函数。


面向对象编程是最有效的软件编写方法之一。可模拟十分逼真的显示场景。

命名规则:驼峰命名法,而不使用下划线。

属性方法: 属性即self.变量, 方法即self.函数。

创建类

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def sit(self):
        print(f"{self.name} is sitting.")
    def roll(self):
        print(f"{self.name} is rolling.")

创建实例: my_dog = Dog(‘dog’, 3)

修改属性的值: my_dog.name = ‘lili’ (通过实例来修改)

通过方法来修改:

class Dog:
    def __init__(self, name, age):
        ...
    def rename(self, new_name):
        self.name = new_name

my_dog.renmae(‘lili’)

继承

class SmallDog(Dog):
    def __init__(self, name, age):
        """初始化父类的属性和方法。"""
        super().__init__(name, age)
        # 定义新属性
        self.sex = None
    def spark(self, word):
        """定义新方法"""
        print(f"{self.name} spark: {word}")

重写
父类某些行为不符合子类。在子类中写一个名字一样的函数即可。

def rename(self, new_name):
    print("small dog don't have name!")

类作类的属性: 使得类的属性在繁多的情况下更加有条理。

类中可以再次定义类

导入

from car import ElectricCar, OilCar


  • python标准库

rand类函数

choice函数


  • 文件

读取文件

with open('test.txt', 'r') as file:        # file:一个文件对象 with: 由python决定并安全关闭文件
    content = file.read()
print(content)

该程序打印出来的结果同文件一致。即文件最后如有换行,则打印否则不打印。
倘若要消除换行:print(content.rstrip())

文件路径:左撇 反斜杠

之所以不用斜杠,是因为:可能导致转义。

逐行读取

with open('test.txt', 'r') as f:
    for line in f:
        print(line)  # 这个line不包括/n

逐行读取并形成列表

with open('test.txt', 'r') as f:
    l = f.readlines()
print(l)

写入文件

若’w’的对象存在,则先清空再写。

with open('test.txt', 'w') as f:
    f.write('hello, world!')

多行写入

file.write(‘hello, world!/n’)

附加模式
‘a’
读写模式
‘r+’


  • 异常

使用错误避免崩溃:

try:
    a = 5/0
except ZeroDivisionError:
    print("you can't divide by zero!")
else
    print(a)        # 如果try代码块成功执行,则执行else代码块

常见错误:ZeroDivisionError, FileNotFoundError

except块也常用:pass 实现静默失败。

分析文本

分隔符

with open('test.txt', 'r') as f:
    content = f.read()
words = content.split()

存储数据

json 是一种被多种语言使用的传输格式。

import json
number = [1,2,3,4,5]
with open('test.json', 'w') as f:
    json.dump(number, f) # 存进文件后数据格式不变,依然是列表的形式

with open('test.json', 'r') as f:
    numbers = json.load(f)
print(numbers)

可以在程序间共享数据。


  • 重构

写完能运行的程序后进行改进的过程。

将每一段代码按功能划分成不同的函数。


  • 测试代码

通过测试,可以让你相信,即使有更多人使用你的代码,也不会出错。

在用户发现错误前,找到它们。

测试函数

单元测试测试用例全覆盖

istrianger.py

def IsTrianger(a, b, c):
    if a + b > c and a + c > b and b + c > a:
        return True
    else:
        return False

test_istrianger.py

import unittest # 导入模块
from istrianger import IsTrianger # 导入要测试的函数
class t_trianger(unittest.TestCase): # 创建用于测试的类
    def test_trianger(self): # 定义测试的函数:以test_开头的函数自动执行
        answer = IsTrianger(3,4,5)
        self.assertEqual(answer, True) # 对比结果

if __name__ == '__main__':
    unittest.main() # 如果这个文件被测试框架导入,则__name__ != '__main__', 文件不运行。

运行测试程序,即可。

若要运行多个测试,定义多个不同的test_…方法即可。

测试类

unittest.TestCase有很多的断言方法。

先创建类的实例,然后再以测试函数的方式测试类的行为。

def setUp(self)方法:可以创建各个test_方法均可以使用的一个实例或多个实例。

你可能感兴趣的:(python,学习,windows)