一、基础
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
来源:CSDN
作者:amVVZ
链接:https://blog.csdn.net/weixin_44199151/article/details/104430914