python笔记

字符串和数值类型是不可变数据类型,当对应的变量的值发生变化时,会开辟新的空间地址存放新的变量值,比如传值函数在函数内改变变量会产生新变量地址

- lambda匿名函数
定义匿名函数,临时创建一个函数,只能使用一次
lambda 形参列表: 函数体(一行代码)
不需要return,运算结果就是返回值

fun(lambda a,b: a if a>b else b, 3, 2)
#返回两个数的最大值

列表[]

快速生成列表:
[列表元素表达式 for 自定义变量 in 可迭代对象]

list = [ele*2 for ele in range(15)]

元组()

元组是不可变序列,不可以被修改
但可以修改元组中所包含的list列表元素

定义只有一个元素的元组,需要加逗号

tuple = (1,)
  1. 元组在创建时间和占用的空间上都优于列表
  2. 元组能够对不需要修改的数据写保护

字符串""

字符串是由unicode构成的不可变序列

  1. ord()字符转码值
  2. chr()码值转字符

集合{}

不重复,无序,就不支持索引

  • 创建空集合------->set()

集合生成式
{集合元素的表达式 for 自定义变量 in 可迭代对象}

字典

dict = {key : value}
dict[key] = value

key通常是字符串或者数字,value可以是任意数据类型

创建空字典:
{}或者dict()

  • 字典的key是唯一的,如果存在重复的key,那么后面的value会覆盖前面的

字典生成式
{字典key的表达式: 字典value的表达式 for 表示key的变量,表示value的变量 in zip(可迭代对象,可迭代对象)}

导入模块import

  • import 模块
  • 导入模块的指定功能 from 模块 import 函数、类、变量…导入的项将直接导入到当前命名空间中,这可能会导致命名冲突,特别是当两个模块有相同名称的函数、类或变量时。
  • from math import *
  • import 模块 as 别名
  • from 模块 import 函数、类、变量… as 别名

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 使用__name__可以避免模块中测试代码的执行 ,__name__是模块名,如果模块是在最高层代码环境中执行的,__name__ 被设为字符串 __main__
  • 使用__all__可以控制import *时,哪些功能被导入(import 模块方式,不受__all__的限制,)形式:__all__ = ['function']别的文件导入后只能使用特指的function()

  1. 从结构上看,包是一个文件夹,该文件夹包含一个__init__.py文件,该文件夹可以用于包含多个模块文件,从逻辑上看,包可以视为模块集合
    在这里插入图片描述

  2. 导入包
    import 包名.模块
    包名.模块.功能
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    from 包名 import 模块
    模块.功能
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    from 包名.模块 import 功能
    直接调用功能
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    from 包名.模块 import *

  3. 在__init__.py中增加__all__=[允许导入的模块列表](针对from 包 import *方式生效,对import ××方式不生效)

在这里插入图片描述

self代表当前对象本身
在方法内部,要访问成员变量和成员方法,需要使用self

静态方法
@staticmethod 可以将类内方法转换为静态方法,如果是一个静态方法,可以不带self
调用方法:1.通过对象实例调用 2 .通过类名调用

构造方法

def __init__(self, 参数列表)........

一个类只有一个__init__方法,如果写了多个,只有最后一个生效
也有实现多个构造方法,

构造方法没有返回值

继承

class deriverclassname(baseclassname):
		statement

派生类就会自动拥有基类定义的属性和方法,但私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问
“object”是所有其他类的基类,pycharm里面使用ctrl+h查看类继承结构

多重继承
如果有同名的成员,遵循从左到右的继承优先级(左边的父类优先级高)

子类里面调用父类方法:
通过super().xx方式去调用父类的方法
比如super().init()在子类构造器里调用父类构造器
如果子类和父类出现同名的成员,可以通过父类名、super()访问父类的成员

类型注解

像a:str这种形式的,像rust里面的类型说明

dicts : dict[str,int] = {"no": 100}

注释里面n2 = 1 #type:int

函数方法中的类型注解

def 函数/方法名(形参名:类型,形参名:类型. . .) -> 返回类型值:
		函数体

