Python基础(笔记)

本文全面介绍了Python的基本概念,包括数据类型、内置函数、流程控制、文件操作及异常处理等内容。覆盖了字符串、列表、元组、字典和集合的操作方法,同时深入探讨了函数和类的定义与使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Tips

汉字

多行语句

空行

isinstance(object, classinfo)与type(abject)

编码方式

一些python内置函数

关于pip

pip本体

关于pip-review(分叉pip-tools,用来升级包)

关于wheel文件

import 与 from......import

目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包

__name__属性

导入模块

Python 标识符

Python算术运算符

//   取整除(向下取接近商的整数),但得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。

数学函数

随机数函数

三角函数

数学常量

Python成员运算符

Python身份运算符

Python运算符优先级

字符串(String)

列表(List)

list 映射解析实例

list 过滤实例

元组(Tuple)

删除元组

修改元组

字典(Dict)

集合(Set)

函数

输入与输出

文件

异常

异常处理

assert(断言)

抛出异常       raise [Exception [, args [, traceback]]]

清理行为

类与对象


Tips

  • 汉字

Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,在读取中文时会报错。

解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 # coding=utf-8

 

  • 多行语句

Python语句中一般以新行作为语句的结束符,但是我们可以使用斜杠( \)将一行的语句分为多行显示。

total = item_one + \

        item_two + \

        item_three

冒号后面的执行代码可以在该语句后面不换行继续,也可以在该行后换行后继续。当不换行时,就表示该后的执行语句只能是一条;如果换行,则可以是一行或多行。

 

  • 空行

空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。

记住:空行也是程序代码的一部分。

 

二者类似,返回对象类型,但前者会认为子类是父类的一种类型,考虑继承关系;后者不考虑。

 

  • 编码方式

1.字符串在Python内部的表示是unicode(统一码、万国码)编码,是各个国家通用编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

 

2. bytes类型是 Python 3.x版本新增的数据类型,在 Python 2.x 中是不存在的。字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的

(bytes 只负责以字节序列的形式(二进制形式)来存储数据,至于这些数据到底表示什么内容(字符串、数字、图片、音频等),完全由程序的解析方式决定。)

 

bytes 类型的数据非常适合在互联网上传输,可以用于网络通信编程,也可以用来存储图片、音频、视频等二进制格式的文件。

#举个例子:

b = b''         # 创建一个空的bytes

b = byte()      # 创建一个空的bytes

b = b'hello'    #  直接指定这个hello是bytes类型

b = bytes('string',encoding='编码类型')  #利用内置bytes方法,将字符串转换为指定编码的bytes

b = str.encode('编码类型')   # 利用字符串的encode方法编码成bytes,默认为utf-8类型

bytes.decode('编码类型'):将bytes对象解码成字符串,默认使用utf-8进行解码。

 

3.关于爬虫中对url的编码解码:urllib.parse.urlencode编码字典,request.quote编码字符串,二者用request.unquote解码,没有urldecode,改变编码decoding=

 

  • 一些python内置函数

bin() 求二进制    oct()八进制    hex()十六进制    ord(字符)转数    chr(数字)转字符

 

关于pip

  • pip本体

 

pip -v       pip --version 显示版本和路径
pip install 包名==版本 安装具体版本的包
pip uninstall 包名卸载包
pip --help获取帮助
pip list获取已安装的包名单
pip search 包名搜索包
pip show 包名显示安装包信息
pip list --outdate        pip list -o列出所有可升级的包(不支持所有)
pip freeze > 文件路径输出所有在本地已安装的包(但不包括 pipwheelsetuptools 等自带包),若需要输出内容与 pip list 一致,需使用 pip freeze -all
pip install -r 文件路径一次安装文件内多个包
pip cachepip安装产生的缓存

 

  • 关于pip-review(分叉pip-tools,用来升级包)

  1. pip install pip-review
  2. pip-review --auto       自动批量升级包
  3. pip-review --interactive       以交互方式运行,对每个包进行升级

 

  • 关于wheel文件

