1. 注释
- 单行注释:
# 这是一个单行注释
print("Hello Wrold!")
- 多行注释:
'''
这是
一个
多行注释
'''
2. 算术运算符
# 加法
print(1 + 1)
# 减法
print(20 - 12)
# 乘法
print(10 * 23)
# 除法
print(22 / 2)
# 取整数,返回除法的整数部分(商)。下面的结果为4
print(9 // 2)
# 取余数
print(9 % 2)
# 幂运算
print(2 ** 3)
3. 数据类型
- 在 Python 中, 定义变量时,不需要指定变量的类型。在运行过程中,Python 解释器会根据赋值语句
等号右侧的数据自动推导出变量中保存数据的准确类型。 type(变量名)
查看当前变量的类型。- 数据类型分类:数字型和非数字型
- 数字型:
- 整型(int)(在 Python2.X 中,整型分为
int
,long
) - 浮点型(float)
- 布尔型(bool)
- 复数型(complex),主要用于科学计算。
- 整型(int)(在 Python2.X 中,整型分为
- 非数字型:
- 字符串
- 列表
- 元组
- 字典
- 数字型:
# 字符串变量之间可以使用"+"进行拼接
a = "Hello "
b = "World!"
print(a + b)
# 字符串变量可以使用"*"进行重复
print("A" * 10)
# 数字型变量和字符串之间不能进行其他计算
# 下面的输出会报错
print("A" + 10)
3.4 变量的格式化输出
%
被称为格式化操作符,专门用于处理字符串中的格式;%s
表示字符串;%d
表示有符号十进制整数,%06d
表示输出的整数显示位数,不足的地方使用0%f
表示浮点数,%.2f
表示小数点后只显示两位;%%
输出%
;
# 输出学号 000021, 地址是: 江苏南京
num = 21
address = "江苏南京"
print("我的学号是:%06d,地址是:%s" % (num, address))
# 输出百分比: 12.45%
percent = 12.45
print("所占百分比:%.2f%%" % percent)
3.5 变量的命名
- 标识符就是程序中定义的变量名,函数名;
- 标识符可以由字母,下划线和数字组成;
- 不能以数字开头;
- 不能与关键字重名;
Python
中的标识符是区分大小写的;- 在
Python
中,如果变量名需要由多个单词组成时,可以按照以下方式命名:- 每个单词都使用小写字母;
- 单词与单词之间使用下划线连接;
- 例如:
stu_name
,stu_address
,stu_num
4. 逻辑语句
4.1 if
语句
# 格式:
if 条件1 and 条件2:
条件1成立时,需要执行的操作
elif 条件3 or 条件4:
条件2成立时,需要执行的操作
else:
条件不成立时,需要执行的操作
# 注意:代码的缩进为一个Tab键,或者 4 个空格 -- 建议使用空格
# 在 Python 开发中, Tab 和 空格不要混用!
# 示例: 三元运算符
# 格式: [on_true] if [expression] else [on_false]
a = 1
b = 2
c = a if a > 1 else b # 如果a大于1,c=a, 否则 c=b
4.2 循环语句
# while 循环
# 打印 5 遍 Hello Python
i = 1
while i <= 5:
print("Hello Python")
i += 1
# 示例一:
# 在控制台连续输出五行 *, 每一行星号的数量依次递增
row = 1
while row <= 5:
print("*" * row)
row += 1
# 第二种方式:
# 备注: 向控制台输出内容结束之后,不会换行
# print("*", end="")
row = 1
while row <= 5:
col = 1
while col <= row:
print("*", end="")
col += 1
# 表示在一行星星输出完成之后,添加换行!
print("")
row += 1
# 示例二: 输出九九乘法表
# 备注: 字符串中的转义字符
# \t : 在控制台输出一个制表符,协助在输出文本时,垂直方向保持对齐
# \n : 在控制台输出一个换行符
row = 1
while row <= 9:
col = 1
while col <= row:
print("%d * %d = %d" % (col,row,col * row), end="\t")
col += 1
print("")
row += 1
# 示例三:
counter = 0
while counter < 3:
username = input("Username:")
password = input("Passwod:")
if username == _user and password = _passwd:
print("Welcome %s login ..." % _user)
break
else:
print("Invalid username or password")
counter += 1
else:
print("输入次数超出限制!")
5. 高级变量类型
- 列表
- 元组
- 字典
- 字符串
5.1 列表(List)
- 列表用
[]
定义,数据之间使用,
分隔; - 列表中可以存储不同类型的数据,但是,在开发中,列表经常用于存储相同类型的数据;
- 列表的索引从
0
开始;
5.1.1 列表的常见操作(方法):
- 增加:
insert(索引, 数据)
: 在指定位置插入数据;append(数据)
: 在末尾追加数据;extend(列表2)
: 将列表2的数据追加到列表;
- 修改:
列表[索引] = 新数据
: 修改指定索引的数据;
- 删除:
del 列表[索引]
: 删除指定索引的数据;列表.remove(数据)
: 删除第一个出现的指定数据;列表.pop()
: 删除末尾数据;列表.pop(索引)
: 删除指定索引数据;列表.clear
: 清空列表;
- 统计:
len(列表)
: 获取列表长度;列表.count(数据)
: 数据在列表中出现的次数;
- 排序:
列表.sort()
: 升序排序;列表.sort(reverse=True)
: 降序排序列表.reverse()
: 逆序(反转)
# 列表的循环遍历
name_list = ["zhangsan","lisi","wangwu","zhaoliu"]
for name in name_list:
print(name)
# 向列表中添加元素
t_list = [1, 2]
t_list.extend([3, 4]) # t_list = [1, 2, 3, 4]
t_list.append([5, 6]) # t_list = [1, 2, 3, 4, [5, 6]]
5.2 元组(Tuple)
- 元组表示多个元素组成的序列,元组中的元素不能修改;
- 元组通常用于保存不同类型的数据;
- 元组使用
()
定义; - 元组中只包含一个元素时,需要在元素后面添加逗号:
a_tuple = (3,)
- 元组的常见方法:
元组.index(数据)
: 获取数据在元组中的索引;元组.count(数据)
: 获取数据在元组中出现的次数;
- 元组和列表之间的转换:
List(元组)
: 把元组转换成列表;tuple(列表)
: 把列表转换成元组;
- 元组应用场景:
- 函数的参数和返回值;
- 让列表不可以被修改;
# 格式化字符串后面的 () 本质上就是元组
print("%s 年龄是 %d, 身高是 %.2f" % ("张三", 12, 1.53))
stu_info = ("张三", 12, 1.53)
print("%s 年龄是 %d, 身高是 %.2f" % stu_info)
stu_info = "%s 年龄是 %d, 身高是 %.2f" % ("张三", 12, 1.53)
print(stu_info)
5.3 字典(Directory)
- 字典通常用于存储描述一个物体的相关信息;
- 字典使用
{}
定义; - 字典使用键值对存储数据,键值对之间使用
,
分隔;- 键 和 值之间使用
:
分隔; - 键必须是唯一的;
- 值可以区任何数据类型,但键只能使用字符串,数字或元组(不可变数据类型);
- 键 和 值之间使用
- 字典和列表的区别:
- 列表是有序的对象集合;
- 字典是无序的对象集合;
- 字典的常见操作:
字典.pop(key)
: 删除键值对;len(字典)
: 统计键值对数量;字典1.update(字典2)
: 合并字典;如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对;字典.clear()
: 清空字典;
5.4 字符串
- 可以使用一对双引号或者一对单引号定义一个字符串;
- 虽然可以使用
\"
或者\'
做字符串的转义,但是在实际开发中:- 如果字符串内部需要使用双引号,可以使用单引号来定义字符串;
- 如果字符串内部需要使用单引号,可以使用双引号来定义字符串;
- 大多数编程语言都是用
"
来定义字符串; - 字符串的常用操作:
len(字符串)
: 获取字符串的长度;字符串.count(字符串2)
: 获取小字符串在大字符串中出现的次数;字符串.index(字符串2)
: 获取小字符串第一次出现的索引;若不存在,会报错;字符串.find(字符串2)
: 查找字符串,若不存在,返回 -1;字符串.startswith(字符串2)
: 以某个内容开头字符串.endswith(字符串2)
: 以某个内容结尾字符串.replace(old_str, new_str)
: 替换字符串;该方法执行完成之后,会返回一个新的字符串;而原有字符串不变;- 字符串的切片:
字符串[开始索引:结束索引:步长]
,
# 字符串的遍历
string = "Hello Python!"
for c in string:
print(c)
# string.isdecimal(): 如果 string 只包含数字则返回True, 全角数字
# string.isdigit(): 如果 string 只包含数字则返回True, 全角数字, (1), \u00b2(Unicode 码)
# string.isnumeric(): 如果 string 只包含数字则返回True, 全角数字, 中文数字
# 如果 string 中包含小数, 以上三个方法均返回 False
# 需求: 字符串逆序
str = "abcdefg"
str[::-1]
# 字符串拼接
a = '123'
b = 'abc'
c = '789'
d1 = a + b + c
print(d1)
# + 效率低,该用 join
d2 = ''.join([a,b,c])
print(d2)
5.5 可变和不可变数据类型
- 不可变类型:
- 数字类型
int
,bool
,float
,complex
- 字符串
str
- 元组
tuple
- 数字类型
- 可变类型:
- 列表
list
- 字典
dict
- 列表
5.6 高级数据类型的公共方法
- Python 的内置函数(即不需要
import
导入模块就可以调用)len(item)
: 计算容器中元素个数;del(item)
: 删除变量;max(item)
: 返回容器中元素最大值;如果是字典,只针对key
比较;min(item)
: 返回容器中元素最小值;
- 成员运算符
in
: 如果在指定的序列中找到值,返回True,否则,返回False;not in
: 如果在指定的序列中没有找到值,返回True, 否则,返回False;
# 完整的 for 循环语法
for 变量 in 集合:
循环体代码
else:
没有通过 break 退出循环, 循环结束后, 会执行的代码
# 应用场景: 可以用于迭代遍历嵌套的数据类型(例如,一个包含多个字典的列表)
# 需求: 要判断某一个字典中是否存在指定的值
# 如果存在, 提示并且退出循环;
# 如果不存在,在循环整体结束后,希望得到一个统一的提示;
students = [
{"name": "张三",
"age": 18,
"gender": True,
"height": 1.69},
{"name": "李四",
"age": 23,
"gender": False,
"height": 1.74}
]
find_name = "李四"
for stu_dict in students:
if stu_dict["name"] == find_name:
print("找到了 %s" % find_name)
break
else:
print("抱歉,没有找到 %s" % find_name)
print("循环结束!")
6. 深拷贝和浅拷贝
- 浅拷贝:就是对引用的拷贝;
- 深拷贝:对对象资源的拷贝;
# 示例:
# 浅拷贝
a = [11, 22, 33]
b = a
id(a) # 4420079880
id(b) # 4420079880
# 深拷贝
import copy
c = copy.deepcopy(a)
id(c) # 4419542728
a.append(44)
a # [11, 22, 33, 44]
b # [11, 22, 33, 44]
c # [11, 22, 33]
# 列表的拷贝
a = [11, 22, 33]
b = [44, 55, 66]
c = [a, b]
d = c
id(c) # 4419627080
id(d) # 4419627080
e = copy.deepcopy(c)
id(e) # 4419576776
a.append(77)
c[0] # [11, 22, 33, 77]
e[0] # [11, 22, 33]
f = copy.copy(c) # 4419597704
a.append(88)
c[0] # [11, 22, 33, 77, 88]
f[0] # [11, 22, 33, 77, 88]
# 元组的拷贝
a = [1, 2, 3]
b = [4, 5, 6]
c = (a, b)
e = copy.copy(c)
id(c) # 4419622664
id(e) # 4419622664
7. 进制转换
- 十进制转换成二进制:
bin(十进制数)
,二进制以0b
开头; - 十进制转换成八进制:
oct(十进制数)
, 八进制以0
开头; - 十进制转换成十六进制:
hex(十进制)
, 十六进制以0x
开头; - 其他进制转换成十进制:
int("二进制数",2)
,int("八进制数", 8)
,int("十六进制数", 16)
8. Python 2.x 和 Python 3.x 的区别
# 说明:
# 1. Python 2.x 默认使用 ASCII 编码格式
# 2. Python 3.x 默认使用 UTF-8 编码格式
在 Python 2.x 文件中的第一行增加以下代码, 解释器会以 utf-8 编码来处理python文件
# *-* coding:utf8 *-*
也可以使用
# coding=utf8
# 在 Python 2.x 中,即使指定了文件使用 UTF-8 的编码格式,但是在遍历字符串时,仍然会以字节为单位遍历字符串
# 要能够正确的遍历字符串,在定义字符串时,需要在字符串的引号前,增加一个小写字母 u,告诉解释器,这是
# 一个 unicode 字符串(即使用UTF-8编码格式的字符串)
# 示例:
# *-* coding:utf8 *-*
hello_str = u"hello 世界"
print(hello_str)
# 如果字符串前没有小写字母 u, 会输出错误
for c in hello_str:
print(c)
参考资料:
- Python 基础