Hello! 欢迎来到盒子萌!

Python笔记


avatar
dspirit 2025-02-01 43

[每天记录一个问题,记录十年 Blog]

Python笔记
1.1

大量文本文件查找、替换
复杂规则重命名、重排序照片
写小型数据库、专用GUI、简单游戏

autopep8规范
pip install autopep8
ProjectFileDir\venv\Scripts\autopep8.exe
--in-place --aggressive FilePath

1.1.1 编码声明

# -*- coding: encoding -*-  // Python3 默认UTF-8 编码,所有字符串都是 unicode 字符串

1.1.2 python标识符

首字母:a-z, A-Z,或下划线
其他部分:数字、字母、下划线
禁止使用保留关键字

测试标识符是否合法:
def is_valid_identifier(name):
    try:
        exec(f"{name} = None")
        return True
    except:
        return False

print(is_valid_identifier("2var"))  # False
print(is_valid_identifier("var2"))  # True

1.1.3 python保留字/关键字

import keyword
print(keyword.kwlist)

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

逻辑值         True、False、None
逻辑运算        and、or、not
条件控制        if、elif、else
循环控制        for、while、break、continue
异常处理        try、except、finally、raise(抛出异常)
函数定义        def、return、lambda(匿名函数)
类与对象        class、del
模块导入        import、from、as
作用域         global、nonlocal(非局部变量)
异步编程        async(声明异步函数)、await(等待异步操作完成)
其他          assert(断言)、in(检查成员关系)、is(检查对象身份是否同一对象)、pass(占位空语句)、                 with(上下文管理器,用于资源管理)、yield(从生成器函数返回值)

1.1.4 python注释

单行注释:    # 井号后面会被解释器忽略
多行注释:    1、多个 # 号实现多行注释
            2、三单/双引号注释,本质是未使用的字符串,可使用__docx__访问

1.1.5 python行与缩进、多行语句、空行

1、通过相同的空格缩进表示代码块(缩进不一致,报错IndentationError)
2、语句很长时使用 \ 实现多行语句
3、函数之间、类方法之间、类和函数入口之间,用一行空行分隔,便于代码维护会或重建(空行也是程序代码的一部分)

1.1.6 数字与字符串

四种数字:整数int、布尔bool、浮点float、复数、complex

字符串:
    1、python中单双引号使用完全相同,使用三单/双引号可以指定一个多行字符串
    2、转义符 \ ,如 \n 换行,使用 r + 字符串可让反斜杠不转义,如 r"this is a line with \n"
    3、字面量级联的字符串,编译/解释时自动连接,如 "this " "is " "string" == "this is string"
    4、字符串可以 + 连接,可以 * 重复,可以从左往右以 0 索引,从右往左 -1 开始索引
    5、python字符串不能改变,没有单字符,单字符就是长度为1的串
    6、字符串切片:str[start:end:step],start为包含,end不包含,step步长

1.1.7 等待用户输入、单行多语句、print输出、import 与 from…import

1、等待输入:
    print(input("等待用户输入,按下 enter 键后退出\n"))
2、单行多语句使用 ; 分隔
3、print输出默认换行,不换行需在变量末尾加 ,end=""
    print("等待用户输入,按下 enter 键后退出",end="")
4、import 与 from...import
    整个模块导入:import sys
    某个模块中的全部函数导入:from sys import argv,path,from sys import *

1.2.1 基本数据类型

1、python变量不用声明,a = b = c = 1

2、不可变数据类型:
    数字(number):int(长整型)、float、bool(int的子类)、complex复数
        A. bool 是 int 的子类,True 和 False 可以和数字相加
        B. 可用del语句删除一些对象引用,如var_a = 1;va_b = 10;del var_a, var_b
        C. 数值除法 / 返回一个浮点数(数学除法),// 返回一个整数(向下整除),% 返回整除余数(取余)
        D. 混合计算时,Python会把整型转换成为浮点数计算
        E. 布尔转换False:None、False、零 (0、0.0、0j)、空序列(如 ''、()、[])和空映射(如 {})

    字符串(string):单双引号(使用[]截取)
        A. 字符串使用单/双引号括起来,使用 \ 转义特殊字符
        B. 字符串索引以 0 开始,-1 为末尾,如 print(str[0:-1])
        C. + 连接字符串,* 复制字符串,如 print(str + "TEST");   print(str * 2)
        D. \ 反斜杠也可作续航符,也可使用三单/双引号跨越多行

    元组(tuple):小括号
    A. 与字符串一样,元组的元素不能修改,但可以包含可变的对象,比如list列表
    B. 元组也可以被索引和切片。如print (tuple[1:3]) 
    C. 注意构造包含 0 或 1 个元素的元组的特殊语法规则。tup1 = ();    tup2 = (20,) 
    D. 元组也可以使用 + 操作符进行拼接。

