【Python】基础

一、语法

1.1 基础【略】

Python3 教程 | 菜鸟教程

1.2 引入模块

[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"]

1.3 python包

物理层面:包就是一个文件夹,该文件夹下包含了一个__init__.py文件,该文件夹可用于包含多个模块文件

逻辑层面:包的本质依然是模块

作用:当模块文件越来越多的时候,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块。

第三方包

Anaconda安装使用

GitHub - jobbole/awesome-python-cn: Python资源大全中文版,包括:Web框架、网络爬虫、模板引擎、数据库、数据可视化、图片处理等,由「开源前哨」和「Python开发者」微信公号团队维护更新。

1.4 对象

在类中定义成员方法和定义函数基本一致,区别:

def method(self , 参数1,参数2 ...):

        方法体

self 关键字是成员方法定义的时候,必须填写的。

  • 表示类对象自身
  • 使用类对象调用方法时,self 会自动被python传入
  • 在方法内部,想要访问类的成员变量,必须使用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__()

  • 构造类会自动执行
  • 构造类将传入参数自动传递给__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个下划线】

1.5 继承

支持多继承,即一个类可以继承多个父类

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,"",""]

1.6 多态

完成某个行为时,使用不同的对象会得到不同的状态

1.7 闭包

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()

单例模式:只获取唯一的类对象,持续复用

节省内存,节省创建对象的开销

1.8 多线程【threading】

进程间内存隔离,不同进程拥有各自的内存空间。

线程内存共享,线程是属于进程。

并行执行的意思是指同一时间做不同的工作

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()

1.9 异常捕获

try:

  语句

except NameError as e:

        print(e)

except (NameError,ZeroDivisionError) as e:

        print(e)

except Exception as e:

        print(e)

else:

        没有出现异常

finally:

        无论如何都要执行的代码

你可能感兴趣的:(python,开发语言)