Python基础概念

Python程序的构成

图片
  1. Python 程序由模块组成。1个模块对应 python 源文件,一般后缀名是:.py。
  2. 模块由语句组成。运行Python 程序时,按照模块中语句的顺字依次执行。
  3. 语句是 Python 程序的构造单元,用于创建对象、变量赋值、调用函数、控制语句等。

程序基本格式

PEP-8风格指南open in new window

  1. 空格:
    1. 空格在python中有缩进含义,用来决定逻辑行的缩进层次,从而来决定语句的分组。
    2. 语句从新行的第一列开始。
    3. 缩进风格统一:
      1. 每个缩进层次使用 单个制表符 或四个空格(IDE会自动将制表符设置成4个空格)。
      2. python 用缩进,而不是{}表示程序块。
  2. 符号都是英文符号,不是中文。区分字母大小写。
  3. 注释:
    1. 行注释 每行注释前加#号。
    2. 段注释 使用三个连续单引号(''')。
  4. 行连接符 \ ,一般程序长度是没有限制的,但是为了可读性强,通常将一行比较长的程序分为多行。我们可以使用 \ 行连接符,把它放在行结束的地方。Python 解释器会将它解释为同一行。
import turtle
t = turtle.Pen()
for x in range(360):
    t.forward(x)
    t.left(59) #你好世界

'''
sdds
'''

a = [12,23,34,\
45,67,34,\
455,34]

print("你好\
世界")

变量

在Python中,变量也称为:对象的引用。因为,变量存储的就是对象的地址。变量通过地址引用了“对象”。

变量位于:栈内存。

对象位于:堆内存。

  1. Python是动态类型语言:变量不需要显示声明类型。根据变量引用的对象,Python解释器自定确定数据类型。
  2. Python是强类型语言:每个对象都有数据类型,只支持该类型支持的操作。
a = 3
b = "666"

标识符

用于变量、函数、类、模块等的名称。标识符有如下特定的规则:

  1. 区分大小写。如:abc和ABC是不同的。
  2. 第一个字符必须是字母、下划线。其后的字符是:字母、数字、下划线。
  3. 不能使用关键字。如:if、or、while等。可以使用help()=>keywords查看关键字。
  4. 以双下划线和结尾的名称通常有特殊含义,尽量避免这种写法。比如:__init__是类的构造函数。

变量的声明和赋值

变量的声明和赋值用于将一个变量绑定到一个对象上,格式如下: 变量名 = 表达式

最简单的表达式就是字面量。比如:a = 5 。运行过程中,解释器先运行右边的表达式,生成一个代表表达式运算结果的对象;然后,将这个对象地址赋值给左边的变量。

变量在使用前必须先被初始化;
可以通过 del 删除不在使用的变量;
Python不支持常量,即没有语法规则限制改变一个常量的值。只能约定常量的命名规则及在逻辑上不对常量值进行修改。

  1. 链式赋值

链式赋值用于同一个对象赋值给多个变量。
x=y=123 相当于 x=123;y=123

  1. 系列解包赋值

系列数据赋值给对应相同个数的变量(个数必须保持一致) a,b,c=4,5,6 相当于 a=4;b=5;c=6

对象

Python中,一切皆对象。每个对象由:id、type、value组成;

  1. id用于唯一标识对象,通常对应于对象在计算机内存中的地址。使用内置函数id(obj)可返回对象obj的标识。
  2. 类型用于表示对象存储的“数据”类型。类型可以限制对象的取值范围以及可执行操作。可以使用type(obj)获得对象的所属类型。
  3. 值表示对象所存储的数据的信息。使用print(obj)可以直接打印出来

对象的本质就是:一个内存块,拥有特定的值,支持特定类型的相关操作。

id(a)
# 2310081872176
type(a)
# <class 'int'>
print(a)
# 3
id(b)
# 2310122192304
type(b)
# <class 'str'>
print(b)
# 666
图片

基本内置数据类型

类型描述示例
int整数122,545,544
float小数或科学计算法3.14,314e-2
bool表示真假True、False
str由字符组成的序列“12”,“ssd”,“你好世界”

数字

Python支持整数和浮点数,我们可以对数字做如下运算。

运算符说明示例结果
+加法3+25
-减法5-32
*乘法3*515
/浮点数除法8/24.0
//整数除法7/23
**2**38
%取余7%43
<<左移(相当于乘两次2)3<<212
>>右移(相当于除两次2)8>>22

除数为0,会产生异常

运算符 +、-、*、/、//、**、% 和赋值符可以构成“增强型赋值运算符”

示例:a += 10 等价于 a = a + 10

Python 不支持自增(++)和自减(--)

整数

Python中,除10进制,还有其他三种进制:

  • 0b 或 0B,二进制 0 1
  • 0o 或 0O,八进制 0 1 2 3 4 5 6 7
  • 0x 或 0X,二进制 0 1 2 3 4 5 6 7 8 9 a b c d e f

整数可以有多大

int 可以存储任意大小的整数。

a = 10**100
a
# 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

可以做超大数的计算,而不会造成”整数溢出“,特别适合做科学运算。

整数的缓存:命令行中Python会对范围为[-5,256]整数对象进项缓存(对象id一样),范围外的都不缓存。文件执行的缓存范围为[-5,任意正整数]。

转换

可以使用 int() 实现类型转换:

  1. 浮点数,int(9.9)结果是9;
  2. 布尔值 True转为1,False转为0;
  3. 字符串 符合整数格式则直接转换为整数,否则报错;

浮点数

转换

  1. 类似于 int() ,我们可以使用 float() 将其他类型转换成浮点数;
  2. 整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:2+8.0结果时10.0;
  3. 可以使用 round(value) 进行四舍五入处理;

布尔值

TrueFalse 是关键字,本质上是1和0,可以和数字相加

比较运算符

所有比较运算符返回True为真,返回False为假,这于1和0等价。

以下假设变量a为15,变量b为30:

运算符描述实例
==等于,比较对象值是否相等(a == b) 返回 False
!=不等于,比较对象值是否不相等(a != b) 返回 True
>大于,返回x是否大于y(a > b) 返回 False
<小于,返回x是否小于y(a < b) 返回 True
>=大于等于,返回x是否大于等于y(a > b) 返回 False
<=小于等于,返回x是否小于等于y(a < b) 返回 True

关系运算符可以连着用,比如:3<a<9

逻辑运算符

运算符格式说明
or 逻辑或x or yx为true,则返回true。x为false,则返回y
and 逻辑与x and yx为true,则返回y。x为false,则返回false
not 取反not xx为true,则返回false。x为false,则返回true

同一运算符

用于比较两个对象的引用,就是对象的id

运算符描述
is判断两个标识符是不是引用同一个对象
is not判断两个标识符是不是引用的不同对象

is 与 == 区别:is是比较的对象地址,==是比较的对象的值;
is 对比需要注意 缓存池机制和驻留机制(该机制会导致字面量值id一致);

运算符优先级别:位运算符和算数运算>比较运算符>赋值运算符>逻辑运算符

字符串

本质上就是字符序列。Python的字符串是不可变的,我们不能对原有字符串做任何修改。

Python3的字符默认是16位 Unicode 编码,可以使用 ord()chr() 对字符串就行转换。

ord("A")
65
ord("黄")
40644
chr(65)
'A'

创建字符串

使用单引号或者双引号创建字符串。多行使用三个单引号或三个多引号。

a = "nihao"
b = 'huhu'
c = '''dsdd
sd"s"d
'a'a'''
a # 'nihao'
b # 'huhu'
c # 'dsdd\nsd"s"d\n\'a\'a'
d = ""
d # ''

转换

使用 str() 将其他类型转换成字符串;

提取

可以使用[]提取字符串

a = "0123456789"
a[4]
# '4'

字符串拼接

  1. 可以使用+将多个字符串拼接起来。例如:“aa” + “bb” ==> "aabb"

+两边都是字符串才会拼接,如果是数字则会加法运算,如果类型不同则会抛出异常

  1. 可以将多个字面字符串放在一起实现拼接。
"aa" + "bb"
# 'aabb'
"aa""bbcc"
# 'aabbcc'

字符串复制

使用*可以实现字符串复制

"abc"*3
# 'abcabcabc'

从控制台读取字符串

使用 input() 从控制台读取键盘输入内容

a = input('请输入')
>>> 请输入4545
a
# '4545'

转义字符

我们可以使用“+特殊字符”,实现某些难以用字符表示的效果。比如:换行符...

转义字符描述
(在行尾时)续行符
\反斜杠符号
'单引号
"双引号
\b退格
\n换行
\t横向制表符
\r回车
a = "你\n好\n么"
print(a)
# 你
# 好
# 么

字符串切片 slice 操作

切片操作可以快速的让我们提取子字符串。标准格式为:[起始偏移量 start : 终止偏移量 end : 步长 step]

常规操作

示例结果说明
"abcdef"[:]"abcdef"提取整个字符串
"abcdef"[2:]"cdef"从索引start索引开始到结尾
"abcdef"[:2]"ab"从开始到索引end-1结束
"abcdef"[2:4]"cd"从start到end-1
"abcdef"[1:5:2]"bd"从start提取到end-1,步长是step

其它操作

示例结果说明
"abcdefghijklmnopqrstuvwxyz"[-3:]"xyz"倒数3个
"abcdefghijklmnopqrstuvwxyz"[-8:-3]"stuvw"倒数第8个到到数第3个(包头不包尾)
"abcdefghijklmnopqrstuvwxyz"[::-1]"zyxwvutsrqponmlkjihgfedcba"步长为负,从右到左反向提取

字符串驻留机制

字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。

Python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母和数字)会启用字符串驻留机制

a = "123"
b = "123"
a is b
# True
c = "555*"
d = "555*"
c is d
# False
成员操作符

in/not in 关键字,判断某个字符(子字符串)是否存在于字符串中。

a = "abcdefg"
"b" in a # True
"def" in a # True
"eee" in a # False
"eee" not in a # True

可变字符串

在Python中,字符串属于不可变对象,不支持修改,如果需要修改固定对象其中的值,可以使用 io.StringIo 对象(array模块也可)

import io
sio = io.StringIO("你好世界,我叫龙傲天")
sio.getvalue() # '你好世界,我叫龙傲天'
id(sio) # 2363908524640
sio.seek(7)
sio.write("虎")
sio.getvalue() # '你好世界,我叫虎傲天'
id(sio) # 2363908524640

方法汇总

查找

a = "这是一个方法测试文案,这里包含了45、abcdef、还有@#¥%."

  1. len() - 返回字符串长度 - len(a) # 33
  2. startswith() - 以指定字符串开头 - a.startswith("这是") # True
  3. endswith() - 以指定字符串结尾 - a.endswith("%.") # True
  4. find() - 第一次出现指定字符串位置 - a.find("文案") # 8
  5. rfind() - 最后一次出现指定字符串位置 - a.rfind("文案") # 8
  6. count() - 指定字符串出现了几次 - a.count("文案") # 1
  7. isalnum() - 所有字符全是字母或数字 - a.isalnum() # False

去除首位信息

b = "sxy"

  1. strip() - 去除字符串首尾指定信息(默认空白符) - b.strip("") # 'sx*y'
  2. lstrip() - 去除字符串左侧指定信息 - b.lstrip("") # 'sxy'
  3. rstrip() - 去除字符串右侧指定信息 - b.rstrip("") # 'sxy'

大小写转换

c = "i love you, me Too"

  1. capitalize() - 首字母大写 - c.capitalize() # 'I love you, me too'
  2. title() - 每个单词首字母大写 - c.title() # 'I Love You, Me Too'
  3. upper() - 所有字母大写 - c.upper() # 'I LOVE YOU, ME TOO'
  4. lower() - 所有字母小写 - c.lower() # 'i love you, me too'
  5. swapcase() - 字母大小写转换 - c.swapcase() # 'I LOVE YOU, ME tOO'

格式排版

d = "666"

  1. center() - 根据排版长度和填充字符(默认空白)剧中排版 - d.center(10) # ' 666 '
  2. ljust() - 根据排版长度和填充字符(默认空白)左排版 - d.ljust(10, "") # '666******'
  3. rjust() - 根据排版长度和填充字符(默认空白)右排版

判断方法

  1. isalnum() - 是否为字母或数字
  2. isalpha() - 字符串是否只由字母(包含中文)组成
  3. isdigit() - 字符串是否只由数字组成(不包含小数)
  4. isspace() - 是否为空白符
  5. isupper() - 是否为大写字母
  6. islower() - 是否为小写字母

其它方法

  1. replace() - 字符串替换
  2. split() - 基于指定分割符将字符串分割成多个字符串(默认使用空白字符)
  3. join() - 将一系列字符串拼接成一个字符串(join拼接性能优于“+”)
"".join(["aa", "bb", "cc"]) # 'aabbcc'
"@".join(["aa", "bb", "cc"]) # 'aa@bb@cc'
  1. format() - 字符串格式化功能
# 基本使用
a = "他叫{0},今年{1}岁,{0}是个好人"
a.format("许仙", 45) # '他叫许仙,今年45岁,许仙是个好人'

b = "他叫{name},今年{age}岁,{name}是个好人"
b.format(name="张飞", age=45) # '他叫张飞,今年45岁,张飞是个好人'

# 填充和对齐 ^、<、> 分别对应居中、左对齐、右对齐,后面带宽度(:后面带填充字符,只能是一个字符,默认空格)
"{:$>8}".format("666") # '$$$$$666'
"我是{0},我喜欢还数字{1:*^8}".format("天仙",85) # '我是天仙,我喜欢还数字***85***'

# 数字格式化  浮点数-f 整数-d
"{:.2f}".format(45.656554) # '45.66' 保留小数点后两位
"{:+.9f}".format(45.656) # '+45.656000000' 带符号保留小数点后两位
"{:.0f}".format(45.656) # '46' 不带小数
"{:0>3d}".format(5) # '005' 数字补0
"{:h<3d}".format(5) # '5hh' 数字补h
"{:,}".format(100000000) # '100,000,000' 以逗号分隔数字格式
"{:.2%}".format(0.66) # '66.00%' 百分比格式
"{:.2e}".format(1000000) # '1.00e+06' 指数记法
最后更新时间:
贡献者: LAPTOP-CRCIOU48\hjl