常量与变量
- 变量不需要声明类型
- python用$=$给变量赋值,用$==$比较两个值是否相等,相等返回True,不等返回False。
- 变量使用前必须赋值(不同于C),变量只有赋值后才会被创建。
- 变量未定义异常
>>> age
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
常量——不变的变量 python没有任何机制保证变量不会改变对象,被改变时没有报错,没有C的const,所以使用时需要万分小心
赋值方式
赋值运算符$=$为==右结合性==
单个赋值
- age = 18
批量赋值
- a = b = c = 1
- 这在C/C++中想都不敢想:(
- a = b = c = 1
先计算再赋值
- age = 17+1
分别赋值
- a,b,c=1,2,3
- a == 1,b == 2,c == 3
当我们写:a = “Jack” 时,Python解释器干了两件事情: 在内存中创建了一个’Jack’的字符串对象(常量); 在内存中创建了一个名为a的变量,并把它指向 ‘Jack’。 而当你把一个变量a赋值给另一个变量b,这个操作实际上是==将变量b指向变量a所指向的数据==,例如下面的代码:
- a,b,c=1,2,3
>>> a = "Jack"
>>> a
'Jack'
>>> b = a
>>> b
'Jack'
>>> id(a)
4332916664
>>> id(b)
4332916664
id()函数用于查看变量内存地址 [[基础函数#id()]]
- 若把另一个变量赋给a,则id(a)改变而id(b)不变
>>>a = "Ross"
>>>a
'Ross'
>>>id(a)
另一个数(不同于4332916664)
变量与对象
Python中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是对象。而变量是对象的一个引用(也可以称为标签或者名字),对象的操作都是通过引用来完成的。
例如
>>>a = 1
- 其中,数字1是对象,a是变量(变量名)
- 赋值操作$=$是将一个名字绑定到一个对象上(给对象1加上标签a)。
- 显然,对象可以绑定多个标签(变量)。但是一个变量只能绑定一个对象。
- 变量本身没有类型,类型储存于对象中由对象类型决定
- 所以python不需要提前声明变量类型,会自动判断对象数据类型,这点与C/C++区别极大
字符串
- python中不对单字符和字符串做区分
- 可以用单引号$''$或双引号$""$来创建字符串(不能一单一双!)
- 三个单引号或三个双引号可以创建多行字符串
>>>name_1='Jack'
>>>name_2="Rose"
>>>sentence_1='''Rose,
Jack,
You jump,
I jump!'''
>>>sentence_2="""Life is short,
you need Python."""
#完美运行!
- 想要使用引号可以加上转义符"\" [[基础函数#字符串函数]]
字符串格式化
%方法
$$print('My\ wife\ is\ \%c,she\ is\ \%d.\ '\%(name,age))$$- $\%$后面是一个tuple|dict,用来传递需要格式化的值
- 占位符种类: ![[Pasted image 20230628233506.png]]
>>>name='布洛妮娅'
>>>age=18
>>>print('My wife`s name is %s,she is %d years old.'%(name,age))#按顺序%对应于字符串后面%()中的内容
My wife`s name is 布洛妮娅,she is 18 years old.
- 进阶
- $$\%[数据名称][对齐标志][宽度].[精度][类型]$$
- 数据名称用于dict赋值,若为数组则不需填写
- 对齐标志
- +:显示正负符号
- -:左对齐
- space:正整数前加上一个space以和负数对齐
- 0:正整数前加一个0以和负数对齐
- 宽度:格式化后字符串长度,不足补0或空格
- 精度:小数点后位数
- 数据类型:占位符种类
format
- 在字符串中,使用$\{ \}$进行占位,然后在字符串后跟上 $.format()$函数,这个函数的参数就是我们要往字符串中填充的变量。
>>>name='琪亚娜'
>>>age=18
>>>print('My wife is {},she is {}.'.format(name,age))#按顺序依次填充
>>>print('My wife is {1},she is {0}.'.format(age,name))
'''
可以在{}内使用索引
其中{}内数字为.format()元组/字典下标
'''
>>>print('My wife is {name},she is {age}.'.format(name=name,age=age))#也可以直接用变量名替代(按对象属性映射)
>>>print('My wife is {name},she is {age}.'.format(name='琪亚娜',age=18))#按关键字映射
>>>list1=['琪亚娜',18]
>>>print("My wife is {0[0]},she is {0[1]}.".format(list1))#通过dict下标映射
- 进阶
- $$\{:[填充字符][对齐方式][符号标志][\#][宽度][,][.精度][类型]\}$$
- 填充字符:不写默认用space填充
- 对齐方式
- ^:居中对齐
- $`<$:左对齐
- $`>$:右对齐
- 符号标志
- +:显示正负号
- space:正整数前加上一个space以和负数对齐
- $\#$:表示是否在二进制、八进制、十六进制前显示0b、0o、0x
- 宽度:输出字符串总宽度
- $,$:开启使用千位分隔符
- 精度:小数点后位数
- 类型:占位符类型
f-string
Formatted String Literals(字面量格式化字符串),简称f-string,仅Python3.6支持 在字符串前加上$f$,开启$f-string$,就可以直接在$\{\}$内使用变量
>>>print(f'My wife is {name},she is {age}.')
- f-string同样支持format格式控制参数 $$\{变量名:[填充字符][对齐方式][符号标志][\#][宽度][,][.精度][类型]\}$$
⭐切片
- 可切片对象:字符串,元组,列表 $$name[a:b:c]$$
- 选取区间为$[a,b)$包括a不包括b。不写a默认从0开始,不写b默认到末尾结束。
- c为步长,切片间隔,省略不写时默认为1。 ==当c为负数时,从后往前切片==
>>>name="polaris"
>>>print(name[1:3])
'ol'
>>>print(name(::-3))
'sap'
'''
'ris'取s,'ola'取a,'p'取p
'''
>>>print(name[::-1])
'siralop'
#字符串反转
- 切片操作不改变原对象,可通过切片赋值创建副本
>>>x=[2,3,6,2,5]
>>>y=x[:]
>>>y.sort()
>>>print x
[2,3,6,2,5]
>>>print y
[2,2,3,5,6]
整数,浮点数,复数
整数(Int)
- 0x十六进制
- 0o八进制
浮点数(Float)
- 小数形式
- 科学计数法,10用e代替
- eg.1.23e-6
复数(Complex)
- 实部+虚部,a+bj
- complex(a,b)
- a&b均为浮点型
[[基础函数#type()]]
取模(相除取整数部分)
$$a//b$$取余
$$a\%b$$绝对值
>>>a=10
>>>b=3
>>>a//b
3
>>>a%b
1
布尔值与空值
- True:真(非0数值,默认1)
- False:假(=0数值,默认0)
- None:空值,不是0(整型),不为布尔类型而是NoneType
- 注意事项
- 首字母大写
- 所有的计算结果,判断表达式调用返回值是True或者False的过程都可以称为布尔运算,例如比较运算。
- 以下会转换为假值
- 0、0.0、-0.0
- None
- 空字符串、空列表、空元组、空字典
- 以下会转换为真值
- -1、1或者其他非0数值
- 所有非空字符串,包括
"False" - 所有非空字典、非空列表、非空集合,非空元组
- 布尔值可进行四则运算,True == 1,False == 0
布尔运算
- 与 $and$
- 只有所有都为True,and运算的结果才是True
- 或 $or$
- 只要其中有一个为True,or运算结果就是True
- 非 $not$
- 单目运算符,把True变成False,False变成True [[基础函数#数值处理函数]]
运算符
Python语言支持以下类型的运算符:
- 算术运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
- 运算符优先级
算术运算符
- $**$:幂,$x**y$返回x的y次幂 ==从右往左结合==(右结合性)
>>>2**2**3
256
>>>(2**2)**3
64
>>>2**(2**3)
256
- $//$:取模,返回商的整数部分
- 整数与浮点数混合运算时,整数转化为浮点数运算
比较运算符
- $==$:比较两对象是否相等 ==python比较运算符可以连用== $$a>b==c等价于a>b\ and\ b==c$$
赋值运算符
- $**=$:幂赋值运算符, $$c**=a等价于c=c**a$$
- $//=$:取整除赋值运算符, $$c//=a等价于c=c//a$$
- «=:左移赋值 $$a<<=2等价于a=a<<2$$
=:右移赋值
- &=:按位与赋值 $$a\&=b等价于a=a\&b$$
- |=:按位或赋值
- ^=:按位异或赋值
位运算符
- $\&$:按位与==右结合性==
- $|$:按位或
- ^:按位异或
- ~:按位取反==右结合性==
- $<<$:左移
- $>>$:右移
逻辑运算符
- $and$:布尔与
- x and y,若x为False,则返回False,否则返回y的计算值
- $or$:布尔或
- x or y,x非0返回x的值,否则返回y计算值
- $not$:布尔非
- not x,x为True返回False,x为False返回True
- ==右结合性==
>>>True and True
True
>>>True and False
False
>>>False and True
False
>>>True and 0+3
3
>>>True or False
True
>>>0 or True
True
>>>0 or 0
0
>>>False or 31
31
>>>not 3
False
成员运算符
- $in$:x in Y(x为对象或变量名,Y为字符串、字典或元组),在指定序列中找到x则返回True,否则返回False
- $not\ in$:x not in Y,没找到返回True
身份运算符
- $is$:判断两个标识符是否引用自同一对象,即本质是否相同
- x is y,if id(x)== id(y),return True
- $is\ not$:if id(x) != id(y),return True
⭐运算符优先级
- ():小括号
- $[\ ]$:索引运算符
- x.attribute:属性访问
- $**$:指数运算
- ~:按位取反
- +@、-@:==一元==加减号(正负号)
- +@,-@为==右结合性==一元运算符
- $*$、/、%、$//$:乘除,取余,取模
- +、-:二元加减
- «、»:位运算左移右移
- &:按位与
- ^:按位异或
- |:按位或
- $<,<=,>,>=,==,!=$:比较运算符
- =,+=,-=……:赋值运算符
- is,is not:身份运算符
- in,not in:成员运算符
- not:非
- and:与
- or:或
- $,$:逗号运算符

何时一樽酒,重与细论文。