从网站(https://pypi.org/)上下载完.wheel文件后,pip install 文件路径     安装包

 

import 与 from......import

  • 目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包

 

  • __name__属性

  1. 一个模块被另一个程序第一次引入时,其主程序将运行。

  2. 如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行

  3. 说明: 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。

  4. 说明:__name__ 与 __main__ 底下是双下划线。

 

 

  • 导入模块

1.用户可以每次只导入一个包里面的特定模块,比如:      import sound.effects.echo(import  模块名

这将会导入子模块:sound.effects.echo。 他必须使用全名去访

2.还有一种导入子模块的方法是:         from sound.effects import echo(from 模块名 import 子模块名

这同样会导入子模块: echo,并且他不需要那些冗长的前缀,所以他可以这样使用:        echo.echofilter(input, output, delay=0.7, atten=4)

3.还有一种变化就是直接导入一个函数或者变量:       from sound.effects.echo import echofilter

同样的,这种方法会导入子模块: echo,并且可以直接使用他的 echofilter() 函数:            echofilter(input, output, delay=0.7, atten=4)

注意当使用 from package import item 这种形式的时候,对应的 item 既可以是包里面的子模块(子包),或者包里面定义的其他名称,比如函数,类或者变量。

4.import 语法会首先把 item 当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,抛出一个 :exc:ImportError 异常。反之,如果使用形如 import item.subitem.subsubitem 这种导入形式,除了最后一项,都必须是包,而最后一项则可以是模块或者是包,但是不可以是类,函数或者变量的名字。

5.import 模块名 as 模块别名

这个方法将导入模块起个别名,后面使用时直接用别名,这种方法一般出于两个目的,一是模块名太长,为了后面使用简写,另外就是起个容易记的别名。

 

Python 标识符

1.以下划线开头的标识符是有特殊意义的。

以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。

以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。

2.Python 可以同一行显示多条语句,方法是用分号 ; 分开

3.所有 Python 的关键字只包含小写字母

 

Python算术运算符

  • //   取整除(向下取接近商的整数),但得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。

 

  • 数学函数

abs()返回数字的绝对值
math.fabs(x)返回数字的绝对值
math.ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5
math.floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
math.exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
math.floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
math.log(x,y)如math.log(math.e)返回1.0,math.log(100,10)返回2.0
math.log10(x)返回以10为基数的x的对数,如math.log10(100)返回 2.0
math.modf(x) 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
math.pow(x, y)x**y 运算后的值
math.sqrt(x)返回数字x的平方根。
math.round(x[,n])

返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。

其实准确的说是保留值将保留到离上一位更近的一端。

 

  • 随机数函数

random.choice(seq[列表 元组 字符串])

从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数

random.randrange ([start,] stop [,step])

从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1

random.random()

随机生成下一个实数,它在[0,1)范围内

random.uniform(x, y)

随机生成下一个实数,它在[x,y]范围内

random.randint(x,y)

随机生成下一个整数,它在[x,y]范围内

random.seed([x])

改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed

random.shuffle(lst)

将序列的所有元素随机排序

 

  • 三角函数

math.sin(x)    math.cos(x)   math.tan(x)    math.acos(x)  math.asin(x)  math.atan(x) 
math.atan2(y, x) 返回arctan(y/x)
hypot(x, y) 返回欧几里德范数 sqrt(x*x + y*y)
math.degrees(x) 将弧度转换为角度
math.radians(x)  将角度转换为弧度

      

  • 数学常量

math.pi         math.e

 

Python成员运算符

  1. in   如果在指定的序列中找到值返回 True,否则返回 False。    x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
  2. not in   如果在指定的序列中没有找到值返回 True,否则返回 False。   x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

 

Python身份运算符

1.身份运算符用于比较两个对象的存储单元

2.is 是判断两个标识符是不是引用自一个对象  x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 Falseis not     

3.is not 是判断两个标识符是不是引用自不同对象   x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

注: id() 函数用于获取对象内存地址。

 

Python运算符优先级

**

指数 (最高优先级)

~ + -

按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)

* / % //

乘,除,求余数和取整除

+ -

加法减法

>> <<

右移,左移运算符

&

位 'AND'

^ |

位运算符

<= < > >=

比较运算符

== !=

等于运算符

= %= /= //= -= += *= **=

赋值运算符

is is not

身份运算符

in not in

成员运算符

not and or

逻辑运算符

 

字符串(String)

  1. python中单引号和双引号使用完全相同,使用三引号('''或""")可以指定一个多行字符串。
  2. 反斜杠可以用来转义,即转义符 '\'。使用r可以让反斜杠不发生转义 如 r"this is a line with \n" 则\n会显示,并不是换行。
  3. 按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
  4. Python中的字符串不能改变

str.isalnum()

判断所有字符都是数字或者字母

str.isalpha()

判断所有字符都是字母

str.isdigit()

判断所有字符都是数字

str.islower()

判断所有字符都是小写

str.isupper()

判断所有字符都是大写

str.istitle()

判断所有单词都是首字母大写,像标题

str.isspace()

判断所有字符都是空白字符、\t、\n、\r

str.upper()

把所有字符中的小写字母转换成大写字母

str.lower()

把所有字符中的大写字母转换成小写字母

str.capitalize()

把第一个字母转化为大写字母,其余小写

str.title()

把每个单词的第一个字母转化为大写,其余小写

str.join(seq)

将序列seq中的元素以指定的字符串str连接成一个新的字符串

str.split(sep=None, maxsplit=-1)

将字符串从seq处切割maxsplit次,以列表的形式返回分割后的元素

exec(str)

执行字符串代码

 

列表(List)

  • list 映射解析实例

>>> li = [1, 9, 8, 4]

>>> li = [elem*2 for elem in li]

>>> li

[2, 18, 16, 8]

 

  • list 过滤实例

>>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]

>>> [elem for elem in li if len(elem) > 1]

['mpilgrim', 'foo']

>>> [elem for elem in li if elem != "b"]

['a', 'mpilgrim', 'foo', 'c', 'd', 'd']

 

list.clear()

清空列表

list.copy()

复制列表     注意:list1 = list.copy()

list.append(obj)

更新列表,在列表末尾添加新的对象

list.remove(obj)

移除列表中某个值的第一个匹配项

list.pop([index=-1])

移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

list.count(obj)

统计某个元素在列表中出现的次数

list.extend(seq)

在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)seq -- 元素列表,可以是列表、元组、集合、字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾。

list.index(obj)

从列表中找出某个值第一个匹配项的索引位置

list.insert(index, obj)

将对象插入列表

list.reverse()

反向列表中元素

list.sort( key=None, reverse=False)

对原列表进行排序      注意:reverse = True 降序, reverse = False 升序(默认)

 

元组(Tuple)

  • 删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组    del tuple

  • 修改元组

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合

 

注意,如果元组只有一个元素,必须在该元素后面加逗号,否则就表示该元素本身的数据类型。

 

字典(Dict)

注意:

1.不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住

2.键必须不可变所以可以用数字,字符串或元组充当,而用列表就不行

dict.clear()

删除字典内所有元素

dict.copy()

返回一个字典的浅复制,父对象进行了深拷贝,不会随被复制字典的修改而修改

注意:引用的对象是浅拷贝,所以随被引用字典的修改而修改。

dict.fromkeys(seq[, value])

创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值

dict.get(key, default=None)

返回指定键的值,如果键不在字典中返回 default 设置的默认值

dict.items()

以列表返回可遍历的(键, 值) 元组数组

dict.keys()

返回一个迭代器,可以使用 list() 来转换为列表

dict.setdefault(key, default=None)

和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

dict.update(dict2)

把字典dict2的键/值对更新到dict里  注意:是直接添加进去而不是删除再添加

dict.values()

返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值

dict.pop(key[,default])

删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出.否则,返回default值。

dict.popitem()

随机返回并删除字典中的最后一对键和值。

 

集合(Set)

s.add( x )

将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作

s.update( x )

添加元素,且参数可以是列表,元组,字典等,x 可以有多个,用逗号分开

s.remove( x )

将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误随机删除集合中的一个元素,语法格式如下:

s.discard( x )

移除集合中的元素,且如果元素不存在,不会发生错误

s.pop()

对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除

s.clear()

移除集合中的所有元素

s.copy()

拷贝一个集合

s1.intersection(s2,s3...)

返回多个集合的交集     注意:返回一个新的集合

s1.intersection_update(s2,s3...)

返回多个集合的交集     注意:在原始的集合上移除不重叠的元素

s1.difference(s2)

返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中 

注意:返回一个新集合

s1.difference_update(s2)

移除集合中的元素,该元素在指定的集合也存在      注意:直接在原来的集合中移除元素

s1.union(s2,s3...)

返回多个集合的并集

s1.symmetric_difference(s2)

返回两个集合中不重复的元素集合

s1.isdisjoint(s2)

判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。

s1.issubset(s2)

判断指定集合是否为该方法参数集合的子集,返回布尔值,如果都包含返回 True,否则返回 False

s1.issuperset(s2)

判断该方法的参数集合是否为指定集合的子集,返回布尔值,如果都包含返回 True,否则返回 False

s.symmetric_difference_update(s1)

移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中

 

函数

dir()      将模块内定义的所有函数,以一个字符串列表的形式返回

 

输入与输出

  1. str(): 函数返回一个用户易读的表达形式。
  2. repr(): 产生一个解释器易读的表达形式。
  3. 字符串对象的 rjust() 方法, 它可以将字符串靠右, 并在左边填充空格。还有类似的方法, 如 ljust() 和 center()。 这些方法并不会写任何东西, 它们仅仅返回新的字符串。另一个方法 zfill(), 它会在数字的左边填充 0
  4. ({域名 : 对齐方式 符号 占用宽度 . 小数点后保留位数 数据类型 }).format(参数)       左对齐<,右对齐>        保留符号+    数据类型f,b,d,o,x,#x,#X

 

文件

#with 的作用就是自动调用close()方法

with open( '/path/to/file', 'r' ) as f:

       print( f.read())

f.open(filename,mode, encoding='', errors='ignore'))

mode中

r:   只读模式,1)文件必须存在。2)读指针指向文件开始处 3)调用write()会报错

w: 只写模式, 1)若文件不存在,创建文件。2)文件存在,清空文件。3)写指针指向文件开始处 。4)调用read()会报错

a:  追加模式(只写)1)若文件不存在,创建文件 。2)文件存在,不清空文件,而是在文件的结尾处继续写入 3)写指针直线文件结尾处 4)调用read()会报错

 

r+: 读写模式, 1)文件必须存在。2)打开可读写文件,读写指针均在文件头

w+: 读写模式 ,1)若文件不存在,创建文件。 2)若文件存在是可读写文件,清空文件。3)读写指针均在文件头 

a+:读写模式 , 1)若文件不存在,创建文件。2)文件存在,不清空文件。3)读指针在开始位置,写指针在文件结尾位置

 

b表示二进制文件

f.close()

关闭文件

file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有。

file.readline([size])

读取整行,包括 "\n" 字符

file.readlines([sizeint])

读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

file.seek(offset[, whence])

移动文件读取指针到指定位置(whence的值 0表示开头,1表示当前位置,2表示结尾)

file.tell()

返回文件指针当前位置,它是从文件开头算起的字节数

file.write(str)

将字符串写入文件,返回的是写入的字符长度

file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入

file.fileno()

返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

file.isatty()

如果文件连接到一个终端设备返回 True,否则返回 False

file.truncate([size])

从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小

 

异常

  • 异常处理

    try:
    
        #可能会出现异常的语句
    
    except:
    
        #若出现异常,则执行此处语句
    
    else:
    
        #若不出现异常,则执行此处语句
    
    finally:
    
        #不管异常有没有出现,该处语句始终执行

     

  • assert(断言)

用于判断一个表达式,在表达式条件为 false 的时候触发异常。

 

  • 抛出异常       raise [Exception [, args [, traceback]]]

 

  • 清理行为

 

类与对象

两个下划线开头,声明该属性(方法)为私有,不能在类的外部被使用或直接访问(调用)

类的专有方法:

__init__

 构造函数,在生成对象时调用

__del__

 析构函数,释放对象时使用

__repr__

 打印,转换

__setitem__

 按照索引赋值

__getitem__

 按照索引获取值

__len__

 获得长度

__cmp__

 比较运算

__call__

 函数调用

__add__

 加运算

__sub__

 减运算

__mul__

 乘运算

__truediv__

 除运算

__mod__

 求余运算

__pow__

 乘方

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值