二、Python语言要素
2.1 代码规范
注释
- 单行注释:
#
开头 # 第一个注释 print (“Hello, Python!”) # 第二个注释
- 多行注释:
'''
或"""
包裹起来 ''' print(value, ..., sep=' ', end='\n',file=sys.stdout, flush=False) '''
缩进
- Python代码的缩进可以通过Tab键控制
- Python3不允许混合使用Tab和空格
- 正确:heavy_check_mark::
if True: print ("True") else: print ("False”) print ("False”)
- 错误:x::
if True: print ("True") else: print ("False") print (”hello”)
2.2 标识符和关键字
标识符
- 定义:变量、函数、类、模块和其他对象的名称
- 规范:
- 由数字、字母和下划线组成
- 不能用数字开头,不能包含空格
- 不能使用关键字
- 合法:heavy_check_mark::
name, message_1, _name_zhangsan
- 非法:x::
name_?, name-1, greeting message, for, if
- 合法:heavy_check_mark::
- 区分大小写,
Kirk、kirk
不是同一个标识符
关键字
- 定义:预先定义好的特殊标识符,不能用于变量命名
- python中的关键字:36个
-
# ipynb 文件中运行 import keyword keyword.kwlist
['False', 'None', 'True', 'peg_parser', - 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
2.3 变量和数据类型
变量
- 是一种存储数据的载体,变量的值可以被读取和修改。
- 创建变量
# 创建变量x,y并赋值 x = 10 y = 'Bill'
- 变量命名
- 不要将关键字和函数名,例如:不要将变量命名为
print
- 变量名应既简短又具有描述性。例如:
name
好于n
,student_name
好于s_n
,name_length
好于length_of_person_name
- 不要将关键字和函数名,例如:不要将变量命名为
数据类型
- python数据类型分为基础的数字类型和比较复杂的组合类型
- python数据类型:
- 字符串类型-str
'Python123¥' "Python123¥" '''Python s1 ~(())'''
- 列表类型-list
[1, 2, 'hello']
- 元组类型-tuple
(1, 2, 'hello'])
- 集合类型-set
{'apple', 'orange', 1}
- 字典类型-dic
{'fruit':'apple', 'quantity': 10}
- 字符串类型-str
- 数字类型
- 整数-int,- 浮点数-float,复数-complex
- 布尔-bool
- True、False表示布尔值(请注意大小写)
- 布尔运算结果(例如3 < 5会产生布尔值True,而2 == 1会产生布尔值False)
- 字符串型-str
- ' 或 " 括起来的任意文本,例如'hello'和"hello"
- ''' 或 """ 括起来的多行文本
- 列表-list
- 是一种有序和可更改的集合。允许重复的成员
- []创建列表,列表中的元素以逗号分隔
items = [] # 空列表 heroes=['邱少云','黄继光','董存瑞','雷锋']
- 元组-tuple
- 是一种有序且不可更改的集合。允许重复的成员。
- 使用()创建元组,元组中的元素以逗号分隔
changchun=("长春市", "副省级", "吉林", 20532) # 面积平方公里
- 集合-set
- 保存任意数量、任意类型的元素
- 使用{}创建,集合中的元素无序且唯一
items = {} #空集合 basket = {'apple', 'orange', 'pear', 'banana'}
- 字典-dict
- 字典中的元素是键(Key):值(Value)形式的键值对
- 键不能重复。使用{}创建字典,字典中的各元素以逗号分隔
student = {'Name': '张三', 'Age': 7, 'Class': '542109'}
2.4 数字类型
整数
- 整数表示方式
- 二进制(如
0b100
,换算成十进制是4),0b 或 0B 开头 - 八进制(如
0o100
,换算成十进制是64),0o 或 0O 开头 - 十进制(如
100
) - 十六进制(如
0x100
,换算成十进制是256),0x 或 0X 开头
- 二进制(如
- 串到整数的转换
# 结果都是整数254 num1 = int('254') # 字符串转换为十进制整数 num2 = int('0xfe',base=0) # 十六进制转换为十进制整数 num3 = int('0B11111110',base=0) # 二进制转换为十进制整数 num4 = int('0o367',base=0) # 八进制转换为十进制整数
- 整数到串的转换
num_str = str(254) # 结果:'254' hex_str = hex(254) # 结果:'0xfe' oct_str = oct(254) # 结果:'0o376' bin_str = bin(254) # 结果:'0b11111110'
- 整数的运算
- + , -, *, /, **(乘方), %(取模 - 返回除法的余数), //(取整除 - 返回商的整数部分,向下取整)
- 支持运算次序(优先级),可使用()来修改运算次序
a = 321 b = 7 result1 = a + b # 328 result2 = a - b # 314 result3 = a * b # 2247 result4 = a / b # 45.8571 result5 = a // b # 45 result6 = a % b # 6 result7 = a**b # 351184408905832640
- 大整数的数值分组
universe_age=14_000_000_000 print(universe_age) # 14000000000
浮点数
- 表示方式
- 数学写法(如
123.456
) - 科学计数法(如
1.23456e2
或2.12E-6
)
- 数学写法(如
- 浮点数的运算
a = 3.1415 b = 0.7 result1 = a + b # 3.8415 result2 = a - b # 2.4415000000000004 result3 = a * b # 2.19905 result4 = a / b # 4.487857142857143 result5 = a // b # 4.0 result6 = a % b # 0.34150000000000036 result7 = a**b # 2.228414341667732
- 浮点数运算结果包含的小数位数可能是不确定的
-
任意两个数相除时,结果总是浮点数,如
4 / 2
,结果为2.0
- 操作数有浮点数,结果总是浮点数
布尔型
- 取值 True 和 False
- 布尔类型可以当做整数来对待(在实际应用中不要这么用)
- True 相当于整数值 1
- False 相当于整数值 0
- 所有的对象都可以进行真假值的测试,包括字符串、元组、列表、字典、对象等
- ''、""、''''''、""""""、0、()、[]、{}、None、0.0、0.0+0.0j、False 为 False
- 其他都为 True
复数类型
- 如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j
类型之间的转换
- int(x,base):将一个数值或字符串转换成整数,可以指定进制。
- float(x):将一个字符串转换成浮点数
- str(x):将指定的对象转换成字符串形式,可以指定编码
- complex(x):将指定的对象转换成复数
- chr():将整数转换成该编码对应的字符串(一个字符)
- ord():将字符串(一个字符)转换成对应的编码(整数)
2.4 输入输出
输入
input (__prompt: object = ..., /) -> str # `__prompt`表示函数的参数,用于设置接收用户输入时的`提示信息` # 返回结果为 str
输出
print (value,...,sep ='',end ='\n',file = sys.stdout,flush = False) # value, ...:表示输出的对象。输出多个对象时,对象之间需要用分隔符 `,` 分隔。 # file:类文件对象(stream),输出目标; 默认为当前的sys.stdout(屏幕)。 # sep:在值之间插入的字符串,默认为空格。 # end:在最后一个值后附加的字符串,默认为换行符。 # flush:是否强制刷新流。
2.5 运算符的使用
算数运算符
a, b = 10, 3 result = a + b # 加 - 两个对象相加 结果 13 result = a - b # 减 - 得到负数或是一个数减去另一个数 结果 7 result = a * b # 乘 - 两个数相乘或是返回一个被重复若干次的字符串 结果 30 result = b / a # 除 - x除以y 结果 0.3 result = a % b # 取模 - 返回除法的余数 结果 1 result = a**b # 幂 - 返回x的y次幂 结果 1000 result = a // b # 取整除 - 返回商的整数部分(向下取整) 结果 3
比较运算符
- 返回结果为布尔值
a, b = 10, 20 flag = a == b # 等于 - 比较对象是否相等 返回 `False` flag = a != b # 不等于 - 比较两个对象是否不相等 返回 `True` flag = a > b # 大于 - 返回x是否大于y 返回 `False` flag = a < b # 小于 - 返回x是否小于y。 返回 `True` flag = a >= b # 大于等于 - 返回x是否大于等于y。 返回 `False` flag = a <= b # 小于等于 - 返回x是否小于等于y。 返回 `True`
赋值运算符
- 从右向左进行赋值
a, b = 10, 20 c = a + b # 简单的赋值运算符 将 a + b 的运算结果赋值为 c c += a # 加法赋值运算符 等效于 c = c + a c -= a # 减法赋值运算符 等效于 c = c - a c *= a # 乘法赋值运算符 等效于 c = c * a c /= a # 除法赋值运算符 等效于 c = c / a c %= a # 取模赋值运算符 等效于 c = c % a c **= a # 幂赋值运算符 等效于 c = c ** a c //= a # 取整除赋值运算符 等效于 c = c // a
逻辑运算符
- 运算结果为布尔类型
x, y = 10, 20 c = x and y # 布尔"与" 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。结果:20 c = x or y # 布尔"或" 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。 结果:10 c = not (x and y) # 布尔"非" 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。结果:False
成员运算符
- 成员运算符,测试字符串,列表或元组是否包含某个值
a = 2 ls = [1, 2, 3, 4, 5] flag1 = a in ls # 如果a在ls中返回 True,否则返回 False。结果 True flag2 = a not in ls # 如果不在ls中 True,否则返回 False。结果 False
位运算符
- 位运算符是把数字按二进制计算
a, b = 0b00111100, 0b00001101 # 60, 13 c = a & b # 按位与运算符:a,b 相应位都为1,则该位的结果为1,否则为0, 结果 12 ,二进制解释: 0000 1100 c = a | b # 按位或运算符:a,b 对应的位有一个为1时,结果位就为1。结果 61 ,二进制解释: 0011 1101 c = a ^ b # 按位异或运算符:a,b 对应的二进位相异时,结果为1, 结果 49 ,二进制解释: 0011 0001 c = ~a # 按位取反运算符:a 的每个二进制位取反,即把1变为0,把0变为1,结果 -61 ,二进制解释: 1100 0011 c = a << 2 # 左移动运算符:a 的各二进位全部左移2位,高位丢弃,低位补0。结果 240 ,二进制解释: 1111 0000 c = a >> 2 # 右移动运算符:a 的各二进位全部右移2位,结果 15 ,二进制解释: 0000 1111
身份运算符
- 身份运算符用于比较两个对象的存储单元
a, b = 10, 20 flag1 = a is b # 是判断两个标识符是不是引用自一个对象,结果:False flag2 = a is not b #判断两个标识符是不是引用自不同对象,结果:True a = b flag3 = a is b # 结果:True
运算符的优先级
- 从高到低排列
- ** 指数 (最高优先级)
- ~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
- * / % // 乘,除,取模和取整除
- + - 加法减法
- >> << 右移,左移运算符
- & 位 'AND'
- ^ ¦ 位运算符
- <= < > >= 比较运算符
- == != 等于运算符
- = %= /= //= -= += *= **= 赋值运算符
- is is not 身份运算符
- in not in 成员运算符
- not and or 逻辑运算符(最低优先级)
- 说明:在实际开发中,如果搞不清楚优先级可以使用括号来确保运算的执行顺序。