Python学习笔记
Python的基础类型
python变量
- python的变量具有以下两个特征:
- 变量无需声明即可直接复制:对一个不存在的变量赋值就相当与定义了一个新变量。
- 变量的数据类型可以动态改变:同一个变量可以一会被赋值给整数值,一会被赋值为字符串。
a = 6
a = "python"
- 变量a一会是int类型,一会是str类型。python语言不强调类型。
- 可以通过两个函数来分别获取上面形容的值
a = 6
print(a)
print(type(a))
a = "python"
print(a)
print(type(a))
-
其中每次赋值的之后的第二行都会出现
<class 'int'>
和<class 'str'>
,这样我们就可以知道变量a现在是什么类型了。 -
如果使用更符合的自然语言python2,那么print后面不应有括号,写法应该是
print a
或者print type(a)
-
标识符:标识符可以由字母、数字、下划线组成,数字不能打头。
-
标识符不能是python关键字,不能出现空格
small = 2
big = 9999999999999999999
print(small, big)
print(type(small),type(big))
- 会发现:不管是小的整数值还是大的整数值,python都能轻松处理,(python2中使用long来处理数值过大的整形)
python数值类型
- 整形数据的四种表示形式
int
:- 十进制:最普通的整数就是十进制整数
- 二进制:以0b或者0B开头的整数就是二进制的整数
- 八进制:以0o或者0O开头的整数就是八进制的整数
- 十六进制:以0x或者0X开头的整数就是十六进制的整数
- 浮点数据
float
:- 十进制数形式:这种形式就是平常简单的浮点数
- 科学计数形式:例如5.12e2(即5.12*10^2)
- 复数数据
complex
:- 复数的实部正常写,虚部用j或J表达式
- 如果需要在程序中对复数进行计算,可导入python的cmath模块(c表示complex),该模块下包含了各种支持复数运算的函数。
字符串入门
- 字符串的基础用法:列字符串的内容几乎可以包容任何字符,英文字符也行,中文字符也行。即可以用单引号,也可以用双引号,
- 这里还有一点:python中的注释:
- 单行注释:
# xxx
这样本行后面的内容在python语言中,就不会生效 - 多行注释:
- 单行注释:
"""
这是多行注释
"""
'''
这样写法也被允许
'''
-
若字符串中包含了单引号或双引号,可以采用以下处理:
- 使用不同的引号将字符串括起来
- 对引号进行转义,例如
\' \"
-
字符串的拼接:
- 将两个字符串紧挨着写在一起,python就会自动拼接
- 使用+拼接两个字符串
- 数值必须先用
str()
或者repr()
函数转换 repr()
函数会以python表达式的形式来表示值。意思是正常情况下我们使用print()
函数输出字符串时,会自动将前后的单/双引号略去,但是如果以python表达式的形式来表示,那么就是原封不动的输出,例如'hello'
s1 = 'hello'
s2 = "python"
s3 = s1+s2
print(s3);
- 这样的结果是
hellopython
iv1 = 23
iv2 = 3.4
s4 = s1 + iv1
-
这样的程序系统会报错,
+
只能连接两个字符串。 -
长字符串写法:可以直接使用
'''
来写,但是要注意第一个'''
后面一定要有数据
longstr = '''haha
你在干什么
我在写代码
'''
print(longstr)
- 这个程序的输出结果就是一个长字符串,也就是一段话。
- 或者使用转义字符
\n
,这样可以在字符串内写入换行号 - 原始字符串:原始字符串以
r
开头,原始字符串不会吧反斜线当成特殊字符。如果原始字符串中包含引号,程序同样需要对引号进行转义(否则python同样无法对字符串的引号精确配对)
rs = r'我在学python\n你在干什么'
print(rs)
- 这样的输出结果是:
我在学python\n你在干什么
,程序不会对\
进行处理,也不会把\n
当作转义字符。但是当转义的内容是引号'
,"
时,就会有效,如将上面的程序中的n
改成'
,结果是:我在学python\'你在干什么
但是要注意的是\
并未被去掉。
获取用户输入
input()
向用户生成一条提示,然后获取用户的输入内容- python 2.x的
raw_input()
相当于python 3.x的input()
- python 2.x的
input()
比较奇怪 - 用法:
s = input("请输入:")
print(s)
- 可以看出,input函数里面的内容不像c语言中的scanf一样有严格要求,可以作为提示符,也就是input生成提示,获取用户输入并赋值给变量。
字符串和字节串
- 字符串由多个字符组成;字节串(bytes)由多个字节组成。
- bytes和str除了操作的数据单元不同之外,他们所有的操作方法都基本相同,bytes也是不可变序列。
- 将字符串转换成bytes对象,可以有如下三种方式:
- 如果字符串内容都是ASCII字符,可以通过直接在字符串之前添加b前缀来构建字节串值
- 调用
bytes()
函数(其实是bytes的构造方法)将字符串按指定字符串转成字节串,默认使用UTF-8字符集。 - 调用字符串本身的
encode()
方法将字符串按指定字符集转成字节串,默认使用UTF-8字符集。
- 调用bytes对象的
decode()
方法将btes对象解码成字符串
# 将字符串转为字节串
b1 = b'我1c'
b2 = b1
b3 = b2
print(type(b1))
b3 = "asd".encode()
b2 = bytes(b2,"UTF-8")
- 这样的程序,如果分别使用
print(type(b))
结果均是:<class 'bytes'>
,说明成功转成了字节串。 - 字节串转为字符串:
print(b3.decode("UTF-8"))
这样就是字节串和字符串的相互转换了。
转义字符
- 下图中较详细的说明了常见转义字符的写法及用法
- 转义字符的写法前面有过涉及,这里通过
print
来展示转换说明符的用法。
s = '我爱%s'
print(s % 'python')
- 这样表示,说明
'python'
这一个字符串,替换了变量s中的%s
。可以在%
后面加上数字表示最小宽度限制,小数点后面的数表示精度值,加-
表示左对齐,+
表示数值总要带着符号(正数+,负数-),0
表示不补充空格,而是补充0,这些标志符可以同时存在。 - 如果有多个变量需要被替换,需要这样写
s = '我喜欢的书是:%s,它的价格是:%d'
print(s %( '讲义' ,128))
price = 128
s3 = '价格是%d,八进制为%o,十六进制为%x,字符串形式为:%r'
print(s3 % (price,price,price,price))
序列相关方法
- 字符串本质就是由多个字符组成,字符串的本质就是不可变序列,因此序列相关方法:
- 基于索引的计算
- in运算
- len()函数
- min()\max()函数
- 根据索引的运算,在C语言中,也叫做下标运算:例如
s = 'fkjava.org'
print(s[3])
print(s[2:4])
print(s[1:7:3])
- 第二行好理解,是访问第四个元素,此外,python允许从后面开始索引,如`-1`时访问最后一个字符,`-2`是访问倒数第二个字符,但是第三行是属于python特有的,访问的是第3到第5个元素,注意**第五个是不包括**的结果是`ja`;第四行制定了开始,结束和步长(间隔),注意最后一个仍不被包括,所以输出结果是`kv`
-
in运算:判定是否包含某个字符
- 使用方法:
print('org' in s)
,其意义是判断org是否在字符串s中出现,如果出现,打印出的数据是TRUE
,如果没有出现,结果则是FALSE
。
- 使用方法:
-
len()函数:返回字符串长度
print(len(s))
,结果是10,和我们预期的结果一致
-
max()\min()函数
- 返回字符串中ASCII值最大\最小的字符
-
大小写相关的方法
title()
将每个单词首字母代为大写lower()
将整个字符串全改为小写upper()
将整个字符串全改为大写- 要注意这三个不是函数,是一种方法,使用时应该是
s.upper()
类似的格式
s = "I have a question"
print(s.upper())
print(s.lower())
print(s.title())
- 上面的语句的执行结果是:
I HAVE A QUESTION
i have a question
I Have A Question
-
小技巧:如果想要快速查询某个类的所有方法(也就是.加后缀),可以输入
dir (str)
来查询。输入的位置不是程序代码内,而是在交互式解释器中,查到的所有方法中,以双下划线__
开头的方法称作被隐藏的方法,我们现在还用不到,就不用再看了。如果不知道某个方法怎么使用,可以继续输入help(str.islower)
-
查找,替换相关方法:
startswith()
:判断字符串是否以指定子串开头endswith()
:判断字符串是否以指定子串结尾find()
:查找指定子串在字符串中的出现位置,如果没有找到指定子串,则返回-1index()
:查找指定子串在字符串中的出现位置,如果没有找到,则会引发ValueError
错误replace()
:使用指定子串替换字符串中的目标子串translate()
:使用指定的翻译映射表对字符串执行替换- 这些方法的括号里面都有参数,如果是字符串的类型,一定要加
' '
或者" "
-
删除空白:
strip()
:删除字符串前后的空白lstrip()
:删除字符串前面(左边)的空白rstrip()
:删除字符串后面(右边)的空白
-
分割、连接
split()
:将字符串按指定分隔符,分割成多个短语join()
:将多个短语连缀成字符串
s = "fkjava.org"
print(s.split("."))
print("=".join(s.split(".")))
- 上述程序的输出结果是:
['fkjava', 'org']
fkjava=org
- 这很好的演示了分割、连接方法的使用。
运算符
-
赋值运算符与扩展的赋值运算符;算术运算符;索引运算符;比较运算符和逻辑运算符;三目运算符;in运算符
-
赋值运算符:
=
作用:将等号右边的值赋给左边的变量中。
-
算术运算符:
+,-,*,/,//,%,**
这些是python中所有的算术运算符。- 如果要实现更复杂的数学运算,可导入math模块
- 三种除法:
/
是除,就是数学上的除法,没有任何变化,5/2 = 2.5;/
是整除,除得的结果要被舍去小数部分,因此结果总是整数。%
是取余,例如5/2,会先以整数乘2,乘到最大为止,剩下的部分就是余数了。注意求余的结果正负号总是与除数(后面的数)保持一致:23%7 = 2,-23%7 = 5,23%-7 = -5,-23%-7 = -2
- 乘方
**
,事实上,这个符号不止能计算乘方,还能计算开方。
-
如果想要进行更复杂的数学运算,要导入math模块:
import math
,例如要运算45°的正弦,应使用:math.sin(3.14 / 4)
-
扩展的赋值运算符:
x += y 相当于 x = x + y ; x **= y 相当于 x = x ** y
-
索引运算符:
- 索引运算符就是方括号
- 方括号中可以使用单个索引值,用于访问单个元素,也可以使用索引范围,使用索引范围时,还可以指定步长。
- 索引运算符对所有的序列(字符串、字节串、列表、元组)都支持
-
比较运算符和逻辑运算符
- 比较运算符用来比较两个对象的大小,其中有
>,>=,<,<=,==,!=
,运行结果是True和False
,注意True
和1完全等价False
和0也完全等价。 is
,is not
运算符:判断两个变量是否引用的是同一个对象,因此,
- 比较运算符用来比较两个对象的大小,其中有
s1 = '213'
s2 = str(213)
print(s1 is s2)
- 上面的代码的结果是False。但是如果使用`==`来判定,则结果是True,这说明`==`仅仅是简单判定两个变量数据是否相等。
- 逻辑运算符:`and or not`
- `and`与,任意操作数中为False,返回False
- `or`或,任意操作数中为True,结果返回True
- `not`非,只需要一个操作数,如果操作数为True,则返回False,如果操作数为False,则返回True
-
三目运算符
- python使用if表达式来代替三目运算符
True_statements if expression else False_statements
,也就是,表达式在中间,如果为真,程序执行前面部分,如果为假,程序执行后半部分- if语句支持嵌套
- 前后两部分都支持放置多条语句,支持两种放置方式
- 多条语句以英文逗号隔开:每条语句都会执行,程序返回多条语句的返回值组合成元组
- 多条语句以英文分号隔开:每条语句都会执行,程序只返回第一条语句的返回值
-
in运算符:
- 用于判断某个成员是否位于序列中(所以只支持序列)
- 写法:
print(ja in s)
,其中的s = 'fkjava.org
,所以打印结果是True