Python Notes _Base Grammars
基础语法 P(屁) y(眼) t(通) hon(红)
标准代码架构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def find7 (): num_I = 1 while num_I<= 100 : if num_I % 7 == 0 or '7' in str (num_I): num_yv = num_I print (f'{num_yv} ' ) num_I += 1 else : num_I += 1 def main (): find7() if __name__ == "__main__" : main()
优秀的代码架构是后期修bug的救命稻草
数据转换&数据计算 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 bin (x) oct (x) int (x) hex (x) float (x) complex (x) _________________________ +,-,*,/ % // ** __________________________ num += 2 -=,*=,/=,//=,%=,**= __________________________
在实际应用中二,八,十六进制数的显示方式分别为 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 num = 26 binary_num = bin (num) print (f'{num} 的二进制表示为: {binary_num} ' )octal_num = oct (num) print (f'{num} 的八进制表示为: {octal_num} ' )hex_num = hex (num) print (f'{num} 的十六进制表示为: {hex_num} ' )
带有 0x
前缀的数字代表十六进制数,0b
前缀代表二进制数,0o
代表八进制数。
逻辑&逻辑运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 if x < y : print (x) elif x = y: print (x) else : print (y) _______________________ while x < y : print (x) ______________________ 判断条件: ==,!=,>,<,>=,<= x and y x or y not x x in ['商业贷款' , '公积金贷款' , '组合贷款' ]: x not in ['商业贷款' , '公积金贷款' , '组合贷款' ]: _____________________ for i in rang(5 ) : print (i) ________________________ break continue
好啊
字符串 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 print ('啊吧啊吧' )print (f"贷款年限:{years} 年" ) print ('啊吧啊吧' \n) \b,退格 \n,换行 \v,纵向制表 \t,横向制表 \r,回车 ________________________________________________ value = 10 string_x = '我今年%d岁' print (string_x % value) %c %s %d %u %o %x %f ________________________________________________ str_x.find('a' ,0 ,5 ) _________________________________________________ str_x.replace('a' ,'b' ,3 ) _________________________________________________ str_x.split('/' ,3 ) __________________________________________________ str_x.jion('a' ) __________________________________________________ str_x = 'aabb' str_y = 'bbcc' print (str_x + str_y) __________________________________________________ .strip('a' ) .lstrip('a' ) .rstrip('a' ) .upper() .lower() .capitalize() .title() .center(13 ,'_' ) .ljust(13 ,'_' ) .rjust(13 ,'_' ) __________________________________________________ string_x = 'okjuhtabab' find_y = 'o' res_1 = string_x.find(find_y,0 ,5 ) print (res_1)__________________________________________________
好好好
数据类型 列表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 list_x = [1 ,'p' ,6 ,'o' ] list_x =list (1 ,'p' ,6 ,'o' ,6 ) _________________________________________ print (list_x[1 :4 :3 ])_________________________________________ list_x.append('a' ) _________________________________________ list_x.extend(list_y) _________________________________________ list_x.insert(2 ,'a' ) _________________________________________ list_x.sort() .sort(key=len ) .sort(key=str .lower) .sort(key=lambda x: x[1 ]) _________________________________________ list_y = sorted (list_x) _________________________________________ list_x.reverse() _________________________________________ del list_x[1 ] _________________________________________ list_x.pop(4 ) _________________________________________ list_x.clear() _________________________________________ list_x.remove('a' ) _________________________________________
好得很呐
元组 1 2 3 4 5 6 7 8 9 10 tuple_x = (1 ,'a' ,6 ) _________________________________________ list_x = [(3 ,'o' )(1 ,'a' ),(8 ,'g' ),(2 ,'i' )] _________________________________________ print (tuple_x[2 :5 :2 ])_________________________________________
好的不得了
集合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 set_x = {1 ,'a' ,6 } set_x = {(3 ,'o' )(1 ,'a' ),(8 ,'g' )} set_x = {[1 ,'p' ,6 ,'o' ],[6 ,'i' ,9 ,8 ]} _________________________________________ set_x = {1 ,'a' ,6 ,(3 ,'o' ),[1 ,'p' ,(2 ,'i' )]} _________________________________________ set_x = set ([6 ,(3 ,'o' ),1 ,'p' ,range (5 )]) _________________________________________ set_x.add('a' ) _________________________________________ set_x.remove('a' ) _________________________________________ set_x.discard('a' ) _________________________________________ y = set_x.pop() _________________________________________ set_x.clear() _________________________________________ set_y = set_x.copy() _________________________________________ set_x.isdisjoint(set_y) _________________________________________
这也太好了吧
字典 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 dictionary_x = {'a' :1 ,'b' :2 ,'k' :'p' ,2 :'o' ,'l' :1 } _________________________________________ print (dictionary_x.get('a' ))_________________________________________ print (dictionary_x.key())_________________________________________ print (dictionary_x.values())_________________________________________ print (dictionary_x.items())_________________________________________ dictionary_x['a' ] = 8 _________________________________________ dictionary_x.update('a' =8 ) _________________________________________ dictionary_x.pop('a' ) _________________________________________ dictionary_x.popitem() _________________________________________ dictionary_x.clear()
好好好
组合数据类型应用运算符 1 2 3 4 5 6 7 8 9 dictionary_z = dictionary_x + dictionary_y list_z = list_x + list_y _________________________________________ list_z = list_x * 3 print ('a' in list_x)print ('a' not in list_x)
没见过这么好的
函数 函数参数 1 2 3 4 5 def fuction_x (a,b ): result = a + b def fuction_y (a,b,/,c ): y = c + d
简直令人惊叹不已
参数传递 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def fuction_x (a,b ): result = a + b _____________________________________________________ fuction_x(2 ,3 ) _____________________________________________________ fuction_x(a=2 ,b=3 ) _____________________________________________________ def fuction_x (a,b,/,c,d ): _____________________________________________________ def fuction_x (a,b,*c,**d ): print (a,b,*c,d) fuction_x(1 ,'o' ,(4 ,5 ,9 ),p=2 )
让人心潮澎湃的好啊
参数打包/解包 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def fuction_x (*a ): fuction_x(11 ,23 ,56 ,80 ) def fuction_x (**b ): fuction_x(a=11 ,b=22 ,c=90 ) _____________________________________________________ def fuction_x (a,b,c,d,e ):parameter_x = (1 ,2 ,3 ,4 ,'p' ) fuction_x(*parameter_x) def fuction_x (a,b,c,d,e ):parameter_x = {'a' :1 ,'b' :2 ,'k' :'p' ,2 :'o' ,5 :'n' } fuction_x(**parameter_x)
实在是太令人满意了呀
参数返回值 1 2 3 4 5 6 def fuction_x (a,b ): c = a + b return c print (fuction_x(1 ,2 ))
真是无可挑剔的完美体验
变量作用域 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 def fuction_x (): a = 5 _____________________________________________________ a = 1 b = 3 def fuction_x (): global a b += 1 a += 2 c = a + b _____________________________________________________ def fuction_x (): def fuction_y (): nonlocal a a = 2 fuction_y() b = a + 1 print (b) fuction_x()
递归/匿名函数 这个学起来有点费劲,回头再补
文件/数据 操作 标准文件访问方法 1 2 3 4 5 file_path = 'F:\\mulyilytest\\pytest.txt' with open (file_path, 'r' , encoding='utf-8' ) as file_01: content = file.read()
文本文件操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 flie_01 = open ('F:\\genshinUsercount.txt' ,'r' ,encoding='utf-8' ) r/rb w/wb a/ab _____________________________________________________ file_01.close() _____________________________________________________ with open (file_path, 'r' , encoding='utf-8' ) as file_01: _____________________________________________________ print (file_01.read(2 )) content = file_01.read() file_01.readline() file_01.readlines(5 ) _____________________________________________________ file_01.write('abcd114514' ) file_01.writelines('abcd114514 \n 啊实打实打算' ) _____________________________________________________ file_01.tell() _____________________________________________________ file_01.seek(5 ,0 ) _____________________________________________________
文件与目录(文件夹)管理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import os_____________________________________________________ os.remove('F:\\mulyilytest\\python_test.txt' ) _____________________________________________________ os.rename('F:\\mulyilytest\\pytest.txt' ,'F:\\mulyilytest\\python_test.txt' ) _____________________________________________________ os.mkdir('F:\\mulyilytest\\pytteesstt' ) os.rmdir('F:\\mulyilytest\\pytteesstt' ) _____________________________________________________ os.getcwd() _____________________________________________________ os.chdir('F:\\mulyilytest' ) _____________________________________________________ os.listdir('./' )
数据维度与数据格式化 在代码输出栏里绘表???神金
面向对象 概述 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 class cls_x : name_a = 66 def fuc_x (self,value ): self.value = value print (self.value) instan_x = cls_x() print (instan_x.name_a) instan_x.name_a = 1 print (instan_x.name_a) print (cls_x.name_a) instan_x.str_new = '好i好i好i' print (instan_x.str_new) cls_x.str_new01 = 'n牛牛牛' print (instan_x.str_new01) print (cls_x.str_new01) print ('-----------------------------------------' ) cls_x.name_a = 9 print (instan_x.name_a) print (cls_x.name_a) @classmethod def fuc_y (cls ): print ('bbbb' ) instan_y = cls_x() print (instan_y.name_a) instan_y.str_new = '好i好i好i' print (instan_y.str_new) @staticmethod def fuc_z (): print (111 ) instance = cls_x() instance.fuc_x(233 ) cls_x.fuc_y() cls_x.fuc_z()
类创建 1 2 3 4 5 6 class cls_x : name_a = 66 def fuc_x (self,value ): self.value = value print (self.value)
类成员 类和实例的属性关系课理解为UE中母材质和材质实例的关系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 class cls_x : name_a = 66 def fuc_x (self,value ): self.value = value print (self.value) instan_x = cls_x() print (instan_x.name_a) instan_x.name_a = 1 print (instan_x.name_a) print (cls_x.name_a) instan_x.str_new = '好i好i好i' print (instan_x.str_new) cls_x.str_new01 = 'n牛牛牛' print (instan_x.str_new01) print (cls_x.str_new01) print ('-----------------------------------------' ) cls_x.name_a = 9 print (instan_x.name_a) print (cls_x.name_a)
关于对象:实例和对象本质是一个东西,均为类的继承体
实例方法 1 2 3 4 5 6 7 8 9 10 class cls_x : name_a = 66 def fuc_x (self ): print ('aaaa' ) instance = cls_x() instance.fuc_x(233 )
两种方法中属性修改和继承关系是相同的
类方法 1 2 3 4 5 6 7 8 class cls_x : name_a = 6 @classmethod def fuc_y (cls ): print ('bbbb' ) cls_x.fuc_y()
类方法 vs 实例方法的区别
特性
实例方法
类方法
绑定对象
实例(self
指向实例对象)
类(cls
指向类本身)
装饰器
无特殊装饰器
@classmethod
调用方式
通过实例调用
通过类或实例调用
访问权限
可以访问和修改实例属性和方法
不能访问实例属性,但可访问类属性
常见用途
操作对象实例,修改实例状态
操作类的状态,通常用于工厂方法
静态方法 1 2 3 4 5 6 7 8 9 class cls_x : name_a = 6 @staticmethod def fuc_z (): print (111 ) cls_x.fuc_z()
类方法 vs 静态方法的区别
特性
类方法
静态方法
绑定对象
类(cls
指向类本身)
无绑定对象
装饰器
@classmethod
@staticmethod
调用方式
通过类或实例调用
通过类或实例调用
访问权限
可以访问类属性,不能访问实例属性
不能访问实例或类的任何属性
常见用途
操作类的状态,创建类方法
定义功能函数,逻辑上和类有关
私有成员 1 2 3 4 5 6 7 8 9 10 11 class cls_x : __attribute = 8 def __fuction_1 (self ): print ('aaa' ) instanse_x = cls_x() print (instanse_x._cls_x__attribute)
关于私有成员调用,看封装模块的代码
受保护成员 除了公有和私有成员,还有一种称为受保护成员(Protected Members) 的概念,尽管 Python 本身没有严格的受保护机制,用处不大
1 2 3 4 5 6 7 8 9 10 11 class cls_x : _attribute = 8 def __fuction_1 (self ): print ('aaa' ) instanse_x = cls_x() print (instanse_x._cls_x__attribute)
共有成员 vs 私有成员 vs 受保护成员
特性
共有成员(Public Members)
受保护成员(Protected Members)
私有成员(Private Members)
前缀
无前缀
_
开头
__
开头
访问权限
类内外都可访问
子类可访问,外部不推荐访问
只能在类内部访问(但有例外)
子类访问
可以访问
可以访问
无法直接访问
外部访问
可以访问
按照惯例不建议访问
不能直接访问
使用场景
对外公开的成员
半封装,允许子类继承使用
完全封装,隐藏类的实现细节
构造方法 构造方法在创建类的对象时自动调用,用来初始化对象的属性。它是类的实例化过程中执行的第一个方法,常用于设置实例的初始状态。
相当于在类本身上附加一系列属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Person : def __init__ (self, name, age ): self.name = name self.age = age def introduce (self ): print (f"My name is {self.name} , and I am {self.age} years old." ) person1 = Person("Alice" , 30 ) person1.introduce()
析构方法 Python使用垃圾回收机制(Garbage Collection)来处理内存管理,当对象不再被引用时,它会自动调用 __del__
来进行清理。
值得注意的是,Python 的垃圾回收机制是基于引用计数的。当对象不再有任何引用时,Python 会自动回收内存并调用 __del__
方法。但在实际开发中,除非有明确的资源管理需求,通常不需要定义 __del__
。
1 2 3 4 5 6 7 8 9 class FileManager : def __init__ (self, filename ): self.file = open (filename, 'w' ) print (f"{filename} 文件已打开" ) def __del__ (self ): self.file.close() print ("文件已关闭" )
构造方法和析构方法的区别:
特性
构造方法 (__init__()
)
析构方法 (__del__()
)
作用
在对象创建时初始化属性
在对象销毁时清理资源
调用时机
对象实例化时自动调用
对象销毁时自动调用
使用场景
设置初始状态、传递参数
释放资源(如文件关闭、网络连接关闭等)
手动调用
通常不需要手动调用,但可以通过类名直接调用构造方法
不需要手动调用,由 Python 自动管理
封装 在 Python 中,封装通常结合访问器方法 (getter 和 setter)来管理属性的访问与修改。访问器方法用于控制对私有或受保护属性的读取和写入
优秀的封装能大大降低维护难度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 class Car : def __init__ (self, brand, price,num ): self.__brand = brand self.__price = price self.num = num def get_price (self ): return self.__price def set_price (self, new_price ): if new_price > 0 : self.__price = new_price * self.num else : print ("Price cannot be negative!" ) car = Car("Audi" , 40000 ,2 ) print (car.get_price()) car.set_price(45000 ) print (car.get_price())
继承 定义一个子类,使它获得代码中已有类的属性和方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 class Animal : def __init__ (self, name ): self.name = name def speak (self ): print (f"{self.name} makes a sound." ) class Dog (Animal ): def speak (self ): print (f"{self.name} barks." ) dog = Dog("Buddy" ) dog.speak() _____________________________________________________ class Animal : def __init__ (self, name ): self.name = name def speak (self ): print (f"{self.name} makes a sound." ) class Runner : def run (self ): print (f"{self.name} runs fast." ) class Dog (Animal, Runner): def speak (self ): print (f"{self.name} barks." ) dog = Dog("Buddy" ) dog.speak() dog.run()
单继承 适用于简单的类层次结构,继承关系明确,易于管理。
多继承 可以带来更强的灵活性和功能组合,但要小心类之间的复杂关系以及可能产生的命名冲突
重写 子类和父类具有同名的方法,子类方法会覆盖父类的实现。
子类可以通过 super()
调用被重写的父类方法。
重写的过程中,子类通常会保留父类的功能并增加新的行为,但也可以完全改变父类的方法逻辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 class Animal : def __init__ (self, name ): self.name = name def speak (self ): print (f"{self.name} makes a sound" ) class Dog (Animal ): def __init__ (self, name, breed ): super ().__init__(name) self.breed = breed def speak (self ): super ().speak() print (f"{self.name} is a {self.breed} and barks" ) dog = Dog("Buddy" , "Golden Retriever" ) dog.speak()
多态 多态是面向对象编程中的一个重要概念,指的是不同的对象可以对同一个方法或操作作出不同的响应。换句话说,在多态中,同样的接口,可以根据对象的类型,执行不同的行为 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class Animal : def speak (self ): return "Animal makes a sound" class Dog (Animal ): def speak (self ): return "Bark" class Cat (Animal ): def speak (self ): return "Meow" def animal_sound (animal ): print (animal.speak()) dog = Dog() cat = Cat() animal_sound(dog) animal_sound(cat)
运算符重载 在 Python 中,运算符本质上是特殊方法的另一种表示方式。例如,+
运算符对应的特殊方法是 __add__()
,-
运算符对应的是 __sub__()
,等等。通过重载这些特殊方法,我们可以自定义运算符在自定义对象中的行为。
(这B玩意改底层算法逻辑,看着都费劲,还容易和别的底层代码出现奇怪的耦合bug,我的评价是,不学!)
想要啥新算法自己写方法或者导库,别整这玩意
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 class Vector : def __init__ (self, x, y ): self.x = x self.y = y def __add__ (self, other ): return Vector(self.x + other.x, self.y + other.y) def __sub__ (self, other ): return Vector(self.x - other.x, self.y - other.y) def __eq__ (self, other ): return self.x == other.x and self.y == other.y def __str__ (self ): return f"Vector({self.x} , {self.y} )" v1 = Vector(2 , 3 ) v2 = Vector(5 , 7 ) v3 = v1 + v2 v4 = v1 - v2 print (v3) print (v4) print (v1 == v2)
下面是 Python 中一些常见的运算符及其对应的特殊方法:
运算符
特殊方法
+
__add__
-
__sub__
*
__mul__
/
__truediv__
//
__floordiv__
%
__mod__
**
__pow__
==
__eq__
!=
__ne__
>
__gt__
<
__lt__
>=
__ge__
<=
__le__
异常 出异常问GPT,这玩意总结了也没屌用
这里有个好东西ChatGPT桌面版
Python常用库 常用库速查
官方的包管理库
官方提供的标准库文档
按用途类型筛选库