Python 重点笔记

注释

1 #

2 ''' ... ''' / """ .... """

行尾的冒号和下一行的缩进代表一个代码块,缩进通常为4个空格

关键字

变量

定义:不用说明类型,自动类型

可以随时改变(重新赋值时) 弱类型语言

id()可以获取变量的地址

字符串

 ''' ''' 可以跨行

前缀加上r或R 将原样输出 ,转义符不就行转义

+ 拼接字符串:只能字符串类型拼接

srt(num)将整数转换为字符串

len()计算字符串长度:utf-8 编码中文占三个字节

str[start:end:step]:可以用来截取字符串

str.split(sep,maxSplit):分割字符串 sep用来指定分隔字符,默认为所有空字符 返回字符串列表

str.count(sub):用来返回子字符串(sub)出现的次数

str.find(sub):若不存在返回 -1,否则返回首次出现的索引  /也可以 用 in 关键字

str.index():跟find一样,只不过不存在会抛出异常

str.startswitch(pre):返回bool值 是否以pre开头

str.endswitch(end):检查是否以end结尾

str.lower()/upper():转换为大小写

str.strip(' string' ):用来除去字符串两端的指定字符,默认为除去特殊字符和空格

str.l/r+strip('string'):用来除去一端的指定字符

格式化字符串:\

    赋值时用{:+s/d..}来占位,str.format(对应元素)来替换 

str='im {:s}'
print(str.format('sb'))#输出 im sb
print(str)#还是按照原来显示#输出 im {:s}

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

正则表达式:

元字符:

正则表达式 – 元字符 | 菜鸟教程 (runoob.com)

[]:表示匹配的字符集合  最前面+^表示排除的意思---非(整个集合排除)

\转义字符 ,或者加 R或r代表原字符串

类型转换函数

运算符  

    python 可以连续比较 如: 0<a<100

   逻辑与:and 逻辑或:or 逻辑非:not  (不支持符号逻辑表达了 ||等

   

for循环 

  range(),返回的是一个可迭代对象 : 只有一个参数时,表示指定end,并不包括end

  Python3 range() 函数用法 | 菜鸟教程 (runoob.com)

for x in range(4): # 相当于for(int x;x<4;x++) 
    print(x)       # cout<<x;

   注意: 可以迭代 列表,元组,集合,字典等

pass空语句:占位符,不作任何作用

re模块实现正则表达式

import re

re.match(pattern,string,[flags]):只在开始出进行匹配,失败返回none 成功返回Match对象
re.search(pattern,string,[flags]):整个字符串中搜索 第一个 匹配的值,返回match对象
re.findall(pattern,string,[flags]):匹配整个字符串中所有符合的子字符串,返回列表

pattern:模式字符串--正则表达式

string:原文本

flags:可选参数,如不区分大小写

match.span():返回匹配位置的元组-不可变序列
re.split(pattern,string,[maxsplit],[flags])//pattern 为 用正则表达式来代表分隔符
re.sub(pattern,repl,string,count,flags)//repl 为替换的字符串

序列

Python有6个序列的内置类型,但最常见的是列表和元组。

索引:

  可以为负数 ,倒数第一个为-1 ,以此类推

特殊:

  序列可切片 【start:end:step】

  序列可以乘法: *3  内容为重复三次的结果

  检查元素是否属于某个序列:

value in sequence
或
value not in sequence 
都会返回bool值

len()返回序列的长度

max() min() 分别返回序列的最大值,和最小值 {只能是纯srt类型,或纯数字类型}

列表

    [] 表示 

    元素类型可以不同!

    list()  :可以将可迭代类型数据转换成列表

    del listname :删除列表 

    for循环 与 enumerate()函数 同时输出索引 和元素值

for index,item in enumerate(listName):
     print(index,item)

列表添加方法(调用对象的方法)

   添加元素:lsitname.append(value)

  添加整个列表:lsitName.extend(list) 

  都是添加在末尾

删除

  按索引来删除或修改: 

del list[index]

  根据元素值删除:必须存在该元素,否则会抛出异常

listName.remove(value)

基本方法:

 .count():返回元素出现次数 

 .index(): 返回元素首次出现的index

 sum(listname):统计元素总和

 .sort()  :默认升序,可以有参数

 sorted(listName):返回的是一个副本,原不变

 列表推导式子

list = [函数/式子 for 变量 in 可以迭代对象 +条件(*)]

    

     结果为[4,10] 先执行条件 ,再执行表达式

元组 (tuple)

 不可变序列---不可变列表:用()表示

 创建

  空元组:

tuple=()

  tuple()函数:参数是可迭代对象

  一个元素的tuple:

tuple=('123',)#要加一个逗号,不然是str

  

  推导式子:不能直接像列表一样一次性赋值,必须先产生对象(如range()),再用tuple()赋值

改变

 不能改变,删除单个元素:也就不支持一些方法如append()

 要么重新对整个tuple进行赋值,要么在后面连接一个新的元组

列表与元组区别:

字典(dictionary)

 用{key:value} 表示

 字典中的key是不可变的,所以可以用数字,字符串,元组,不能用列表 

 通过key来读取,而不是索引下标

创建:

  直接赋值

  =dict()创建空字典

  = dict(zip(list1,list2) ) :zip函数将多个元组或列表组合起来,返回一个zip对象,再用dict转换为字典

  ={name_tauple:list}:会自动一一对应

推导式:={i:random.randint(10,100) for i in range(1,5)}

删除:

  del dictionary :删除整个字典

  del dictionary[key]:删除单个元素

添加:

  dictionary[key] = value :增加元素,若key重复,则覆盖

  

访问:

 通过key查询:dictionary[key]

 print直接打印

 dictiona.get(key):来获取值

遍历:

for item in dictionary.items():
   pritn(item)

区别

异常处理

1try +except

2)try + except +else

