Python3 教程 | 菜鸟教程
[from 模块名] import [ 模块 | 类 | 变量 | 函数 | * ] [ as 别名]
__main__ 不想导入模块的时候执行函数调用
def test(a, b):
print(a+b)
# 内置变量__name__
if __name__ == '__main__':
test(1, 2)
# __all__
# 如果一个模块中有all变量,当使用from xxx import * 导入时,只能导入这个列表中的元素
# __all__ = ["test"]
物理层面:包就是一个文件夹,该文件夹下包含了一个__init__.py文件,该文件夹可用于包含多个模块文件
逻辑层面:包的本质依然是模块
作用:当模块文件越来越多的时候,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块。
Anaconda安装使用
GitHub - jobbole/awesome-python-cn: Python资源大全中文版,包括:Web框架、网络爬虫、模板引擎、数据库、数据可视化、图片处理等,由「开源前哨」和「Python开发者」微信公号团队维护更新。
在类中定义成员方法和定义函数基本一致,区别:
def method(self , 参数1,参数2 ...):
方法体
self 关键字是成员方法定义的时候,必须填写的。
# 类的组成:
# 属性:成员变量
# 行为:成员方法
# 函数是写在类外,定义在类内部,称为方法
class Student:
name = None # 属性
age = None
def study(self): # 行为【方法】
print(f"{self.name}要学习:语文、数学、英语")
student = Student()
student.name = "张三"
student.age = 30
print(student.name)
student.study()
def test(): # 函数
print("XX")
构造方法__init__()
class Student:
# 定义了构造方法,可以省略不用写
# name = None
# age = None
def __init__(self, name, age):
self.name = name
self.age = age
print(f"Student类创建了一个类对象:{self}")
def study(self):
print(f"{self.name}要学习:语文、数学、英语")
studentInit = Student("王五", 18)
常用内置方法【魔术方法】
__init__ 、__str__【类似toString】、__lt__【比较对象大小,类似compare】、__eq__【类似equals】
私有成员变量和方法,以__开头【2个下划线】
支持多继承,即一个类可以继承多个父类
class 类名(父类1,父类2,父类3...):
类内容体【如果继承功能够了,不需要增加内容,可以使用pass】
父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级
即:先继承的保留,后继承的覆被覆盖
问:python为什么支持多继承
类型注解的语法 变量:类型
如:stu : Student = Student() my_list : list[int] = [1,2,3]
# 注释
var_1 = random.randint(1,10) # type: int
类型注解只对提示有效
class Student(Person):
# 定义了构造方法,可以省略不用写
# name = None
# age = None
def __init__(self, name: str, age: int): # 形参进行类型注解
self.name = name
self.age = age
print(f"Student类创建了一个类对象:{self}")
def study(self) -> str: # 返回值进行类型注解
print(f"{self.name}要学习:语文、数学、英语")
# Union 联合类型注解
from typing import Union
my_list: list[Union[str,int]] = [1,2,"",""]
完成某个行为时,使用不同的对象会得到不同的状态
def outer(school: str):
def inner(cls: str):
print(f"<{school}>{cls}<{school}>")
return inner
fn1 = outer("A大学")
fn1("2年3班")
fn2 = outer("B大学")
fn2("3年2班")
注:nonlocal 申明才能修改外部变量
装饰器其实也是一种闭包,在不破坏目标函数原有的代码和功能的前提下,为目标函数增加新功能。
def clean(func):
def inner():
print("洗漱")
func()
print("起床洗脸")
return inner
@clean
def sleep():
import random
import time
print("睡眠中。。。")
time.sleep(random.randint(1, 5))
# 相当于将sleep作为函数传给clean
sleep()
单例模式:只获取唯一的类对象,持续复用
节省内存,节省创建对象的开销
进程间内存隔离,不同进程拥有各自的内存空间。
线程内存共享,线程是属于进程。
并行执行的意思是指同一时间做不同的工作
import threading
import time
def sing(msg):
while True:
print(msg)
time.sleep(1)
def dance(msg):
while True:
print(msg)
time.sleep(1)
if __name__ == '__main__':
sing_thread = threading.Thread(target=sing, args=("唱歌。。。",))
dance_thread = threading.Thread(target=dance, kwargs={"msg": "跳舞"})
sing_thread.start()
dance_thread.start()
try:
语句
except NameError as e:
print(e)
except (NameError,ZeroDivisionError) as e:
print(e)
except Exception as e:
print(e)
else:
没有出现异常
finally:
无论如何都要执行的代码