• python笔记


    一、语法

    1、代码规范

    1)使用缩进来划分代码块
    2)支持数据类型

    类型
    整形int
    浮点型float
    字符串
    列表list区别数组,数组是一组相同类型的元素,列表可以元素类型不同
    元组
    字典
    集合
    布尔型和C一样,非0都为真,0为假,如果是序列(或字符串),长度不为0为真,为0为假
    可迭代对象类似列表,但不一样,range()返回的为可迭代对象

    对于字符串,“…”或‘…’表示一行,“““…”””或‘‘‘…’’’表示多行

    字符串的处理:
    @1 字符串可以类似C中的下标(索引)获取一个字符,并且支持负数,表示倒数第几个
    @2 使用:来切片,提取子字符串,str[n:m]表示提取str的从n下标开始m长度的字符串,m省略为0,n省略为全部
    @3 索引越界会报错,切片越界解释器会自己处理

    列表:
    @1 支持索引和切片操作,列表切片,操作同字符串,返回的仍为列表(发生copy)
    @2 为切片赋值相当于修改元素(不发生copy吗?),如果为空,相当于删除元素
    @3 不同于字符串,列表元素可以修改
    @4 嵌套列表,相当于实现一个行列式了,索引方位类型二维(多维)数组

    3)运算符

    符号
    +算术运算的加法,字符串连接,列表合并
    -
    *算术运算的乘法,作用字符表示重复几次,解包时
    /除法
    **指数运算
    =赋值运算
    <
    <=
    >
    >=
    ==
    !=

    @1 多重赋值
    我们一般的赋值操作都是a = 1,多重赋值为这样 a,b = 1, 2 ,相当于a=1,b=2
    对于多重赋值,也可以用可迭代对象作为右值,可迭代对象包括,列表,元组,字典,字符串,生成器
    @2 压包和解包
    解包
    结合多重赋值,右值为可迭代对象,这种操作称为解包。
    例如:

    a = [1, 2, 3, 4]
    x,y,z,w = [1, 2, 3, 4]
    
    • 1
    • 2

    将一个列表赋值给了变量,叫解包。
    或者

    x,y,*z = [1, 2, 3, 4]
    
    • 1

    那么z将输出列表为

    z = [3, 4]
    
    • 1

    如果这样

    x,y,*_ = [1, 2, 3, 4]
    
    • 1

    那么只有xy有值,后面的都忽略

    压包(zip)

    a = [1, 2, 3]
    b = [4, 5, 6]
    zip(a, b)
    
    • 1
    • 2
    • 3

    zip返回一个迭代对象,可以用for遍历,遍历结果为

    1, 4)
    (2, 5)
    (3, 6
    • 1
    • 2
    • 3

    4)关键字

    关键字
    as

    2、流程控制

    1)条件语句

    if

    # 一个条件
    if x<10:
    	...
    
    # 多个条件
    if x<10:
    	...
    else if x>100:
    	...
    # elif是else if的缩写
    elif x>20:
    	...
    else:
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    match语句类似switch case
    第一种方式,status为数值(字面值模式)

    match status:
    	case 100:
    		print(100)
    	case 200:
    		print(200)
    	case 300 | 400:
    		print(200, 400)
    	case _:
    		print("othre")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    第二种方式 ,status为一个元组,元组元素可以为变量。

    match status:
    	case (1, 2):
    		print(1)
    	case (x, y):
    		print(2)
    	case _:
    		print(3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    第三种方式,status为一个类对象,对象实例化的时候可以默认参数顺序,也可以指定参数赋值。

    class Point
    	x: int
    	y: int
    match point:
    	case Point(0, 1):
    		print(1)
    	case Point(x=0, y=1):
    		print(2)
    	case Point(y=1, x=0)
    		print(3)
    	case _:
    		print(4)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    第四种方式,status为列表,比较列表是否相同。

    match status:
    	case []:
    		print(1)
    	case [1]:
    		print(2)
    	case [1, 2]:
    		print(3)
    	case _:
    		print(4)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    守护项,在case后面添加if语句。
    先执行case,再执行守护项,如果守护项的值为假,那么这个case就跳过了。

    match status:
    	case (1, 2):
    		print(1)
    	case (x, y) if x>y:
    		print(2)
    	case _:
    		print(3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    @1 方式类似switch case,分支条件可以用|(或)组合,“_”代表default

    如果需要一个值和多个值比较,用match方法

    2) 循环语句

    while

    for
    python中的for语句,依赖某个序列,不同于C,类似于shell
    在用for遍历集合的时候,注意集合的竞态导致错误的结果

    varlist = [1, 2, 3, 4, 5, 6]
    for var in varlist:
    	print(var)
    
    • 1
    • 2
    • 3

    使用for按索引迭代列表

    varlist = [1, 2, 3, 4, 5, 6]
    for i in range(len(varlist)):
    	print(varlist[i])
    
    • 1
    • 2
    • 3

    enumerate() ???

    break
    break功能和C类似。
    对于for可以有else子句,else子句在这个for执行break后会执行。

    continue
    同C。

    pass
    pass是一条空语句,类似C中的 ; 。

    3、函数

    1) 定义函数
    def (var, ...)
    	"""文档字符串(单行)"""
    	...
    	# 如果有返回调用return
    	return ret
    
    • 1
    • 2
    • 3
    • 4
    • 5
    def (var, ...)
    	"""文档字符串(多行)
    	
    	多行第二行需要换行后写
    	"""
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2)传参

    @1 默认参数,给传参初始化一个值,如果调用时未传参,则使用默认值(类似C++的默认参数)
    不同的是,python的默认参数可以是变量,但是参数默认值在定义的时候值就确定了,
    更进一步,python的默认参数,只在定义时计算一次
    @2 必选参数,没有默认值得为必选参数,调用时必须赋值
    !!! 感觉对象作为参数的时候,类似于C++中的引用,代码里面可以修改掉
    @3 位置参数和kv(关键字)参数
    当函数定义了默认参数后,没有指定默认参数的为必选参数(调用函数时必须赋值),指定了默认值得参数为可选参数

    在调用函数时,直接传参的称为位置参数,kv方式传参的称为关键字参数
    调用函数必须遵循一下规则:
    (1)必选参数必须赋值
    (2)可选参数可以赋值也可以不赋值
    (3)关键字参数必须在位置参数之后传参
    (4)关键字参数必须是定义时声明过得参数
    (5)在意义上同一个参数不能赋值2次,
    什么是在意义上???
    比如传了一个位置参数和关键字参数,而这个关键字参数的关键字刚好是一个必选参数,那么在意义上这个必选参数就相当于传了2次。
    比如:

    def func(key, var=2)
    	...
    
    func(10, key=11)
    
    • 1
    • 2
    • 3
    • 4

    10首先赋值给key,后面看到有用关键字参数方式给key赋值为11,会报错。
    (5)关键字参数可以乱序
    @4 * * arg和*arg形参
    **arg传参为字典,接受所有剩余的关键字参数
    arg形参接受一个元组,接受所有剩余的位置参数
    所以
    arg必须在前面,如果这2个形参都有的话
    @5 函数定义的位置参数传参和关键字传参

    def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2)
    
    • 1

    / 前面的只能位置传参,* 后面的只能关键字传参,中间的既可以位置传参,又可以关键字传参。

    3)lambda表达式

    python官方文档

  • 相关阅读:
    引擎入门 | Unity UI简介–第2部分(3)
    mysql 45 讲学习
    科研学习|研究方法——使用python强大的Statsmodel 执行假设检验和线性回归
    【Redis】Redis整合SSM&&Redis注解式缓存&&Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)
    Kubernetes下容器化应用部署实战
    docker安装Nginx、tomacat、Elasticsearch
    全球第二大服装集团PVH验厂纲要
    虚拟化运维监测管理系统云安成为混合工作时代的 VDI
    <shell>《Shell脚本-极简实用手册(高级)》 (自用、持续更新)
    LeetCode笔记:Weekly Contest 319
  • 原文地址:https://blog.csdn.net/GeiGe123/article/details/126799305