python语言基础
1、语法特点
1.1 注释规则
(1)单行注释
语法: # [注释内容]
(2)多行注释
语法: 在 python 中将包含在一对三引号('''...''')或者("""...""")之间,并且不属于任何语句的内容认为是多行注释 应用:通常为文件、模块、类添加版权声明和功能信息 ''' Author: zhangyy DATE: 2020-01-03 '''
(3)中文编码声明注释
语法: # -*- coding:编码 -*- # coding=编码 编码:utf-8、gbk、cp936 应用: # -*- coding:utf-8 -*- # coding=utf-8
1.2 代码缩进
行尾的冒号 ":" 和下一行的缩进,表示一个代码段的开始;而缩进的结束表示一个代码段的结束;
同一个级别的代码块的缩进量必须相同,如果不采用合理的代码缩进,将抛出 SyntaxError 异常。
1.3 编码规范:PEP8
(1)每个 import 语句只导入一个模块,尽量避免一次导入多个模块;
(2)不要在行尾添加分号 ";",也不要用分号将两条命令放在同一行;
(3)建议每行不超过80个字符;
针对字符串超过80个字符:可以在要换行的地方添加反斜杠 "\",回车换行,但是推荐使用小括号 (),来吧多行的内容隐式的连接起来格式。
s = "xxxxxxxxxxxxxxxxx" \
"xxxxxxxxxxxxxx"
print(s)
执行结果
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
s = ("xxxxxxxxxxxxxxxxx" "xxxxxxxxxxxxxx") print(s)
执行结果:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
针对语句超过80个字符:
num = 22 if num >= 20 and num <30: print("20<",num,"<30")
执行结果:
20< 22 <30
语句换行:
num = 22
if num >= 20 and (
num <30): #使用小括号换行语句,小括号定义在操作符之后
print("20<",num,"<30")
执行结果:
20< 22 <30
导入模块的语句过长和注释里面的 url 过长不能换行
(4)使用必要的空行增加代码的可读性
顶级定义之间空两行(函数的定义、类的定义)
方法的定义之间空一行
(5)运算符两侧、函数参数之间、逗号 "," 两侧建议使用空格进行分隔
(6)避免在循环中使用 + 和 += 运算符累加字符串
(7)适当使用异常处理结构提高程序容错性
1.4 命名规范
模块名尽量短小,并且使用全部小写字母,可以使用下划线分隔多个字母;
game_main(例:游戏模块)
包名尽量短小,并且使用全部小写字母,可以使用点 "." 分隔多个字母;
com.mingrisoft(例)
类名采用单词首字母大写形式(即帕斯卡 Pascal 风格);
BorrowBook(例:借书类)
模块内部的类由 "_"+Pascal 风格的类名组成;
_BorrowBook(表示为BorrowBook类中的内部类)
函数、类的属性和方法名全部采用小写字母,多个字母间用"_"分隔;
常量命名时采用全部大写字母,可以使用下划线;
使用单下划线"_"开头的模块变量或函数是受保护的;
使用双下划线"__"开头的实例变量或方法是类私有的。
2、保留字与标识符
2.1 保留字
import keyword print(keyword.kwlist) #查看保留字
注意:python 中保留字区分大小写;在 python 开发程序时,如果使用 python 中的保留字作为模块、类、函数或者变量名时,将产生无效语法。
2.2 标识符
以字母、下划线"_"和数字命名,数字不能为第一位
以下划线开头的标识符,表示不能世界访问的类属性,也不能被import被导入(保护变量)
以双下划线开头的标识符,表示类的私有成员
以双下划线开头和结尾的标识符,表示专用标识
3、变量
变量 (名字、标签) — 把值存储在变量中
3.1 使用变量
不用先声明变量名和类型,可以直接赋值,使用内置函数 type() 可以返回变量类型
python = "学会python还可以飞" age = 22
print(python)
print(age)
print("python type:",type(python),"age type:",type(age))
执行结果:
学会python还可以飞
22
python type: <class 'str'> age type: <class 'int'>
python 是动态类型的语言,允许多个变量指向同一个值,使用内置函数id()返回变量所指的内存地址
num = age = 20 print(num) print(age) print(id(num)) print(id(age))
执行结果: 20 20 140721814795120 140721814795120
3.2 变量的命名规则
必须是一个有效的标识符
选择有意义的单词
不能选择 python 中的保留字
慎用小写字母l和大写字母O
3.3 python 中无法定义常量,赋值即定义
4、基本数据类型
4.1 数字类型
(1)整数:十进制、八进制、二进制、十六进制
二进制:0b1000110
八进制:0o6514
十六进制:0x5E6
(2)浮点数:整数部分.小数部分
浮点数进行计算,可能会出现小数位数不确定的情况(可以使用 round 四舍五入函数去掉多余位数)
print(0.1+0.2) 执行结果: 0.30000000000000004 print(round(0.1+0.2,1)) 执行结果: 0.3
(3)复数
4.2 字符串类型
字符串属于不可变序列:通常使用单引号 ' '、双引号 " " 和三引号 ''' ''' 括起来,对于单引号和双引号里面的字符序列必须在一行;三引号里面的字符序列可以在多行。
在字符串前加小写字母r,不转义\
a = 'pytho\'n' b = r'pytho\'n' print(a) print(b)
执行结果: pytho'n pytho\'n
4.3 布尔类型:主要用来表示真或假的值
布尔值:
True(1):真
False(0):假
除了 False、None、0、0.0、虚数 0、空序列(空字符串、空元组、空列表、空字典)或对象方法返回的 False 和 0 表示为假,其他皆为真。
4.4 数据类型转换
python 是动态类型的语言(弱类型的语言)即使用变量之前不需要声明变量的类型
常用的数据类型转换函数:
实例:商品结账抹零 money_all = 56.75 + 34.22 + 54.88 + 77 #累加总计金额 money_all_str = str(money_all) #浮点类型转换为整数类型 print("商品总金额为:"+money_all_str) money_real = int(money_all) #转换为整形(进行抹零处理) money_real_str = str(money_real) print("实收金额为:"+money_real_str) 执行结果: 商品总金额为:222.85 实收金额为:222
5、基本输入和输出
5.1 使用内置函数 input() 接收用户的输入
基本语法: password = input("请输入密码")
input() 函数返回值为字符串类型,如有需要进行数据类型转换
基本语法: password = int(input("请输入密码"))
实例: grade = input("请输入你的成绩:") print("你的成绩为:",grade) 执行结果: 请输入你的成绩:11 你的成绩为:11
5.2 使用 print() 函数输出
基本语法: print(输出内容)
输出内容可以是数字、字符串(使用字符串定界符括起来)、运算式
在 python 中默认一条 print() 语句输出后自动换行,使用逗号 "," 相隔多个输出内容(默认以空格分隔),使至不换行
也可以输出到文件:
fp = open(r'F:\mot.txt','a+') print("python",file = fp) #输出到文件 fp.close() #关闭文件
6、内存管理
python 编程中一般无须关心变量的存亡,一般也不用关心内存的管理
python 使用引用计数记录所有对象的引用数
当对象引用数变为0,它就可以被垃圾回收GC
计数增加:
赋值给其他变量就增加引用计数,例如x=3; y=x; z=x
实参传参,如foo(y)
计数减少:
函数运行结束时,局部变量就会自动销毁,对象引用计数减少
变量被赋值给其他对象,例如x=3; y=x; x=4
有关性能的时候,就需要考虑变量的引用问题,但是该释放内存还是尽量不释放内存,看需求
# -*- coding:utf-8 -*- # version:python3.7 import sys #引用计数增长 a = [] #赋值空列表给a,引用计数为1 b = a #引用计数为2 c = a #引用计数为3 d = c #引用计数为4 print(sys.getrefcount(a)) #获取引用计数(4再加1) #引用计数减少 a = 1 #减少1(释放) b = 2 #再减1(释放) print(sys.getrefcount(c)) #获取引用计数 执行结果: 5 3
7、数字处理函数
(1)round():四舍六入,五取偶
print(round(3.1),round(3.49),round(4.5),round(3.5),round(3.7))
执行结果:
3 3 4 4 4
(2)math模块:floor()地板、ceil()天花板
# 地板: import math #获取math模块 print(math.floor(2.1),math.floor(-2.3)) #floor地板:向下取整 执行结果: 2 -3 # 天花板: import math #获取math模块 print(math.ceil(2.1),math.ceil(-2.3)) #ceil天花板:向上取整 执行结果: 3 -2
(3)//:整除且向下取整
(4)int():截取整数部分
(5)min()、max()
(6)pow(x,y)等于x**y
(7)math.sqrt():开方
(8)进制函数,返回值是字符串
bin(10),oct(10),hex(10) #返回字符串
8、类型判断
type(obj):返回类型,而不是字符串
print(type('abc')) print(type(123)) print(type(1 + True)) print(type(1 + True + 2.4)) #隐式类型转换 执行结果: <class 'str'> <class 'int'> <class 'int'> <class 'float'>
print(isinstance('abc',(bool,int))) #判断'abc'是bool值吗?是int吗? print(isinstance('abc',(bool,int,str))) #判断'abc'是bool值吗?是int吗?是str吗?返回类型 执行结果: False True