保留字与标识符
保留字:指在python中被赋予特定意义的一些单词,在开发程序时,不可以把这些保留字作为变量,函数,类,模块和其他对象的名称来使用
查询python中的保留字
import keyword
print(keyword.kwlist)
print(len(keyword.kwlist)) # 获取保留字的个数
Python标识符的命名规则
可以是字符(英文、中文)、下划线“_”和数字,并且第一个字符不能是数字
不能使用Python中的保留字
标识符严格区分大小写
true='真'
Ture='真' # True是python中的保留字
以下划线开头的标识符有特殊意义,一般应避免使用相似的标识符
允许使用中文作为标识符,但不建议使用
Python标识符的命名规范
- 模块名尽量短小,并且全部使用小写字母,可以使用下划线分隔多个字母例如:grame_main
- 包名尽量短小,并且全部使用小写字母,不推荐使用下划线。例如:com.ysjpython ,不推荐使用com_ysjpython
- 类名采用单词首字母大写形式(Pascal风格)。例如: MyClass
- 模块内部的类采用“”+Pascal 风格的类名组成,例如:在MyClass中的内部类InnerMyClass
- 函数、类的属性和方法的命名,全部使用小写字母,多个字母之间使用下划线分隔
- 常量命名时采用全部大写字母,可以使用下划线
- 使用单下划线“_”开头的模块变量或函数是受保护的,在使用“from xxxi mport *”语句从模块中导入时,这些模块变量或函数不能被导入使用双下划线“_”开头的实例变量或方法是类私有的
- 以双下划线开头和结尾的是Python的专用标识,例如: init 0表示初始化函数
变量与常量
变量的语法结构:
变量名=value
变量命名应遵循以下几条规则
- 变量名必须是一个有效的标识符
- 变量名不能使用python中的保留字
- 慎用小写字母i和大写字母O
- 应选择有意义的单词作为变量名
变量的使用和定义
print('Luck_number的类型是:',type(Luck_number))
print(my_name,'幸运数字是:',Luck_number)
# python可以动态修改变量的数据类型,通过赋不同类型的值就可以直接修改
Luck_number='北京欢迎你'
print('Luck_number的数据类型是:',type(Luck_number )) # <class 'str'>
# 在python中允许多个变量指向同一个值
no=number=1024 # no与number都指向了1024这个整数值
print(no,number)
print(id(no)) # id()查看对象的内存地址 1690715358224
print(id(number)) # 1690715358224
常量
- 常量就是在程序运行过程中值不允许改变的量
- 全部使用大写字母和下划线命名
常量的定义
pi=3.1415926 #定义了一个变量
PI=3.1415926 #定义了一个常量
数值类型
整数类型表示的数值是没有小数部分的数值,包含正整数,负整数和0
整数的四种表示形式
num=987 # 默认是十进制,表示整数
num2=0b1010101 # 使用二进制,表示整数
num3=0o765 # 使用八进制,表示整数
num4=0x87ABF # 使用十六进制,表示整数
print(num)
print(num2)
print(num3)
print(num4)
浮点数类型表示带有小数点的数值,由整数部分和小数部分组成
注意事项:两个浮点类型的数在进行运算时,有一定的概率运算结果后增加一些“不确定的”尾数
浮点数类型的使用
height=187.6 # 身高
print(height)
print(type(height)) # type()查看height这个变量的数据类型
x=10
y=10.0
print('x的数据类型:',type(x)) #int
print('y的数据类型:',type(y)) #float
x=1.99E1413
print('科学计数法:',x,'x的数据类型:',type(x))
print(0.1+0.2) # 不确定的尾数问题 0.30000000000000004
print(round(0.1+0.2,1)) # 0.3
python中的复数与数学中的复数形式完全一致,由实部和虚部组成
j=√-1
在python中实数部分使用.real表示,虚数部分使用.imag表示
复数类型的使用
x=123+456j
print('实数部分:',x.real)
print('虚数部分:',x.imag)
字符串类型
字符串类型连续的字符序列,可以表示计算机所能识别的一切字符
字符串的界定符:单引号,双引号,三引号
字符串类型的使用
city='西安'
address="西安市"
print(city)
print(address)
#多行字符串
info='''地址:
收件人:
手机号:
'''
info2="""地址:
收件人:
手机号:
"""
print(info)
print('-------------------------')
print(info2)
原字符:是转义字符失效的字符,r或R
转义字符的使用
print('北京')
print('欢迎你')
print('北京\n欢迎你') # 遇到\n即换行,可以连续换多行
print('北\n京\n欢\n迎\n你\n')
print('北京北京\t欢迎你')
print('hellooooo') #hello是五个字符,一个制表位是8个字符8-5=3
print('hello\toooo')
print('老师说:\'好好学习,天天向上\'')
print('老师说:\"好好学习,天天向上\"')
# 原字符 ,使转义字符失效的符号r或R
print(r'北\n京\n欢\n迎\n你\n')
print(R'北\n京\n欢\n迎\n你\n')
字符串又被称为有序的字符序列,对字符串中某个字符的检索称为索引
对字符串中某个子串或区间的检索称为切片
切片的语法结构
字符串或字符串变量[N:M]
字符串的索引和切片
s='HELLOWORLD'
print(s[0],s[-10])
print('北京欢迎你'[4]) #序号0和序号-10表示的是同一个字符
print('北京欢迎你'[-1])# 获取字符串索引为4
print(s[2:7]) # 从2开始到7结束不包含7 正向递增
print(s[-8:-3]) # 反向递减
print(s[:5]) # 默认从0开始
print(s[5:]) # 默认切到字符串结尾
常用的字符串操作
字符串类型的操作
x='2022年'
y='北京东奥会'
print(x+y) # 连接两个字符串
print(x*10) #将x的内容复制10次
print(10*x)
print('北京' in y)
print('上海' in y)
布尔类型
- 用来表示“真”值或“假”值的数据类型
- 在python中使用标识符Ture或Flase表示布尔类型的值
- Ture表示整数1,Flase表示整数0
布尔值为False的情况如下
- False或者是None
- 数值中的0,0.0,虚数0
- 空序列,包含空字符串,空元组,空列表,空字典,空集合
- 自定义对象的示例,该对象的_bool_()方法返回False或,_len_()方法返回0
布尔类型的使用
x=True
print(x)
print(type(x))
print(x+10) # 11 -->1+10
print(False+10) #10 -->0+10
print(bool(18)) #测试一下整数18的布尔值 True
print(bool(0),bool(0.0)) #False
#总结:非0的整数的布尔值都是True
print(bool('北京欢迎你')) # True
print(bool('')) # False
#所有非空字符串的布尔值都是True
print(bool(False)) # False
print(bool(None)) # False
数据类型之间的转换
x=10
y=3
z=x/y
print(z,type(z)) #隐式转换 float
#float类型转成int类型,只保留整数部分
print('float类型转成int类型:',int(3.14))
print('float类型转成int类型:',int(3.9))
print('float类型转成int类型:',int(-3.14))
print('float类型转成int类型:',int(-3.9))
#将int转成float类型
print('将int转成float类型:',float(10))
#将str转成int类型
print(int('100')+int('200'))
#将字符串转成int或float时报错的情况
#print(int('18a')) #ValueError: invalid literal for int() with base 10: '18a'
#print(int('3.14')) #ValueError: invalid literal for int() with base 10: '3.14'
#print(int('45a.987')) #ValueError: invalid literal for int() with base 10: '45a.987'
#chr() ord()
print(ord('杨')) #杨在Unicode表中对应的整数值
print(chr(26472)) # 26472整数在unicode表中对应的字符是什么
#进制之间的转换操作,十进制与其他进制之间的转换
print('十进制转换成十六进制:',hex(26472))
print('十进制转换成八进制:',oct(26472))
print('十进制转换成二进制:',bin(26472))
eval函数
- python中的内置函数
- 用于去掉字符串最外侧的引号,并按照python语句的方式执行去掉引号后的字符串
- eval()函数经常和input()函数一起使用
eval的语法格式:
变量=eval(字符串)
eval函数的使用
s='3.14+3'
print(s,type(s))
x=eval(s) #使用eval函数去掉s字符串zhong左右的引号,执行加法运算
print(x,type(x))
#eval函数经常与input()函数一起使用,用来获取用户输入的数值
age=eval(input('请输入你的年龄:')) #将字符串类型转成int类型,相当于int(age)
print(age,type(age))
height=eval(input('请输入你的身高:'))
print(height,type(height))
hello='北京欢迎你'
print(hello)
print(eval('hello')) #输出北京欢迎你
#print(eval('北京欢迎你')) #NameError: name '北京欢迎你' is not defined
运算符
算术运算符
算数运算符:用于四则运算的符号
print('加法:',1+1)
print('减法:',1-1)
print('乘法:',2*3)
print('除法:',10/2)
print('整除:',10//3)
print('取余:',10%3)
print('幂运算:',2**4) #2*2*2*2
print(10/0) #ZeroDivisionError: division by zero
赋值运算符
x=20 #直接赋值,直接将20赋值给左侧的变量x
y=10
x=x+y #将x+y的和赋值给x,x的值为30
print(x) #30
x+=y #40 相当于x=x+y
x-=y #相当于x=x-y
print(x) # 30
x*=y
print(x) #300
x/=y
print(x) #30.0 发生了类型转换 x的数据类型位float
print(type(x)) #float
x%=2 # 相当于 x=x%2
print(x) #0.0
z=3
y//=z # 相当于 y=y//z
print(y) #3
y**=2 # 相当于 y=y**2
print(y) # 9
#python 支持链式赋值
a=b=c=100 # 相当于 a=100 b=100 c=100
print(a,b,c)
#python 支持系列解包赋值
a,b=10,20 # 相当于 a=10 b=20
print(a,b)
#如何交换两个变量的值?
a,b=b,a #将a的值赋给b,将b的值赋给a
print(a,b)
比较运算符
print('98大于90吗:',98>90)
print('98小于90吗:',98<90)
print('98等于90吗:',98==90)
print('98不等于于90吗:',98!=90)
print('98大于等于98吗:',98>=98)
print('98小于等于98吗:',98<=98)
逻辑运算符
print(True and True)
print(True and False)
print(False and False)
print(False and True)
print('-'*40)
print(8>7 and 6>5)#True
print(8>7 and 6<5)#False
print(8<7 and 10/0)#False 10/0没有运算,当第一个表达式的结果为false,直接得结果,不会计算and右边的表达式
print('-'*40)
print(True or True)
print(True or False)
print(False or False)
print(False or True)
print(8>7 or 10/0) #True ,左侧的表达式结果为True时,or的右侧表达式根本不执行运算
print('-'*40)
print(not True)#False
print(not False)#True
print(not(8>7))#False
位运算符
位运算符把数字看作二进制数来进行计算
print('按位与:',12&8)#0b1000
print(bin(12)) #0b1100
print(bin(8)) #0b1000
print('按位或:',4|8)#0b1100
print(bin(4)) #0b0100
print(bin(8)) #0b1000
print('按位异或:',31&22)#0b01001
print(bin(31))#0b11111
print(bin(22))#0b10110
print('按位取反:',~123)
print(bin(123)) #0b1111011
print(bin(~123))#-0b1111100
print('左移位:',2<<2) # 8, 表示2向左移动两位 2*2*2
print('左移位:',2<<3) #相当于 2*2*2*2
print('右移位:',8>>2) # 8向右移动两位,相当于8//2,4//2
print('右移位:',-8>>2)# -2