Python笔记

╄→尐↘猪︶ㄣ 提交于 2020-02-21 22:37:13





一、基础

1. 注释

单行注释

单行注释快捷键crtl+/

# 行注释
print("hello world")  # 语句注释

重要代码块使用等号隔开

# ======================
# ======================

TODO注释

# TODO 待完成任务

多行注释

"""
多行注释
"""

2. 数据类型

Python中定义变量时不需要指定变量类型,运行时自动根据赋值语句右侧数据自动推导出变量类型。
常用变量类型为:

类型 示例
int 18
float 1.8
str “18”
bool True

3. 运算符

数值运算

# 取整
a = 9 // 4
# 取余
a = 9 % 5
# 幂
a = 2 ** 3

字符串运算

# 字符串拼接
print("Wang" + "Zhen")

# 字符串重复拼接
print("Wang" * 10)

成员运算符

3 in (1, 2, 3)
3 not in (1, 2, 3)

身份运算符

判断是否引用同一对象(内存地址是否一致)

(1, 2, 3) is (1, 2, 3)
(1, 2, 3) is not (1, 2, 3)

4. 转义字符

转义字符 描述
\\ 反斜杠
\’ 单引号
\" 双引号
\n 换行
\t 制表符
\r 回车




二、高级变量

1. 列表

定义

name_list = ["Wang", "Liu", "Zhang"]

方法

分类 方法 说明
查找 列表[索引] 获取指定索引的数据
  列表.index(数据) 获取指定数据的索引
增加 列表.insert(索引, 数据) 在指定位置插入数据
  列表.append(数据) 在末尾追加数据
  列表.extend(列表2) 将列表2数据追加到列表
修改 列表[索引] = 数据 修改指定索引的数据
删除 del 列表[索引] 删除指定索引的数据
  列表.remove[数据] 删除第一个出现的指定数据
  列表.pop() 删除末尾数据
  列表.pop(索引) 删除指定索引的数据
  列表.clear() 清空列表
统计 len(列表) 列表长度
  列表.count(数据) 数据在列表中出现的次数
排序 列表.sort() 升序排序
  列表.sort(reverse=True) 降序排序
  列表.reverse() 逆序

2. 元组

定义

元组的元素无法修改

test_tuple = ("Wang", 18, 1.7)

方法

方法 说明
元组[索引] 获取指定索引的数据
元组.index(数据) 获取指定数据的索引
len(元组) 统计元组长度
tuple(列表) 将列表转换为元组

3. 字典

定义

用键值对保存无序的对象

month = {"1": "January",
         "2": "February"}

方法

方法 说明
字典[键] 获取指定键的值
字典[键] = 值 增加或修改键值对
字典.pop(键) 删除键值对
字典.update(字典) 合并字典
字典.clear() 清空字典
len(字典) 统计键值对数量

4. 字符串

定义

string = "Python"

方法

分类 方法 说明
统计 len(字符串) 字符串长度
  字符串.count(字符串) 字符串出现次数
判断 字符串.isspace() 是否只包含空格
  字符串.isalnum() 是否只包含字母或数字
  字符串.isalpha() 是否只包含字母
  字符串.isdecimal() 是否只包含数字
  字符串.isdigit() 是否只包含数字或Unicode数字
  字符串.isnumeric() 是否只包含数字、Unicode数字或汉字数字
  字符串.istitle() 是否首字母大写
  字符串.islower() 是否只包含小写字母
  字符串.isupper() 是否只包含大写字母
  字符串.startwith(str) 是否以str开头
  字符串.endwith(str) 是否以str结尾
查找 字符串.find(str, start=0, end=len(字符串)) 查找str的索引,不在时返回-1
  字符串.rfind(str, start=0, end=len(字符串)) 从右查找str的索引,不在时返回-1
  字符串.index(str, start=0, end=len(字符串)) 查找str的索引,不在时报错
  字符串.rindex(str, start=0, end=len(字符串)) 从右查找str的索引,不在时报错
