文章目录
- 一、基础简介
- 1、Python简介
- 2、执行过程
- 二、变量
- 三、数据类型
- 1、数字
- 2、字符串
- 3、布尔bool
- 4、空值对象None
- 5、列表
- 6、字典
- 7、数据类型转换
- 重点
- 四、格式化输出
- 五、算术运算符
- 1、算术运算
- 2、比较运算
- 3、赋值运算
- 4、逻辑运算
- 5、身份运算
- 6、优先级
一、基础简介
1、Python简介
Python定义:是一个免费、开源、跨平台、动态、面向对象的编程语言。
Python程序的执行(运行)方式有两种:交互式、文件式
交互式
在命令行输入指令,回车即可得到结果。
1.打开终端
2.进行交互式:python3
3.编写代码:print(“hello world”)
4.离开交互式:exti()
文件式
将指令编写到.py文件,可以重复运行程序。
1.编写文件(后缀.py不能省略)
2.打开终端
3.进入程序所在目录:输入“cd” 进入到某个目录
4.执行程序:python3文件名(刚才编写的文件名称+.py)
2、执行过程
计算机只能认识机器码(1010),不能识别源代码(python)。
1.由源代码转变成机器码的过程分成两类:编译和解释。
2.编译:在程序运行之前,通过编译器讲源代码变成机器码,例如:C语言
优点:运行速度快
缺点:开发效率低,不能跨平台。
3.解释:在程序运行之时,通过解释器对程序逐行翻译,例如:Javascript
优点:开发效率高,可以跨平台
缺点:运行速度慢
4.python是解释型语言,但为了提高运行速度,使用了一种编译的方法。编译以后得到pyc文件,存储了字节码(特定于Python的表现形式,不是机器码)。
源代码—编译–>字节码–解释–>机器码
源代码到字节码的编译过程只在第一次执行
二、变量
1.定义:关联一个对象的标识符。
2.命名:必须是字母或下划线开头,后跟字母、数字、下划线。
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 关键字不能声明为变量名[‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’, ‘or’, ‘pass’, ‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
不能使用关键字(关键字会显示蓝色),否则发生语法错误:SyntaxError: invalid syntax。
建议命名:
- 驼峰体
AgeOfOldboy = 56
NumberOfStudents = 80 - 下划线(推荐使用)
age_of_oldboy = 56
number_of_students = 80
不建议拼音命名
3.赋值:创建一个变量或改变一个变量绑定的数据。
4.语法:
- 变量名 = 数据
- 变量名1 = 变量名2 = 数据
- 变量名1, 变量名2 = 数据1, 数据2
5.常量
常量即指不变的量,如pai 3.141592653…, 或在程序运行过程中不会改变的量
举例,假如老男孩老师的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量
AGE_OF_OLDBOY = 56
ps:在c语言中有专门的常量定义语法,const int count = 60;一旦定义为常量,更改即会报错
三、数据类型
1、数字
整形int
表示整数,包含正数、负数、0。如: -5, 100, 0
字面值:
十进制:5
二进制:0b开头,后跟0或者1
二进制(0 1 10 11 100 101 …)
num02 = 0b11
print(num02)
#num02=3
八进制:0o开头,后跟0,1,2,3,4,5,6,7,
八进制(0 1 … 7 10…)
num03 = 0o10
print(num03)
#num03=8
十六进制:0x开头,后跟0,1,2,3,4,5,6,7,8,9,a(10),b(11),c(12),d(13),e(14),f(15)
十六进制(0 1 …9 a(10) – f(15) 10(16))
num04 = 0xa
print(num04)
#num04=10
小整数对象池:CPython 中整数 -5 至 256,永远存在小整数对象池中,不会被释放并可重复使用。
浮点型float
表示小数,包含正数、负数,0.0。
字面值:
小数:1.0 2.5
科学计数法:e/E (正负号) 指数
例如:
1.23e-2 (等同于0.0123)
1.23456e5(等同于123456.0)
1.0000002科学计数法表达(1+0.2e-6)
f01 = 0.0
f02 = 0.2e2
print(f02)
#f02=20.0
print(type(f01))
#<class ‘float’>
其他数据类型(了解)
int(整型)
在32位机器上,整数的位数为32位,取值范围为-231~231-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-263~263-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在Python3里不再有long类型了,全都是int
>>> a= 2**64
>>> type(a) #type()是查看数据类型的方法
<type 'long'>
>>> b = 2**60
>>> type(b)
<type 'int'>
complex复数型
>>> x=1-2j
>>> x.imag
-2.0
>>> x.real
1.0
2、字符串
是用来记录文本信息(文字信息)。
字面值:双引号(也可以用单引号 但不建议用)
在python中,加了引号的字符就是字符串类型,python并没有字符类型。
定义:name=‘egon’ #name=str(‘egon’)
用于标识:描述性的内容,如姓名,性别,国籍,种族
单引号、双引号、三引号的区别
#那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合
msg = “My name is Egon , I’m 18 years old!”
多引号什么作用呢?作用就是多行字符串必须用多引号
msg = ‘’’
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
‘’’
print(msg)
字符串拼接(只能在字符串之间进行,且只能相加或相乘)
#数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。
name=‘egon’
age=‘18’
name+age #相加其实就是简单拼接
‘egon18’name*5
‘egonegonegonegonegon’注意1:字符串相加的效率不高
字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次,注意2:只能字符串加字符串,不能字符串加其他类型
3、布尔bool
用来表示真和假的类型
True 表示真(条件满足或成立),本质是1
False 表示假(条件不满足或不成立),本质是0
从语义上讲 没有数据为False
b01 = True # 真 对
b02 = False # 假 错
print(b01) #b01=True
print(type(b01)) # <class ‘bool’>
4、空值对象None
表示不存在的特殊对象。
作用:
1.用来占位(创建变量name01,但暂时“不存储数据”。)
创建变量name01,但暂时"不存储数据".
name01 = None
name01 = “张三”
print(name01) #张三
2.变量解除绑定()
name02 = “张三”
name02 = None
print(name02) #None
!!!所有数据类型都自带布尔值
1、None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
2、其余均为真
5、列表
在[]内用逗号分隔,可以存放n个任意类型的值
定义:students=[‘egon’,‘alex’,‘wupeiqi’,] #students=list([‘egon’,‘alex’,‘wupeiqi’,])
用于标识:存储多个值的情况,比如一个人有多个爱好
列表嵌套:
#存放多个学生的信息:姓名,年龄,爱好
>>> students_info=[['egon',18,['play',]],['alex',18,['play','sleep']]]
>>> students_info[0][2][0] #取出第一个学生的第一个爱好
'play'
6、字典
为何还要用字典?
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下
info=[‘egon’,‘male’,18]
定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用
info[2]
#18
但这是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄
即:
#name, sex, age
info=[‘egon’,‘male’,18]
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们需要寻求一种,即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value,这就用到了字典
在{}内用逗号分隔,可以存放多个key:value的值,value可以是任意类型
定义:info={‘name’:‘egon’,‘age’:18,‘sex’:18} #info=dict({‘name’:‘egon’,‘age’:18,‘sex’:18})
用于标识:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效地取值
字典相关的嵌套
info={
'name':'egon',
'hobbies':['play','sleep'],
'company_info':{
'name':'Oldboy',
'type':'education',
'emp_num':40,
}
}
print(info['company_info']['name']) #取公司名
students=[
{'name':'alex','age':38,'hobbies':['play','sleep']},
{'name':'egon','age':18,'hobbies':['read','sleep']},
{'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']},
]
print(students[1]['hobbies'][1]) #取第二个学生的第二个爱好
7、数据类型转换
转换为整形: int(数据)
转换为浮点型:float(数据)
转换为字符串:str(数据)
转换为布尔:bool(数据)
结果为False:bool(0) bool(0.0) bool(None)
混合类型自动升级:
1 + 2.14 返回的结果是 3.14
1 + 3.0 返回结果是: 4.0
在python中变量没有类型,但关联的对象有类型。
通过type函数可查看。
可以通过tpye()查询数据类型
例如:
>>>type(1)
<type 'int'> #整型
>>>type('iplaypython')
<type 'str'> #字符串
重点
1.可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典
2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
# %s字符串占位符:可以接收字符串,也可接收数字
print('My name is %s,my age is %s' %('egon',18))
# %d数字占位符:只能接收数字
print('My name is %s,my age is %d' %('egon',18))
print('My name is %s,my age is %d' %('egon','18')) #报错
# 接收用户输入,打印成指定格式
name=input('your name: ')
age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d
print('My name is %s,my age is %s' %(name,age))
#注意:
#print('My name is %s,my age is %d' %(name,age)) #age为字符串类型,无法传给%d,所以会报错
四、格式化输出
程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式
比如要求用户输入用户名和年龄,然后打印如下格式:
My name is xxx,my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。
这就用到了占位符,如:%s、%d
五、算术运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算
1、算术运算
以下假设变量:a=10,b=20
2、比较运算
以下假设变量:a=10,b=20
3、赋值运算
以下假设变量:a=10,b=20
4、逻辑运算
1、三者的优先级关系:not>and>or,同一优先级默认从左往右计算。
>>> 3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3
False
2、最好使用括号来区别优先级,其实意义与上面的一样
'''
原理为:
(1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not与紧跟其后的条件不可分割
(2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序依次计算即可
(3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后再进行运算
'''
>>> (3>4 and 4>3) or (1==3 and 'x' == 'x') or 3 >3
False
3、短路运算:逻辑运算的结果一旦可以确定,那么就以当前处计算到的值作为最终结果返回
>>> 10 and 0 or '' and 0 or 'abc' or 'egon' == 'dsb' and 333 or 10 > 4
我们用括号来明确一下优先级
>>> (10 and 0) or ('' and 0) or 'abc' or ('egon' == 'dsb' and 333) or 10 > 4
短路: 0 '' 'abc'
假 假 真
返回: 'abc'
4、短路运算面试题:
>>> 1 or 3
1
>>> 1 and 3
3
>>> 0 and 2 and 1
0
>>> 0 and 2 or 1
1
>>> 0 and 2 or 1 or 4
1
>>> 0 or False and 1
False
5、身份运算
is比较的是id
而==比较的是值
6、优先级
高到低:算数运算符,比较运算符,快捷运算符,身份运算符,逻辑运算符