本文整理 Python 3 的相关学习笔记,示例按各小节说明理解。
基础
1.python介绍
python是解释型的编程语言,不需要编译器(compile),需要解释器(interpreter),我们所安装的python2.7,python3等等版本都是python的解释器,python底层是使用c语言编写的,也有用java编写的,主要是使用cpython。python文件以.py结尾,python语法以缩进作为解释的重要依据,所以不能随意缩进,每一行代码不需要以分号结尾。
2.注释格式
# 这是单行注释,官方规范建议在井号和注释文本之间有一个空格
'''
这是多行注释格式,python不区分单引号'和双引号",所以注释和字符串都可以使用单引号或者双引号
'''
"""
这也是多行注释
"""
3.编码声明
Python 脚本第一或第二行的注释匹配正则表达式 coding[=:]\s*([-\w.]+) 时,该注释会被当作编码声明;这个表达式的第一组指定了源码文件的编码。编码声明必须独占一行,在第二行时,则第一行必须也是注释。编码表达式的形式如下:
# -*- coding: <encoding-name> -*-
这也是 GNU Emacs 认可的形式,此外,还支持如下形式:
# vim:fileencoding=<encoding-name>
这是 Bram Moolenaar 的 VIM 认可的形式。
如果没有找到编码格式声明,则默认编码格式为 UTF-8。
4.拼接行
1.显式
两个及两个以上的物理行可用反斜杠(\)拼接为一个逻辑行,规则如下:以不在字符串或注释内的反斜杠结尾时,物理行将与下一行拼接成一个逻辑行,并删除反斜杠及其后的换行符。例如:
if 1900 < year < 2100 and 1 <= month <= 12 \
and 1 <= day <= 31 and 0 <= hour < 24 \
and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date
return 1
以反斜杠结尾的行,不能加注释;反斜杠也不能拼接注释。除字符串字面值外,反斜杠不能拼接形符(如,除字符串字面值外,不能用反斜杠把形符切分至两个物理行)。反斜杠只能在代码的字符串字面值里,在其他任何位置都是非法的。
2.隐式
圆括号、方括号、花括号内的表达式可以分成多个物理行,不必使用反斜杠。例如:
month_names = ['Januari', 'Februari', 'Maart', # These are the
'April', 'Mei', 'Juni', # Dutch names
'Juli', 'Augustus', 'September', # for the months
'Oktober', 'November', 'December'] # of the year
隐式行拼接可含注释;后续行的缩进并不重要;还支持空的后续行。隐式拼接行之间没有 NEWLINE 形符。
变量与数据类型
1.变量
Python 是动态类型、强类型语言。变量名绑定到对象,定义变量时无需显式声明类型。
number = 123
name = 'zhangsan'
查看变量的数据类型(实际上是查看变量值的数据类型)的方法是使用函数type()
type(444)
type(23.24)
name = "lisi"
type(name)
标识符的命名规范:
只能以字母,数字和下划线组成,中文也可以,但是不推荐。
数字不能开头。
区分大小写,不能使用关键字。
2.数据类型
在python的六大标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组); 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
1.Number数字数据类型:
整数int:长度无限,直至内存装不下。
浮点数float:默认使用IEEE754规范,精度在15-17位
复数complex:复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, complex(a)则表示虚部为0。复数的实部a和虚部b都是浮点型。
v1 = 12
v2 = 3.14
v3 = 5+8.2j
print(type(v1),type(v2),type(v3))# <class 'int'> <class 'float'> <class 'complex'>
print(v3)# (5+8.2j)
布尔型bool:布尔类型只有两个值:True 和 False。bool 是 int 的子类,因此布尔值可以被看作整数来使用,其中 True 等价于 1。False等价于0。布尔类型可以和其他数据类型进行比较,比如数字、字符串等。在比较时,Python 会将 True 视为 1,False 视为 0。
注意: 在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False。
2.str 字符串类型,具体操作见下文字符串一节。
3.数据类型转换
在python中提供了函数将参数转为指定的类型。如int(),str(),chr(),float()
int_value = int(11.23)
char_value = char(98)
str_value = str(54.230)
float_value = float('12.35')
但是需要注意是否可以发生转换。
任何基本数据类型都可以转换为字符串类型,但是字符串在转为Number的时候,如果字符串中的数据中包含非数字就会报错,无法转换。并且float类型的字符串也无法使用int()函数直接转换为整数,但是float类型的数据可以会自动将小数部分截去转换为整数。
int_value = int("23.44")# 错误
int_value2 = int(23.54)# 正确,=23
运算符
1.算术运算符
| +,-,*,/ | 加减乘除 |
|---|---|
| // | 整除,除了之后取整数 |
| ** | 指数运算 |
| % | 取模,除法取余数 |
2.赋值运算符
| = | 直接赋值 |
|---|---|
| +=,-=,/=,*= | 作加减乘除后赋值 |
| %= | 取模后赋值 |
| //=,**= | 作整除、指数后赋值 |
注意:// 得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。
3.比较运算符
| == | 等于 |
|---|---|
| != | 不等于 |
| <,> | 大于/小于 |
| <=,>= | 大于等于/大于小于 |
分支结构
1.判断语句
1.if else
'''
格式1 单分支
if 条件 :# 有冒号
...# if代码块中的内容需要缩进
...
else:# else也有冒号,也需要缩进
...
...
'''
age = int(input('请输入年龄:'))
if age >= 18:
print('已成年')
else:
print('未成年')
'''
格式2 多分支
if 条件:
...
elif 条件:
...
elif 条件:
...
else:
...
'''
age = int(input('请输入年龄:'))
if age >= 60:
print('老人')
elif age >= 30:
print('壮年')
elif age >= 18:
print('青年')
else:
print('儿童')
'''
格式2 条件嵌套
if 条件:
if 子条件:
...
else:
...
elif 条件:
if 子条件:
...
else:
...
else:
...
'''
if age >= 18:
if age >= 40:
print('大人')
else:
print('年轻人')
else:
print('儿童')
2.match
Python 3.10 增加了 match…case 的条件判断,不需要再使用一连串的 if-else 来判断了。match 后的对象会依次与 case 后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,_ 可以匹配一切。
语法格式如下:
match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
一个 case 也可以设置多个匹配条件,条件使用 | 隔开,例如:
...
case 401|403|404:
return "Not allowed"
2.while循环语句
Python 中 while 语句的一般形式:
while condition:
statements……
同样需要注意冒号和缩进。另外,在 Python 中没有 do..while 循环。
while循环还可以结合else语句使用,表示条件成立的时候一直执行while内的语句,当条件不成立之后执行else内的语句。else内的语句仅执行一次。
语法格式如下:
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
例如:
age = 2;
while age <= 18:
print('我今年%d岁了' % age)
age += 1
else:
print('我今年成年了')
类似 if 语句的语法,如果while 循环体中只有一条语句,可以将该语句与 while 写在同一行中
while i < 10 : print(i)
3.for循环与range()函数
Python for 循环可以遍历任何可迭代对象,如一个列表或者一个字符串。
for循环的一般格式如下:
for <variable> in <sequence>:
<statements>
else:
<statements>
例如:
words = 'hello'
for i in words:
print(i)
'''
h
e
l
l
o
'''
arr = [1,2,'c','d',True]
for i in arr;
print(i)
'''
1
2
c
d
True
'''
for循环通常结合range()函数来使用,利用range()函数生成一个数列,然后使用for来循环
range()函数的使用
python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
Python3 list() 函数是对象迭代器,可以把 range() 返回的可迭代对象转为一个列表,返回的变量类型为列表。
Python2 range()函数返回的是列表。
# range(stop)
# range(start, stop[, step])
# 1.一个参数时表示右端点,左端点默认为0
range(5) # 0,1,2,3,4
# 2.生成指定区间的左闭右开的数列,默认步长为1
range(5,10) #5,6,7,8,9
# 3.生成一个指定区间的数列,指定步长
range(1,50,5)# 1,6,11,16,21,26,31,36,41,46
# 4.将可迭代对象转换为列表
list(range(0,100,5))# [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
for同样可以与else语句合用,在循环结束之后执行一次else语句
for item in iterable:
# 循环主体
else:
# 循环结束后执行的代码
4.循环控制语句
break 语句可以跳出 for 和 while 的循环体。如果从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
**else 子句 **在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被 break 终止时不执行。
pass 语句无任何意义,通常用于占位,以保证代码结构的完整性。
for i in range(10):
if i%5 == 0 :
pass
else:
print(i)
'''
1
2
3
4
6
7
8
9
'''
字符串
1.字符串的定义
python中的字符串定义方式有三种,分别使用单引号”,多引号””,和三引号””””””并且三引号定义的字符串允许换行,格式会保留下来。三引号也可以使用单引号。
str1 = '字符串1'
str2 = "字符串2"
str3 = """字符串3"""
str4 = """
这是一个字符串
我可以换行,也是一样的。
"""
2.字符串的拼接
1.python中使用+拼接合并多个变量,或合并变量与字面值。但是只能拼接字符串,不能拼接字符串和其他变量
str1 = 'this'
str2 = 'key'
str = str1 + str2 # 正确
int1 = 123
str3 = str1 + int11 # TypeError: can only concatenate str (not "int") to str
2.当两个字符串并在一起的时候会自动拼接,这项功能只能用于两个字面值,不能用于变量或表达式
str1 = 'this'
str = "我是""张三"
print(str) # 我是张三
print(str1'is a key')# 错误,不能拼接变量或者表达式
3.字符串的类型
1.普通字符串
使用成对的单双引号或者三引号定义的字符串,会解析其中的转义字符,比如\n,\r等。
str = '这是一个普通的字符串\n但是会换行'
print(str)
# 这是一个普通
# 但是会换行
2.格式字符串(f字符串)
有前缀”f”或者”F”的字符串,其中可以包含{},用于格式化,详见下一小节
3.原始字符串(r字符串)
带有前缀 ‘r’ 或 ‘R’的字符串称为原始字符串,原始字符串把反斜杠当作原义字符,不执行转义操作。
str = r'这是一个原始的字符串\n不会换行'
print(str)# 这是一个原始的字符串\n不会换行
4.b字符串
带有前缀 ‘b’ 或 ‘B’的字符串,其表示的是一个bytes类型的数据,而不是一个str类型的数据。因此这个字符串中的值必须是ascii码在128之内,超过128的必须转义。
4.字符串的格式化
1.使用printf风格的格式化
# 在python中可以直接使用%占位符来格式化,格式为 "文本内容(占位符%)(占位数据类型s,n,f...)" % (替换的字面量或者变量)
name = 'zhangsan'
age = 18
print('my name is %s, I am %d years old.' % (name,age))# my name is zhangsan, I am 18 years old.
当占位符出现多个时,填充的数据需要用()括起来,并且按顺序填写,用逗号隔开。
占位的数据类型有如下
'd' |
有符号十进制整数。 | |
|---|---|---|
'i' |
有符号十进制整数。 | |
'o' |
有符号八进制数。 | (1) |
'x' |
有符号十六进制数(小写)。 | (2) |
'X' |
有符号十六进制数(大写)。 | (2) |
'e' |
浮点指数格式(小写)。 | (3) |
'E' |
浮点指数格式(大写)。 | (3) |
'f' |
浮点十进制格式。 | (3) |
'F' |
浮点十进制格式。 | (3) |
'g' |
浮点格式。 如果指数小于 -4 或不小于精度则使用小写指数格式,否则使用十进制格式。 | (4) |
'G' |
浮点格式。 如果指数小于 -4 或不小于精度则使用大写指数格式,否则使用十进制格式。 | (4) |
'c' |
单个字符(接受整数或单个字符的字符串)。 | |
'r' |
字符串(使用 repr() 转换任何 Python 对象)。 |
(5) |
's' |
字符串(使用 str() 转换任何 Python 对象)。 |
(5) |
'a' |
字符串(使用 ascii() 转换任何 Python 对象)。 |
(5) |
'%' |
不转换参数,在结果中输出一个 '%' 字符。 |
(1)此替代形式会在第一个数码之前插入标示八进制数的前缀 ('0o')。
(2)此替代形式会在第一个数码之前插入 '0x' 或 '0X' 前缀(取决于是使用 'x' 还是 'X' 格式)。
(3)此替代形式总是会在结果中包含一个小数点,即使其后并没有数码。小数点后的数码位数由精度决定,默认为 6。
(4)此替代形式总是会在结果中包含一个小数点,末尾各位的零不会如其他情况下那样被移除。小数点前后的有效数码位数由精度决定,默认为 6。
(5)如果精度为 N,输出将截短为 N 个字符。
常用%s,%d,%f
用这种格式化方法可以控制输出的字符宽度和数据的精度,用m.n来表示,m,n均为整数,m表示输出的宽度,n表示小数的位数
number = 125.26
print("the number is %8.3f" % number)# the number is 125.260
2.使用f字符串格式化
格式字符串字面值 或称 f-string 是标注了 'f' 或 'F' 前缀的字符串字面值。这种字符串可包含替换字段,即以 {} 标注的表达式。其他字符串字面值只是常量,格式字符串字面值则是可在运行时求值的表达式。
# f"这是一个f字符串,其中包含的{}中的表达式会被解析成结果,其外的内容当做普通字符串处理,{{}}会被解析为{}"
name = 'zhangsan'
age = 18
str = f"我的名字叫{name},我今年{age}岁了,明年我就{age + 1}岁了"
# 我的名字叫zhangsan,我今年18岁了,明年我就19岁了
评论发表评论 +
评论