修改 字符串.replace(str1, str2) 用str2替换str1
  字符串.capitalize() 第一个字符大写
  字符串.title() 每个单词首字母大写
  字符串.lower() 转换为小写
  字符串.upper() 转换为大写
  字符串.swapcase() 翻转大小写
  字符串.lstrip() 去除字符串左边的空白字符
  字符串.rstrip() 去除字符串右边的空白字符
  字符串.strip() 去除字符串左右两边的空白字符
对齐 字符串.ljust(width) 左对齐,填充空格至指定长度
  字符串.rjust(width) 右对齐,填充空格至指定长度
  字符串.center(width) 居中,填充空格至指定长度
拆分 字符串.partition(str) 将字符串拆分成三个元素的元组
  字符串.rpartition(str) 从右侧将字符串拆分成三个元素的元组
  字符串.split() 将字符串拆分成小字符串列表
  字符串.splitlines() 按行拆分
合并 " ".join(seq) 以" "为分隔符合并列表元素

5. 切片

切片方法适用于列表、元组、字符串。
索引为负数时表示从右往左的顺序。
步长为负数时表示倒序切片。

字符串[开始索引:结束索引:步长]

6. 全局变量

全局变量在执行函数前定义,可加g_或gl_前缀区分。
函数内引用时加global关键字可修改全局变量,不加则生成局部变量,不对全局变量产生影响。

num = 1


def demo1():
    global num
    num = 99
    print("demo1 num = %d" % num)


def demo2():
    num = 5
    print("demo2 num = %d" % num)


demo1()
demo2()
print("global num = %d" % num)




三、判断与循环

1. 判断

if

if a > 5:
    print(a)

else

if a > 5:
    print(a)
else:
    print(b)

elif

if a > 5:
    print(a)
elif a > 3:
    print(a)
else:
    print(b)

2. 循环

while

i = 1
while i <= 50:
    print("ok")
    i = i + 1

for

通过break退出for循环时,else不执行

for num in range(1, 20):
    print(num)
else:
    print(num2)

for循环可以遍历任何序列项目

# 数值遍历
for num in range(1, 20):
    print(num)

# 列表遍历
name_list = ["Wang", "Liu", "Li"]
for name in name_list:
    print("My Name is %s " % name)

# 字典遍历
month = {"1": "January",
         "2": "February"}
for k in month:
    print("%s - %s" % (k, month[k]))

# 字符串遍历
string = "Python"
for char in string:
    print(char, end="\t")




四、函数与方法

1. 封装

def FunctionName(para1, para2=2):
    """Test Function"""
    R = para1 + para2
    return R

2. 导入

import FunctionFilename
a = FunctionFilename.FunctionName(para1, para2)

3. 参数

# 默认参数
def data(name, gender=True):
    gender_text = "male"
    if not gender:
        gender_text = "female"
    print("%s is %s" % (name, gender_text))


# 多值参数
# *args为元组 **kwargs为字典
def demo(*args, **kwargs):
    print(args)
    print(kwargs)


demo(1, 2, 3, name="小明", age=18)
# 拆包
num = (1, 2, 3)
data = {"name": "小明", "age": 18}
demo(*num, **data)

4. 返回值

def measure():
    temp = 39
    humidity = 50
    return temp, humidity


print(measure())

5. 常用函数

输入

输入默认为字符串类型

a = input("Please Input A Number")

输出

print("string")
print("ok", end=" ")
格式化字符 含义
%s 字符串
%d 十进制整数,%06d设置整数位数
%f 浮点数,%.2f设置小数点后位数
%% 输出%
# 格式化字符串
a = "Z"
b = 10
print("My name is %s, I am %d years old" % (a, b))

随机数

import random
random.randint(1, 10)

eval

eval函数可将字符串当成有效表达式来求值

print(eval(input("请输入算数题")))

其他

函数 描述
int(item) 类型转换为int
float(item) 类型转换为float
len(item) 计算容器中元素个数
del(item) 删除变量
max(item) 返回容器中元素最大值
min(item) 返回容器中元素最小值




五、类

1. 封装

实例属性与实例方法

class NameClass:

    # 实例属性
    # 初始值不知道设置为什么时可以设置为None
    def __init__(self, new_name):
        self.name = new_name

    # 实例方法
    # self可用来访问实例属性,或调用其他实例方法
    def function(self):
        print("%s" % self.name)


# 对象创建
TestClass = NameClass("Wang")
TestClass.function()