3)try +except +else +finally

try: #要测试异常的代码块1
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:                                #抛出异常执行这 代码块2
    print "Error: 没有找到文件或读取文件失败"
else: 
    print "内容写入文件成功"                     #没抛出异常执行这 可以省略
    fh.close()
finally:
    print("不管怎么样这里都执行'')               #不管怎么样都执行  标准格式需要finally

4)raise :抛出一个异常

5)assert :断言 如果 条件为假则抛出AssertionError异常

message可省略

assert 条件表达式 ,'message'

6)assert + try + except:配合使用,捕获assertionError异常

try:
    assert 1<0 ,"断言"
except AssertionError :#补货了
 print("捕获了断言异常")
print("能继续执行")

注意

1)try..except 捕获异常后 ,可以继续执行下去

2)assert单独使用,程序会中断,不会执行下去

函数

关与_main_属性:

Python main() 函数 - 菜鸟教程 (cainiaojc.com)

def max(b,a=6):#默认赋值的参数要在最后
    '提供注释'
    if a>3:
        print(a)
   

print(max.__defaults__)#返回默认参数值,是元组
max(3)

1)定义函数的第二行可以提供注释 ,调用时,会有提示

2)形参可以使用默认值,有默认值的形参必须在最后定义---配合调用规范

      赋值的对象最好是不可变对象(如常数6),不然默认值改变,就失去了默认值的意义

3)函数名.__defaults__可以返回默认参数的元组

不定长参数

类似于传指针?

4) 定义形参时 

*parameter :表示接受任意多个实际参数并放到一个元组中 parameter相当于一个可迭代对象
**parameter:接受任意多个 键对值 参数,并将其放到一个字典中

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

5) 局部变量加 global 该变量就变成全局变量/ 或函数体内声明已有的全局变量

匿名函数 lambda

result= lambad (参数):expression

6) 参数能有多个,但表达式只能有一个且只能返回一个值 

对象程序设计

跟其他语言的类差不多

python天生就是面向对象的

类是封装对象属性和行为的载体,对象是类的实例。

class A: #定义类
    '提供注释'
    def __init__(self,a,b) : #定义构造函数 默认为__init__
        print(a+b)
       
  


C=A(2,4);#实例化,带参数
print(C)

1) 构造函数固定为__init__

2)定义__init__时第一个形参必须是self,相当于c++里的this,是一个自身的引用,但传参时不用理会

类属性 与 对象属性 

都可以用时再定义,用.访问 

类名.定义--->类属性

实例对象名.定义--->对象属性

【python】详解类class的属性:类数据属性、实例数据属性、特殊的类属性、属性隐藏(二)_brucewong0516的博客-CSDN博客_python 定义类属性

类属性

1)定义类内函数体外的成员,通过类名访问,而不是实例化后的对象名

2)被所有实例共享,指向同一个值

对象属性

1)定义在函数体内部(包括__init__),通过对象名访问

2)不共享

私有成员

私有变量的作用:确保了外部代码不能随意修改对象内部的状态(通过调用内部方法来访问),这样通过访问限制的保护,代码更加健壮。

   (1) 一个下划线开头,如_name

      这种形式的私有变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思是:“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问。”

   (2)两个下划线开头,如__name

问题:双下划线开头的实例变量是不是一定不能从外部访问呢?

答:也不是,只是不能直接访问__name,是因为python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过实例名._Student__name来访问__name变量。

但是强烈建议不要这么做,因为不同版本的Python解释器可能会把__name改成不同的变量名。

>>>总的来说,Python本身没有任何机制阻止你干坏事,一切全靠自觉。

http://www.136.la/python/show-63029.html

装饰器@property

把方法装饰成实列属性---通过方法名来访问方法,从而不需要添加一对小括号。

只能读,不能修改这种属性(因为实际是一种方法)--可以利用这种机制设置为只读成员

....//定义类 
@property //装饰为属性area,通过实例名直接访问,返回的是计算的结果
def area(self):
    return self.width*self.height

继承

class ClassName(父类列表,用逗号隔开):
    类体

1)成员/方法会被继承

2)方法不适合时,可以重写--重写定义,方法名一样