3、可变数据类型:
    列表(list):方括号
    A. 列表写在方括号之间,元素用逗号隔开。
    B. 和字符串一样,列表可以被索引和切片。   inputWords[-1::-1]; # 翻转逆向读取字符串
    C. 列表可以使用 + 操作符进行拼接。
    D. 列表中的元素是可以改变的

    集合(set):大括号
    A. 集合无序、可变,用于存储唯一的元素
    B. 集合元素不会重复,可以进行交、并、差集等集合操作
    C. 集合使用大括号 {} 表示,元素之间用逗号 , 分隔,也可使用 set() 函数创建,set(value)
    D. 创建一个空集合必须用 set()

    字典(dictionary):大括号
    A. 字典当中的元素是通过键来存取的,而不是通过偏移存取
    B. 字典是一种映射类型,字典用 { } 标识,键(key)必须使用不可变类型且唯一,

3、判断函数类型:
    // type(obj)返回直系类型,isinstance(obj,class)返回家族类型
    isinstance(a, int) ==> true;    type(A()) == A ==>True

4、数据类型转换
函数                      描述
int(x [,base])          将x转换为一个整数
float(x)                将x转换到一个浮点数
complex(x, y)           将 x 和 y 转换到一个复数

str(x)                  将对象 x 转换为字符串
repr(x)                 将对象 x 转换为表达式字符串
eval(str)               用来计算在字符串中的有效Python表达式,并返回一个对象

tuple(s)                将序列 s 转换为一个元组
list(s)                 将序列 s 转换为一个列表
set(s)                  转换为可变集合
dict(d)                 创建一个字典。d 必须是一个 (key, value)元组序列。

frozenset(s)            转换为不可变集合
chr(x)                  将一个整数转换为一个字符
ord(x)                  将一个字符转换为它的整数值
hex(x)                  将一个整数转换为一个十六进制字符串
oct(x)                  将一个整数转换为一个八进制字符串

5、数学函数(math库)
函数              返回值
abs(x)          返回数字的绝对值,如abs(-10) 返回 10
fabs(x)         以浮点数形式返回数字的绝对值,如math.fabs(-10) 返回10.0
ceil(x)         返回数字的上入整数,如math.ceil(4.1) 返回 5
floor(x)        返回数字的下舍整数,如math.floor(4.9)返回 4
round(x [,n])   返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数

exp(x)          返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
pow(x, y)       x**y 运算后的值。
sqrt(x)         返回数字x的平方根。
log(x)          如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x)        返回以10为基数的x的对数,如math.log10(100)返回 2.0

min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。
max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。
cmp(x, y)       x < y 返回 -1, 如果 x == y 返回 0。Python 3 已废弃,使用 (x>y)-(x<y) 替换。


随机数函数(random库)
函数                  描述
choice(seq)         从序列的元素中随机挑选一个元素,比如random.choice(range(10))
randrange ([start,] stop [,step])   从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
random()            随机生成下一个实数,它在[0,1)范围内。
seed([x])           改变随机数生成器的种子seed。
shuffle(lst)        将序列的所有元素随机排序
uniform(x, y)       随机生成下一个实数,它在[x,y]范围内。

三角函数
函数              描述
sin(x)          返回的x弧度的正弦值。
cos(x)          返回x的弧度的余弦值。
tan(x)          返回x弧度的正切值。
asin(x)         返回x的反正弦弧度值。
acos(x)         返回x的反余弦弧度值。
atan(x)         返回x的反正切弧度值。
atan2(y, x)     返回给定的 X 及 Y 坐标值的反正切值。

hypot(x, y)     返回欧几里德范数 sqrt(x*x + y*y)。
radians(x)      将角度转换为弧度
degrees(x)      将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
pi              数学常量 pi(圆周率,一般以π来表示)
e               数学常量 e,e即自然常数(自然常数)。

