Python基础 学习笔记
Chapter 01
Python程序开发注意事项
1.Python源文件通常以.py
为扩展名,但这不是必须的。
2.Python程序语句默认情况是顺序执行。
3.Python语言区分大小写。
4.Python程序由一条条语句构成,每条语句后不需要以;
结束,但是如果带上;
也不会报错,建议不带;
。
Python常用的转义字符
1.\t
:制表位,实现对齐的功能
2.\n
:换行符
3.\\
:\
4.\"
:”
5.\'
:‘
6.\r
:回车
注释
1.单行注释:#注释文字
2.多行注释**(不可嵌套使用)**:'''注释文字'''
或者"""注释文字“”“
3.文件编码声明注释:# coding:编码
(在文件开头加上编码声明,用以指定文件的编码格式)
Chapter 02 - 变量
格式化输出
%
操作符输出:符号 意义 示例 %s 输出字符串 %d 输出整数 %06表示输出6位整数,不足的位数补0 %f 输出浮点数 %.2f表示输出小数点后保留两位小数 %% 输出百分号 1
print("个人信息:%s %d %s %.2f"%(name,age,gender,score))
format()
函数
示例:1
print("个人信息:{} {} {}".format(name,age,gender))
f-strings
示例:1
print(f"个人信息:{name} {age} {score} {gender}")
数据类型
基本数据类型
类型 |
---|
整型 int |
浮点数 float |
布尔值 bool |
字符串 string |
基本介绍
1.Python中的变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
2.可以使用type()
函数查看数据类型。
语法:type(object)
整数类型
- Python的整数有十进制、十六进制、八进制、二进制。
1.十进制。
2.十六进制写法:加前缀0x
。
3.八进制写法:加前缀0o
。
4.二进制写法:加前缀0b
。 - 整型占用字节:可以通过
sys.getsizeof()
以字节单位返回对象的大小。
1.字节数随着数字增大而增大。
2.每次的增量是4字节。
浮点类型
- 浮点类型计算后,存在精度的缺失,可以使用
Decimal
类进行精确计算。
布尔类型
- 布尔类型可以和其他数据类型进行比较,比如数字、字符串等。在比较时,将True视为1,False视为0。
- 非0被视为真值,0被视为假值。
字符串
- 使用
'
或"
包括起来,创建字符串。 - 通过加号可以连接字符串。
- Python不支持单字符类型,单字符在Python中也是作为一个字符串使用。
- 用
'''内容'''
或者"""内容"""
可以使字符串内容保持原样输出。 - 在字符串前面加
r
可以使整个字符串不会被转义。
字符串驻留机制
- 说明:
Python仅保存一份相同且不可变字符串,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串仅保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。 - 驻留机制几种情况讨论**(在交互模式下,即cmd进入Python):
1.字符串是由26个英文字母大小写、0-9、_
组成。
2.字符串长度为0或1时。
3.字符串在编译**时进行驻留,而非运行时。
4.[-5,256]的整数数字。 - PyCharm对字符串进行了优化处理,不需要满足上述特殊情况。
- 字符串驻留机制的好处:当需要值相同的字符串时,可以直接从字符串池中拿来使用,避免频繁的创建和销毁,提升效率和节约内存。
- sys中的
intern
方法可以强制2个字符串指向同一个对象。
##数据类型转换
隐式类型转换
- Python变量的类型是不固定的,会根据变量当前值在运行时决定,可以通过内置函数
type(变量)
来查看其类型。 - 在运算时,数据类型会向高精度自动转换。
显式类型转换
如果需要对变量数据进行类型转换,只需要将数据类型作为函数名即可。
以下几个内置的函数可以完成数据类型之间的转换。函数会**返回一个新的对象/值,就是强制类型转换后的结果。
函数 描述 int(x[,base]) 将转换为一个整数 float(x) 将x转换成一个浮点数 complex(real[,imag]) 创建一个复数 str(x) 将对象x转换为字符串 repr(x) 将对象x转换为表达式字符串 eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象 tuple(s) 将序列s转换为一个元组 list(s) 将序列s转换为一个列表 set(s) 转换为可变集合 dict(d) 创建一个字典。d必须是一个(key,value)元组序列 frozenset(s) 转换为不可变集合 chr(x) 将一个整数转换为一个字符 注意事项:
1.不管什么值的int
,float
都可以转成str
,str(x)
将对象x转换为字符串。
2.int
转成float
会增加小数部分,float
转成int
会去掉小数部分。
3.在将str
类型转成基本数据类型时,要确保str
值能够转成有效的数据。
4.对一个变量进行强制类型转换,会返回一个数据/值,但强制类型转换后并不会影响原变量的数据类型(即:不会影响原变量指向的数据/值的数据类型)。
Chapter 03 - 运算符
算术运算符
运算符 | 运算 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模(取余) |
// | 取整除(返回商的整数部分,向下取整) |
** | 返回x的y次幂 |
- 当对一个数取模时,对应的运算公式:
a % b = a - a // b * b
比较运算符
运算符 | 运算 |
---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
is | 判断两个变量引用对象是否为同一个 |
is not | 判断两个变量引用对象是否不同 |
逻辑/布尔运算符
运算符 | 逻辑表达式 | 描述 |
---|---|---|
and | x and y | 如果x为False,则返回x的值,否则返回y的值 |
or | x or y | 如果是True,则返回x的值,否则返回y的值 |
not | not x | 如果x为True,返回False;如果x为False,返回True |
and
是种“短路运算符”,只有当第一个为True时才会去验证第二个。or
是种“短路运算符”,只有当第一个为False时才会去验证第二个,即如果第一个为True,就直接返回第一个的值。
赋值运算符
运算符 | 描述 |
---|---|
= | 简单的赋值运算符 |
+= | 复合加法赋值运算符 |
-= | 复合减法赋值运算符 |
*= | 复合乘法赋值运算符 |
/= | 复合除法赋值运算符 |
%= | 复合取模赋值运算符 |
**= | 复合幂赋值运算符 |
//= | 复合取整除赋值运算符 |
- 实现变量交换的简单方法:
x,y = y,x
三元运算符
语法:
变量名 = a if a > b else b
- 如果
a > b
成立,就把a作为整个表达式的值,并赋值给变量;如果a > b
不成立,就把b作为整个表达式的值,并赋值给变量;
运算符优先级
算术运算>位运算>比较运算>逻辑运算>赋值运算
标识符
- 标识符:各种变量、函数和类等命名时使用的字符序列。
- 命名规范:
函数名一律小写,如果有多个单词,用下划线隔开。私有函数以双下划线开头。
键盘输入语句input()
- 从控制台接收到的数据类型是
str
类型。如果希望对接收到的数据进行算术运算,则需要进行类型转换,也可以在接收数据的之后直接转成需要的类型。示例:
变量名 = int(input(“…”))
Chapter 04 - 进制
位运算符


Chapter 05 - 程序控制结构
顺序控制
分支控制if-else
单分支
- 基本语法:
if 条件表达式:
代码块(可以有多条语句) - 基本语法说明:
1.Python的缩进非常重要,是用于界定代码块的,相当于其他编程语言里的大括号{}
。
2.最短的缩进对较长的有包含关系,缩进长度没有要求,但是每个代码块应具有相同的缩进长度(TAB
或相同个数的空格)。
双分支
- 基本语法:
if 条件表达式:
执行代码块1
else:
执行代码块2
多分支
- 基本语法:
if 条件表达式1:
执行代码块1
elif 条件表达式2:
执行代码块2
…………
else:
执行代码块n + 1
嵌套分支
for循环控制
- 基本语法:
for <变量> in <范围/序列>:
<循环操作语句> - 基本语法说明:
1.<范围/序列>可以理解要处理的数据集,需要是可迭代对象(如字符串、列表等)。
2.Python的for循环是一种**“轮询机制”,是对指定对象的数据集进行“轮询处理”**。 - 注意事项和细节说明:
1.循环时,依次将序列中的值取出赋给变量。
2.如果需要遍历数字序列,可以使用内置range()
函数,它会生成数列。range()
生成的数列是前闭后开。- range(start,stop,step):
- range默认增加的步长step为1,start默认为0。
- 通过
list()
可以查看range()
生成的序列包含的数据。
3.for
可以和else
配合使用:当for循环正常的完成遍历,在遍历过程中没有被打断。 - 语法格式:
for <变量> in <范围/序列>:
<代码块1>
else:
<代码块2>
- range(start,stop,step):
while循环控制
基本语法:
while 判断条件:
循环操作语句注意事项和细节说明:
1.while
可以和else
配合使用:在while...else
判断条件为false时,会执行else的语句块,即:在遍历过程中,没有被打断。语法格式:
while 判断条件:
循环操作语句
else:
其他语句
多重循环控制
break语句
random
模块的randint()
函数生成随机数,语法为:1
2
3import random
...
random.randint(a,b)返回随机数N满足
a <= N <= b
相当于randrange(a,b + 1)
。- 注意事项和相关细节:
1.break
语句是用在for
或while
循环所嵌套的代码。
2.break
会终结最近的外层循环,如果循环有可选的else
子句,也会跳过该子句。
3.如果一个for
循环被break
所终结,该循环的控制变量会保持当前值。
continue语句
- 说明:
continue
语句用于结束本次循环,继续执行循环的下一个轮次,不是退出循环。
return语句
- 基本介绍:
return
使用在函数,表示跳出所在的函数。 - 说明:如果没有return语句,默认返回
None
,None
是内置常量,通常用来代表空值的对象。
Chapter 06 - 函数
- 分类:系统函数、自定义函数
- 基本语法:
def 函数名 (形参列表):
函数体
(可以return
关键字设置返回值)
注意事项和使用细节
1.如果同一个文件出现函数名相同的函数,则以就近原则进行调用。(没有重载机制!!)
2.调用函数时,根据函数定义的参数位置来传递参数,这种传参方式就是位置参数,传递的实参和定义的形参顺序和个数必须一致,同时定义的形参不用指定数据类型,会根据传入的实参决定。
3.函数可以有多个返回值,返回数据类型不受限制。
示例:
1
2
3
4
5def f(n1,n2):
return n1 + n2,n1 - n2
r1,r2 = f(10,20)
print(f"r1->{r1},r2->{r2}")
4.函数支持关键字参数:函数调用时,可以通过形参名=实参值的形式传递参数,这样可以不受参数传递顺序的限制。
示例:
1
2
3
4
5
6
7
8def book_info(name,price,author,amount):
print(f"name=>{name},price->{price},author->{author},amount->{amount}")
#通常调用方式:一一对应
book_info("红楼梦",60,"曹雪芹",30000)
#关键字参数
book_info("红楼梦",60,amount = 6000,author = "曹雪芹")
5.参数支持默认参数/缺省参数:定义函数时,可以给参数提供默认值。调用函数时,指定了实参则以指定的为准,否则以默认值为准。默认参数需要放在参数列表后。
示例:
1
2
3
4
5def book_info(name = '<<thinking in python>>',price = 66.8,author = '龟叔',amount = 1000):
print(f"name=>{name},price->{price},author->{author},amount->{amount}")
#调用测试
book_info() book_info('<<study python>>')
补充:
1
2def book_info(name,price,author = '龟叔',amount = 1000): #正确
def book_info(name = '<<thinking in python>>',price = 66.8,author,amount): #错误
6.函数支持可变参数/不定长参数:
- 应用场景:当调用函数时,不确定传入多少个实参的情况。
- 传入的多个实参会被组成一个元组,元组可以储存多个数据项。
7.函数的可变参数/不定长参数也支持多个关键字参数。
- 应用场景:当调用函数时,不确定传入多少个关键字参数的情况。
- 传入的多个关键字参数会被组成一个字典,字典可以储存多个键 = 值的数据项。
8.Python调用另一个.py
文件中的函数:
示例:f1.py,f2.py
f1.py
1
2def add(x,y):
print(x + y)
在f2.py
文件中调用f1.py
的add
函数如下:
1
2import f1
f1.add(1,2)
函数的传参机制
- 字符串和数值类型是不可变数据类型,当对应的变量的值发生了变化时,它对应的内存地址会发生改变。
递归调用
- 递归的重要规则:
1.执行一个函数时,就创建一个新的空间(栈空间)。
2.函数的变量是独立的。
3.递归必须向退出递归的条件逼近,否则就是无限递归。
4.当一个函数执行完毕或者遇到return
就会返回。遵守谁调用,就将结果返回给谁。
函数作为参数传递
- 注意事项和细节:
1.函数作为参数传递,传递的不是数据,而是业务处理逻辑。
2.一个函数,可以接收多个函数作为参数传入。
lambda匿名函数
- 基本介绍:当需要将函数作为参数进行传递,但是这个函数只使用一次时,可以使用
lambda匿名函数
。
定义
def
关键字可以定义有名称的函数,可以重复使用。lambda
关键字可以定义匿名函数(无名称),匿名函数只能使用一次。- 匿名函数用于临时创建一个函数,只使用一次的场景。
基本语法
lambda 形参列表: 函数体**(只能写一行代码)**
全局变量和局部变量
- 注意事项和使用细节:
1.在函数内部使用global
关键字,可以表明指定使用全局变量。
Chapter 07 - 数据容器
- 基本介绍:
1.数据容器是一种数据类型。
2.数据容器可以存放多个数据,每一个数据也被称为一个元素。
3.存放的数据/元素可以是任意类型。
list列表
参考文档: https://docs.python.org/zh-cn/3.12/library/stdtypes.html#list
基本介绍:列表可以存放多个不同类型的数据,即列表就是一列数据。列表也是一种数据类型。
列表的定义:创建一个列表只需要用逗号分隔不同的数据项,使用方括号
[]
括起来即可。
示例:1
list = [100,200,300]
列表的使用语法:(索引类比数组的下标)
列表名[索引]
列表的遍历:
- 使用while循环完成遍历:
示例:1
2
3
4
5
6#得到list的元素个数:`len(列表名)`
list = [...]
index = 0
while index < len(list):
print(f"第{index + 1}个元素是:{list[index]}")
index += 1 - 使用for循环完成遍历:
示例:1
2
3list = [...]
for ele in list:
print(f"元素是:{ele}")
- 使用while循环完成遍历:
注意事项和使用细节:
1.如果需要一个空列表,可以通过[]
或者list()
的方式来定义。
2.列表的元素可以有多个,且数据类型没有限制**(也可以是列表),允许有重复元素,并且是有序的。
3.索引也可以从尾部开始**,最后一个元素的索引为-1.往前一位为-2,以此类推。
4.通过列表名[索引] = 新值
对数据进行更新,使用列表名.append(值)
方法来添加元素,使用del
语句来删除列表的元素,注意不能超出有效索引范围。
5.列表是可变序列。- 列表的元素是可以修改的,修改后列表指向的地址不变**(元素的地址会发生变化)**,只是数据内容变化。
列表的常用操作:
函数 作用 len(list) 列表元素个数 max(list) 返回列表元素最大值 min(list) 返回列表元素最小值 list(seq) 将元组转换为列表 list.append(obj) 在列表末尾添加新的对象 list.count(obj) 统计某个元素在列表中出现的次数 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) list.index(obj) 从列表中找出某个值第一个匹配向的索引位置 list.insert(index,obj) 将对象插入列表 list.pop([index = -1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 list.remove(obj) 移除列表中某个值的第一个匹配项 list.reverse() 反向列表中的元素 list.sort(key = None,reverse = False) 对原列表进行排序 list.clear() 清空列表 list.copy() 复制列表 列表生成式:生成列表的公式
基本语法:[列表元素的表达式 for 自定义变量 in 可迭代对象]
示例:1
2[ele * 2 for ele in range(1,5)]
#得到列表[2,4,6,8]