3)关于派生的__init__函数

python中super().__init__()_BeanInJ的博客-CSDN博客_super().__init__()

派生类中若无init函数

则会自动调用父类的__init__()构造函数

或者利用super().__init__()语句主动调用父类的__init__函数。

class A:
    def __init__(self) -> None:
        print('我是父类')


class B(A):
    "a的子类"
    def __init__(self) -> None:
        super().__init__() ##这样主动调用 或者 省略子类的init函数都将 执行父类的init函数

c=B()

模块(库)

类比为其他语言的库 

模块名+.py的形式

有标准库,第三方库,包等

导入模块

1) import 模块名   

每导入一个模块,都会创建一个新的命名空间--以辨别不同库的重名

什么是命名空间_XX風的博客-CSDN博客_命名空间

调用模块里面的 成员/方法都要

用模块名.进行访问

2) from 模块名 import 成员/方法 列表

用这种方式导入的特定成员/方法 前面不用加库名就能访问 

但要小心与已有的名字重名-会覆盖

导入自定义模块的三种方法

sys库中  sys.pyth 变量中有 path目录

1)通过 sys.path.append() 一次性添加目录

2)增加 .pth 文件 

3)通过设置环境变量

python如何导入自己的模块_python_脚本之家 (jb51.net)

模块属性名:

每个模块定义中都有变量 __name__,可以通过值确定在哪个模块中执行

顶级模块(主程序,当前py文件)中的变量值内容为__main__

if __name__=='__main__':
...

为了避免模块重名和分层次管路---引入了包的概念

包是一个分层次的目录结构---就是一个文件夹,内含子包和子模块

导入包/子模块

1) 必须有个__init__.py的PY文件,此模块在导入包时会自动执行

2)导入指定模块 ,访问时需要加入前缀--包名.模块名 

import 包名.模块名 

2)导入指定模块,访问时需要加模块名

from 包名 import 模块名

3)可直接使用,不用加前缀

from 包名 import 模块名.变量名

文件操作 

跟c一样

打开,关闭

一般打开必须及时关闭

f=open('TEXT1.txt','a+',encoding='utf-8')
f.write('好好好')
f.close()

读取文件

1)读取指定个数,如果省略size则一次性读取所有内容

file.read(size)

2) 移动文件指针

file.seek(往后移的个数,whenceCode)
0代表从文件头开始,1当前位置,2尾开始

3)读取一行

file.readline()

4) 读取整行 :返回时一个字符串列表

file.readlines()

删除文件

利用os模块,如果文件不存在会报错

import os 
os.remove(path)

目录(文件夹操作)操作

可以对应linux下的命令,是利用函数库联系操作系统进行操作,因而执行结果与操作系统有关

基本操作(os模块)

使用内置OS模块进行操作

1)os.name :获取操作系统类型

nt表示windows,posix表示UNIX类系统

2)os.linesep:获取换行符

3)os.sep:获取路径分隔符 :windows为\

路径

基本操作

注意:需要用\对\进行转义-->\\

1)os.getcwd():获得当前工作目录 -current working directory

2) os.abspath(相对路径/文件名):获得绝对路径

3)os.path.join(path1,path2...):拼接多个路径

      a 只会单纯拼接,不会检查该路径是否存在

      b 如果没有一个绝对路径,那拼接成的也是相对路径

      c 如果有多个绝对路径,只取最后一个绝对路径,前面的全部忽略 

4)os.path.exists(path):判断路径是否存在 返回bool值

创建

1)创建最次级目录,如果该目录的上一级不存在-抛出异常

os.mkdir('path',mode=...)

此mode是linux下的文件权限,其他操作系统可忽略

2)创建多级目录(递归创建),会一级一级的从高级目录到最次级目录创建

os.makedirs(name,mode=...)

相当于linux下的 -r参数

删除

1)目录里内容为空才可删除

     必须存在该目录且内容为空

os.rmdir('path')

2) 删除该目录及子内容-- 利用shutil模块

import shutil
shutil.rmtree('path')

遍历目录-walk

walk:返回一个包含三个元素的元组-->

第一个:目录字符串

第二个:子目录列表

第三个返回元素:子文件列表

os.walk(top,topdown,onerror,followlinks)

top:用于指定要遍历的根目录

topdown:指定遍历顺序,如果为TRUE 则从上而下,FALSE则从下到上

onerror:错误处理方式

followlinks:与符号连接有关

例子-->

 

重命名文件或目录

os.rename(src,dst)

可以为目录或文件名,必须要存在

获取文件基本信息

如最后一次访问时间等,返回的是一个对象

os.stat(path)

--->

Py与SQL

还不会等待学

MySQL 安装 | 菜鸟教程 (runoob.com)

通过pymysql与其连接

pymysql的安装及使用_珂鸣玉的博客-CSDN博客_pymysql安装

Python3 MySQL 数据库连接 – PyMySQL 驱动 | 菜鸟教程 (runoob.com)

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

基础语法完结 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值