1.2.2 python运算符

1、算术运算符:加减乘除,取余(%)、取整(//)、幂(**)
    A. // 得到的并不一定是整数类型的数,它与分母分子的数据类型有关系
    B. 在交互模式中,最后被输出的表达式结果被赋值给变量 _,_ 变量应被用户视为只读变量

2、比较运算符:大于等于小于,大于等于(>=)、小于等于(<=)

3、赋值运算符:
    加减乘除赋值(=、+=、-=、*=、/=),取模赋值(%=)、取整除赋值(//=)、幂赋值(**=)、海象运算(:/)

4、位运算符:(a = 0011 1100 = 61,b = 0000 1101 = 14)
    位与(&):a&b = 0000 1100 = 12
    位或(|):a|b = 0011 1101 = 61
    异或(^):a^b = 0011 0001 = 49
    取反(~):~a  = 1100 0011 = -61(补码)
    左移(<<):a << 2 = 1111 0000 = 240
    右移(>>):a >> 2 = 0000 1111 = 15

5、成员运算符
运算符         实例
in          x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in      x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

6、身份运算符(比较两个对象的存储单元)
运算符     实例
is      x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is not  x is not y , 类似 id(x) != id(y)。如果引用的不是同一个对象则返回结果 True,否则返回 False

1.2.3 转义字符

转义字符        描述
\           (在行尾时)续行符
\\          反斜杠符号
\'          单引号
\"          双引号

\a          响铃
\b          退格(Backspace)
\0          00空
\n          换行
\v          纵向制表符
\t          横向制表符

\r          回车,将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换
\f          换页
\yyy        八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
\xyy        十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行
\other      其它的字符以普通格式输出

使用 \r 实现百分比进度:
import time

for i in range(101): # 添加进度条图形和百分比
    bar = '[' + '=' * (i // 2) + ' ' * (50 - i // 2) + ']'
    print(f"\r{bar} {i:3}%", end='', flush=True)
    time.sleep(0.05)
print()

1.2.4 数据类型运算

1、字符串运算

a = "Hello",b = "Python"
操作符     描述
+       字符串连接
*       重复输出字符串
[]      通过索引获取字符串中字符
[ : ]   截取字符串中的一部分,遵循左闭右开原则,str[0:2] 是不包含第 3 个字符的。

in      成员运算符 - 如果字符串中包含给定的字符返回 True
not in  成员运算符 - 如果字符串中不包含给定的字符返回 True
r/R     原始字符串((r可以大小写):所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符
%       格式字符串

字符串格式化符号:

符号  描述
%c   格式化字符及其ASCII码
%s   格式化字符串
%d   格式化整数
%u   格式化无符号整型

%f   格式化浮点数字,可指定小数点后的精度
%e   用科学计数法格式化浮点数
%E   作用同%e,用科学计数法格式化浮点数
%g   %f和%e的简写
%G   %f 和 %E 的简写

%o   格式化无符号八进制数
%x   格式化无符号十六进制数
%X   格式化无符号十六进制数(大写)
%p   用十六进制数格式化变量的地址


格式化操作符辅助指令:
符号  功能
+       在正数前面显示加号( + )
-       用做左对齐
*       定义宽度或者小数点精度
%       '%%'输出一个单一的'%'

<sp>    在正数前面显示空格
0       显示的数字前面填充'0'而不是默认的空格
#      在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
(var)   映射变量(字典参数)
m.n.    m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

f-string:字面量格式化字符串
    >>> name = 'Runoob'
    >>> f'Hello {name}'  # 替换变量
    'Hello Runoob'

方法及描述
capitalize()                将字符串的第一个字符转换为大写
center(width, fillchar)     返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认空格
count(str, beg= 0,end=len(string))  如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
expandtabs(tabsize=8)       把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。

find(str, beg=0, end=len(string))   检测 str 是否包含在字符串中,包含返回开始的索引值,否则返回-1
index(str, beg=0, end=len(string))  跟find()方法一样,只不过如果str不在字符串中会报一个异常。
isalnum()           检查字符串是否由字母和数字组成,且至少有一个字符,则返回 True;否则返回 False
isalpha()           如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False
isdigit()           如果字符串只包含数字则返回 True 否则返回 False
isnumeric()         如果字符串中只包含数字字符,则返回 True,否则返回 False
isspace()       如果字符串中只包含空白,则返回 True,否则返回 False.
istitle()       如果字符串是标题化的(见 title())则返回 True,否则返回 False

islower()       如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
isupper()       如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

len(string)         返回字符串长度
lower()             转换字符串中所有大写字符为小写.
lstrip()            截掉字符串左边的空格或指定字符。
replace(old, new [, max])   把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。

swapcase()          将字符串中大写转换为小写,小写转换为大写
zfill (width)       返回长度为 width 的字符串,原字符串右对齐,前面填充0
isdecimal()         检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。

2、列表

列表都可以索引,切片,加,乘,检查成员,已经内置确定序列的长度以及确定最大和最小的元素的方法
列表的数据项不需要具有相同的类型
list[2] = 2001          # 更新列表项
list1.append('Baidu')   # 添加列表项
del list[2]             # 删除列表项
x = [['a', 'b', 'c'], [1, 2, 3]]        # 嵌套列表
operator.eq(a,b)        # 列表比较,import operator

列表函数:len(list)、 max(list)、min(list)、list(seq)

列表方法:
list.append(obj)    追加元素
list.count(obj)     统计元素
list.index(obj)     获取元素索引
list.insert(index, obj)     插入元素
list.pop([index=-1])        移除元素
list.reverse()      翻转元素
list.sort( key=None, reverse=False)     对列表排序
list.clear()        清空列表
list.copy()         复制列表

3、元组

元组的元素不能修改,元组的不可变指的是元组所指向的内存中的内容不可变
元组内置函数:len(list)、   max(list)、min(list)、list(seq)
单元素元组:tup1 = (50,),空元组:tup1 = ()
访问、修改、删除元组,截取元组,同列表

4、字典

可变容器模型,可存储任意类型对象
键值对用冒号分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中
键必须是唯一的,值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
键必须不可变,所以可以用数字,字符串或元组
emptyDict = {};emptyDict = dict()       空字典
tinydict['Age'] = 8                   # 更新 Age键值(存在时)
tinydict['School'] = "菜鸟教程"         # 添加键值对(不存在时)
del tinydict['Name'] # 删除键 'Name'
tinydict.clear()     # 清空字典
del tinydict         # 删除字典

字典内置函数
len(dict)           # 键的总数
str(dict)           # 输出字典(以字符串表示)
type(variable)      # 返回变量类型

方法
dict.clear()            删除字典所有元素
dict.pop(key[,default]) 删除字典 key(键)所对应的值,返回被删除的值。
dict.popitem()          返回并删除字典中的最后一对键和值。
key in dict             如果键在字典dict里返回true,否则返回false

dict.copy()             返回一个字典的浅复制
dict.items()            以列表返回一个视图对象
dict.keys()             返回一个视图对象
dict.values()           返回一个视图对象
dict.get(key, default=None)         返回指定键的值,如果键不在字典中返回 default 设置的默认值
dict.setdefault(key, default=None)  和get()类似, 但如果键不存在,将会添加键并将值设为default
dict.update(dict2)      把字典dict2的键/值对更新到dict里

5、集合

set()           # 空集合
a - b           # 集合a中包含而集合b中不包含的元素
a | b           # 集合a或b中包含的所有元素
a & b           # 集合a和b中都包含了的元素
a ^ b           # 不同时包含于a和b的元素

集合推导式: a = {x for x in 'abracadabra' if x not in 'abc'}

集合操作:
s.add( x )/s.update([1,4],[5,6])    # 添加元素,存在则不进行任何操作
s.remove( x )/s.discard( x )            # 移除元素
s.pop()                                 # 随机移除
s.clear()                               # 清空集合
x in s                                  # 元素是否存在集合中
len(s)                                  # 计算集合元素个数

1.2.5 逻辑控制

1、条件控制if-else、if嵌套

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3[]()
2、循环控制

A. 无限循环
var = 1
while var == 1 :  # 表达式永远为 true
   num = int(input("输入一个数字  :"))
   print ("你输入的数字是: ", num)

print ("Good bye!")

B. while else语句
count = 0
while count < 5:
   print (count, " 小于 5")
   count = count + 1
else:
   print (count, " 大于或等于 5")

相关阅读