类属性与类方法

class A:

    # 类属性
    count = 0

    # 类方法
    @classmethod
    def ClassFunction(cls):
        print("Class Method")


# 使用类名访问类属性和类方法
print(A.count)
A.ClassFunction()

静态方法

class A:

    # 静态方法
    @staticmethod
    def StaticFunction():
        pass


# 使用类名访问静态方法
A.StaticFunction()

案例与总结

Game类:

类属性:记录历史最高分
实例属性:记录当前玩家信息

静态方法:显示游戏帮助信息
类方法:显示历史最高分
实例方法:开始当前玩家的游戏

方法 描述
实例方法 可以访问实例属性和类属性
类方法 只访问类属性
静态方法 不访问实例属性和类属性

内置方法

class NameClass:

    instance = None

    # __new__为对象分配空间,将对象的引用传递给__init__
    # 重写以实现单例模式
    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        return cls.instance

    # __init__对属性初始化
    def __init__(self, new_name, new_age):
        self.name = new_name
        self.age = new_age

    # __str__返回想要打印的内容
    def __str__(self):
        return "%s is %d years old" % (self.name, self.age)


TestClass = NameClass("Wang", 18)
print(TestClass)

私有属性与私有方法

在属性或方法命名前加上"_"

class NameClass:

    # 私有属性
    def __init__(self, new_name):
        self._name = new_name

    # 私有方法
    def _function(self):
        print("%s" % self._name)

2. 多态

单继承

class A:

    def functionA(self):
        print("A")


# 单继承
class B(A):

    pass


test = B()
test.functionA()

多继承

class A:

    def functionA(self):
        print("A")


class B:

    def functionB(self):
        print("B")


# 多继承
class C(A, B):

    pass


test = C()
test.functionA()

重写

class A:

    def function(self):
        print("A")


class B(A):

    # 重写
    def function(self):
        print("B")
        # 可用super调用父类方法以实现扩充
        super().function()


test = B()
test.function()




六、异常

1. 异常捕获

try:
    num = int(input("Input A Number"))
    num = 8 / num
# 错误类型1
except ZeroDivisionError:
    print("ZeroDivisionError")
# 错误类型2和3
except (ValueError, ZeroDivisionError):
    print("ValueError")
# 未知错误类型
except Exception as result:
    print("Unknown Error %s" % result)
# 没有异常时执行
else:
    print(num)
# 有无异常都执行
finally:
    print("end")

2. 异常传递

def demo1():
    return int(input("Input A Number"))


def demo2():
    return demo1()


# 利用异常的传递性,在主程序中捕获异常
try:
    print(demo2())
except Exception as result:
    print("Unknown Error %s" % result)

3. 异常抛出

def input_password():
    pwd = input("Input Password")
    if len(pwd) >= 8:
        return pwd

    # 抛出异常
    ex = Exception("密码长度不够")
    raise ex

try:
    print(input_password())
except Exception as result:
    print(result)




七、文件操作

1. 文件读写

# 打开文件
file = open("README.txt", "w")
# 写入文件
file.write("Hello")
# 关闭文件
file.close()


# 打开文件
file = open("README.txt", "r")
# 读取文件
text = file.read()
print(text)
# 关闭文件
file.close()

2. 文件访问方式

访问方式 说明
r 只读,指针在文件开头,文件不存在抛出异常
w 只写,覆盖原文件,文件不存在创建新文件
a 追加,指针在文件结尾,文件不存在创建新文件
r+ 读写,指针在文件开头,文件不存在抛出异常
w+ 读写,覆盖原文件,文件不存在创建新文件
a+ 读写,指针在文件结尾,文件不存在创建新文件

3. 大文件读取

file = open("README.txt")

while True:
    # 读取一行
    text = file.readline()

    # 判断是否读到内容
    if not text:
        break
    
    # 文件末尾已有'\n'
    print(text, end="")

file.close()




八、模块

1. 模块导入

# 模块别名
import Module as MyModule

# 部分导入 可直接使用导入的全局变量、类或函数
from Module import Tool

# 导入所有工具
from Module import *

2. 包

包写好后在__init__.py文件中加入想被调用的函数

from . import function
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!