python语法基础
python链式赋值
链式赋值:同一个对象赋值给多个变量。如x=y=123,相当于:x=123;y=123
python系列解包赋值
系列数据赋值给对应相同个数的变量。如:
>>>a,b,c=4,5,6
相当于:a=4;b=5;c=6;
利用系列解包赋值可以实现变量交换:
python中的常量
python不支持常量,即没有语法规则限制改变一个常量的值。我们只能约定常量的命名规则(全大写,单词之间用下划线分开),以及在程序逻辑上不对常量的值做出修改。
python最基本内置数据类型
python中每个对象都有类型,最基本的内置数据类型:
- 整型(int):整数,如:1,2,3
- 浮点型(float):小数,如:3.14或科学计数法314e-2
- 布尔型:表示真假,仅包含:True,False
- 字符串型:由字符组成的序列,如:”abc“、”哈哈哈“
python数字运算符
python支持整数和浮点数,我们可以对数字做如下运算:
运算符 | 说明 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 浮点数除法 |
// | 整数除法 |
% | 模运算(取余) |
** | 幂 |
注:当除数为0时,会产生异常。
使用divmod()函数可以同时得到商和余数:
int整型
python中除了十进制,还有二进制(0b或0B)、八进制(0o或0O)和十六进制(0x或0X)
这三种进制可以非常方便的进行“位运算”操作。
使用int()实现类型转换:
1.浮点数直接舍去小数部分。
2.布尔值True转为1,False转为0。
3.字符串符合整数格式(浮点数格式不行)则直接转成对应整数,否则会报错。
自动转型
整数和浮点数混合运算时,表达式结果自动转型成浮点数。
python整数的范围
python2中,int类型是32位,long类型是64位。
python3中,int可以存储任意大小的整数,long类型被取消。
float浮点型
浮点数,称为float。浮点数可以用科学计数法表示,如:3.14表示成,314e-2或314E-2。这些数字在内存中也是按照科学计数法存储。
类型转换和四舍五入
1.类似int(),我们可以使用float()将其他类型转换为浮点数。
2.整数和浮点数混合运算时,表达式结果自动转型成浮点数。
3.round(value)可以返回四舍五入的值。
注:float()类型转换不是把原有对象的type修改了,而是生成了一个新的type是float的对象。
python增强型赋值运算符
运算符+、-、/、//、%和**和赋值符=结合可以构成“增强型赋值运算符”。如,a=a+1等价于a+=1.
运算符 | 例子 | 等价 |
---|---|---|
+= | a+=2 | a=a+2 |
-= | a-=2 | a=a-2 |
*= | a*=2 | a=a*2 |
/= | a/=2 | a=a/2 |
//= | a//=2 | a=a//2 |
**= | a**=2 | a=a**2 |
%= | a%=2 | a=a%2 |
注:“+=”中间不能加空格
python时间表示
python中可以通过time.time()获得当前时刻(是距离1970年1月1日00:00:00(unix时间点)的时间),返回的值是以秒为单位,带微秒精度的浮点值。
练习:定义多点坐标,绘制折线,并计算起始点和终点的距离
>>>import turtle
>>>import math
>>>turtle.penup()
>>>turtle.goto(100,100)
>>>turtle.pendown()
>>>turtle.goto(100,0)
>>> turtle.goto(-100,0)
>>>turtle.goto(-100,-100)
>>>math.sqrt((100+100)**2+(100+100)**2)
>>> turtle.write("起始点和终点的距离是282.84")
布尔值和布尔相关运算
python2中没有布尔值,直接用数字0表示false,1表示true。
python3中,把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 |
逻辑运算符
运算符 | 格式 | 说明 |
---|---|---|
or 逻辑或 | x or y | x为true,则不计算y,直接返回true;x为false,则返回y |
and 逻辑与 | x and y | x为true,则返回y的值;x为false,则不计算y,直接返回false |
not 逻辑非 | not x | x为true,返回false;x为false,返回true |
同一运算符
同一运算符用于比较两对象的存储单元,实际比较的是对象的地址。
运算符 | 描述 |
---|---|
is | 判断两个标识符是不是引用同一个对象 |
is not | 判断两个标识符是不是引用不同对象 |
is与==的区别:
- is用于判断两个变量引用对象是否为同一个,是比较对象的地址。
- ==用于判断变量引用对象的值是否相等,默认调用对象的_eq_()方法。
整数缓存问题:python在命令行中执行时,会对比较小的整数对象进行缓存(范围是[-5,256]),在这个范围里变量的引用是同一个对象。在文件执行或pycharm中有不同只要大于-5的整数都可以被缓存
字符串
字符串基本特点
字符串本质是字符序列。python的字符串在定义后不可变。python不支持单字符类型,单字符也作为一个字符串使用。
字符串的编码
python3直接支持Unicode,可以表示任何书面语言的字符。ASCII码是Unicode的子集。
使用内置函数ord()可以把字符转换成对应的Unicode码;
使用内置函数chr()可以把十进制数字转换成对应的字符。
创建字符串
我们可以通过单引号或者双引号创建字符串。如,a=‘abc’,b=“bbc”
使用两种引号的好处是,可以创建本身就包含引号的字符串,而不使用转义字符。
连续三个单引号或三个双引号,可以帮助我们创建多行字符串。
空字符串和len()函数
python允许空字符串的存在,不包含任何字符且长度为0.
len()用于计算字符串含有多少个字符。
转义字符
我们可以使用“+特殊字符”,实现某些难以用字符表示的效果。
转义字符 | 描述 |
---|---|
\ (在行尾时) | 续行符 |
\ | 反斜杠 |
’ | 单引号 |
" | 双引号 |
\b | 退格 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
字符串拼接
1.可以用+将多个字符串拼接起来。如,‘aa’+‘bb’–>‘aabb’
如果+两边都是字符串,则拼接。
如果+两边都是数字,则加法运算。
如果+两边类型不同,则出错。
2.可以将多个字面字符串直接放到一起实现拼接。如,‘aa’ ‘bb’–>‘aabb’
注:字符串拼接会形成一个新的对象。
字符串复制
使用*可以实现字符串复制。
字符串不换行打印
通过参数end=“任意字符串”,实现末尾添加内容:
从控制台读取字符串
使用input()函数从控制台入去键盘输入内容。
str()实现数字转型字符串
当我们调用print()函数时,解释器自动调用了str()将非字符串的对象转换成了字符串。
使用[]提取字符
字符串本质就是字符序列,每一个字符都有一个自己的索引编号(从0开始)可以叫做索引也可以叫做偏移量。
正向搜索:从左到右,第一个偏移量是0,第二个偏移量是1,以此类推,直到len(str)-1为止。
反向搜索:从右到左,第一个偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)为止。
replace()实现字符串替换
格式:replace(“待替换字符”,“替换字符”)
尽管得到了被改变的字符串,但实际上我们是创建了一个新的字符串对象,并指向了变量a,并没有修改以前的字符串。
字符串切片slice操作
切片slice操作可以让我们快速的提取子字符串,标准格式:
[起始偏移量start:终止偏移量end:步长step]
注:存在起始到终止,通常都是包头不包尾
操作和说明 | 示例 | 结果 |
---|---|---|
[:] 提取整个字符串 | ‘abcdef’[:] | ‘abcdef’ |
[start:] 从start索引开始到结尾 | ‘abcdef’[2:] | ‘cedf’ |
[:end] 从头开始直到end-1 | ‘abcdef’[:2] | ‘ab’ |
[start:end] 从start开始到end-1 | ‘abcdef’[2:4] | ‘cd’ |
[start🔚step] 从start提取到end-1,步长是step | ‘abcdef’[1:5:2] | ‘bd’ |
其他操作
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当成-1。
split()分割和join()合并
split()可以基于指定分割符将字符串分割成多个子字符串(存储到列表中)。不指定分割符,默认使用空白字符。
>>>a='to be or not to be'
>>>a.split()
使用split()后会生成一个列表,用于存储子字符串。
join()用于将一系列子字符串连接起来。
>>>a=['today','happy','day']
>>>'*'.join(a)
a就是一个列表,一个列表中可以有多个字符串。
当涉及到性能时,最好使用join(),而不是+拼接。因为在使用+时,会生成新对象,影响效率,而join()只新建一次对象。
字符串驻留机制和字符串比较
字符串驻留:仅保留一份相同切不可变字符串的方法,不同的值被存放在字符串驻留池中。
python支持字符驻留机制,对于渡河标识符规则的字符串(仅包含下划线,字母和数字)会启用字符串驻留机制。
上图中,c,d不符合标识符规则,那这两个是不同的对象,用is判断得出结果是false。c,d的值是相等的,但是不是同一个对象。(一个对象是有三部分组成:id,type,value)
成员操作符
in/not in 关键字,判断某个字符(子字符串)是否存在与字符串中。
字符串常用方法
查找方法
以“上图中,c,d不符合标识符规则,那这两个是不同的对象,用is判断得出结果是false。c,d的值是相等的,但是不是同一个对象。(一个对象是有三部分组成:id,type,value)”这段话为例。
去除首位信息
可以通过strip()去除字符串首尾指定信息。通过Istrip()去除字符串左边指定信息,rstrip()去除字符串右边指定信息。
经常用于去除首尾空格。
大小写转换
a='there is something Happening during this DAY’为例。
格式排版
center()居中,ljust()左对齐,rjust()右对齐
字符串格式化
format()基本用法
python2.6开始新增了一种格式化字符串的函数,str.format(),增强了字符串格式化的功能。
基本语法是通过{}和:来代替以前的%({}相当于一个占位符,只有在调用值的时候,再进行填充)
format函数可以接受不限个参数,位置可以不按顺序。
填充与对齐
填充常常和对齐一起使用
^居中、<左对齐、>右对齐,后面要带宽度。{:}:后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充。
数字格式化
浮点数通过f,整数通过d进行需要的格式化。
今日碎碎念:以后再也不要拖延症了///T T///,因为开始接触更多的语法和函数,最大的体验就是,容易出现小错误…😴