常量与变量
- 变量不需要声明类型
- 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 = "Jack" >>> a 'Jack' >>> b = a >>> b 'Jack' >>> id(a) 4332916664 >>> id(b) 4332916664
id()函数用于查看变量内存地址
[[基础函数#id()]] - a,b,c=1,2,3
-
若把另一个变量赋给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
[[基础函数#数值处理函数]]
- 单目运算符,把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:或
- $,$:逗号运算符