针对多个要求使用Union类型
Union[X, Y]等价于X |Y,满足X或Y
导入Union:from typing import Union

isinstance(object, classinfo)用于判断对象是否为某个类或其子类的对象

当调用对象成员时,会和对象本身动态关联

魔术方法(像函数重载)

str()

class对象

将类本身当作对象使用

静态方法

@staticmethod将方法转换为静态方法
静态方法不会接受隐式的第一个参数self
j静态方法既可以由类调用,也可以由实例调用

抽象类

1.abc模块定义抽象基类
2.使用@abstractmethod声明抽象方法

from abc import ABC,abstractmethod
#抽象类
class typename(ABC):
		#抽象方法
		@abstractmethod
		def func(self):
				pass

抽象类不能实例化
子类继承抽象类,并实现抽象方法
抽象类需要继承ABC,并且需要至少一个抽象方法
如果一个类继承了抽象类,必须实现抽象类的所有抽象方法,否则它仍是一个抽象类

错误和异常

执行时检测到的错误就是异常

捕获异常的语法

try:
		可能出现异常的代码
except [异常 as 别名]:
		发生异常时,对异常处理的代码
[else:]
		没有发生异常,执行的代码
[finally:]
		不管有没有异常,都要执行的代码

可以由多个except子句,捕获不同的异常
如果发生异常,只会匹配一个except子句(先写具体的异常,再写基类异常)
一个except子句,可以捕获不同的异常(except (IndexError, ZeroDivisionError, NameError) as e:

主动触发异常
raise语句支持强制触发指定的异常

try:
		raise ZeroDivisionError("主动触发除0异常")
except: ZeroDivisionError as e:
		print(f"捕获到的异常信息->{e} 类型->{type(e)}")

自定义异常

要求:当接收person年龄时,要求范围在18-120之间,否则抛出一个自定义异常

class ageError(Exception):
		pass
while True:
	  try:
				age=int(input("请输入年龄(18-120):"))
				if not (18<=age<=120):
						raise ageError("年龄需要在18-120之间")
				break
		except ValueError as e:
				print("你输入的不是整数")
		except ageError as e:
				print(e)
print(f"你输入的年龄是{age}")

文件操作

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
mode = w 如果文件不存在,会创建文件,写入时会清空文件内容
mode = a 是以追加方式写入

os.path.exists(path)
os.remove(path)

目录操作

import os
os.path.isdir(path)
os.mkdir(path)
创建多级目录-》os.makedirs(多级目录path)
os.rmdir(path)
删除多级目录-》os.removedirs(多级目录path)

文件信息

import os 
import time

f_stat = os.stat(path)
print(f"文件大小->{f_stat.st_size} \n"
		  f"最近的访问时间->{time.ctime(f_stat.st_atime)} \n"
		  f"最近的修改时间->{time.ctime(f_stat.mtime)} \n"
		  f"文件创建时间->{time.ctime(f_stat.ctime)}")

在这里插入图片描述在这里插入图片描述

with open("path", "r", encoding="UTF-8") as f:
    lines = f.readlines()
    print("-----文件内容-----")
    for line in lines:
        print(line, end="")
        
print("\n文件是否关闭->", f.closed)

在这里插入图片描述输出多级目录下的文件信息

  1. 获取文件夹(目录)的所有内容(元素),包含了文件和目录
  2. 判断是文件还是目录,输出对应的信息
  3. 如果是目录,输出信息后递归处理
  4. 如果是文件,直接输出信息
def print_dir_all_content(dir_path):
    content_list = os.listdir(dir_path)
    for ele in content_list:
        child_ele = dir_path + '/' + ele
        if os.path.isdir(child_ele):
            print(f"目录:{child_ele}")
            print_dir_all_content(child_ele)
        else:
            print(f"文件:{child_ele}")

time模块

import time 
t = time.time()  #时间戳

t = time.localtime()  #结构化时间

t = time.strftime('%Y-%m-%d %H:%M:%S', t)
def get_time():
	t = time.localtime()
	s = time.strftime('%Y-%m-%d %H:%M:%S', t)
	return s
  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值