编译器与解释器
将其他语言翻译为机器语言的工具被称为编译器
编译器翻译的方式有两种,一个是编译、另一个是解释。两中方式的区别在于翻译时间的不同,当编译器以解释方式运行的时候,也称之为解释器
编译型与解释型速度
跨平台:每个操作系统都有对应的解释器,解释型跨平台性很好
速度:解释型速度相对来说较慢
python的设计哲学:最好只有一个方法来做一件事请,越简单越明确越好
Python的特点
- Python是完全面对对象的语言
函数、模块、数字、字符串都是对象,在Python中一切都是对象、完全支持继承、重载、多重继承、支持重载运算符,也支持泛型设计 - Python拥有强大的标准库
Python语言的核心只包括数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能 - Python社区提供了大量的第三方模块,使用方法与标准库类似。它们的功能覆盖科学计算、人工智能、机器学习、Web开发、数据库接口、图形系统多个领域
- Python是个格式非常严格的语言,每行代码完成一个动作、注意缩进错误、
Python解析器对应名称
Python2.X默认不支持中文,主要原因是编码不支持
Python2.X的解释器名称是Python
Python3.X的解释器名称是Python3
Python3是主流版本,Python3.0并没有向下兼容,但是语法层面相差并不是很大
执行Python程序的三种方法
- 解释器:python + 文件名
- 交互式:python的shell,exit()函数用来退出shell,Ctrl+d也可以退出(Windows下为Ctrl+Z)
- IPython:是python的一个交互式shell
Python的注释
# 单行注释
"""
这个是多行注释、也叫做块注释
"""
Python的运算符
运算符 | 作用 |
---|---|
/ | 获得高精度结果 |
// | 或者整数除数 |
% | 获取余数 |
** | 幂,二次方 |
* | 此运算符还可以得到指定个数的字符串 |
Python程序的执行原理
(1)CPU会先把Python解释器程序复制到内存中
(2)Python解释器会根据语法规则,从上到下让CPU翻译Python代码
(3)负责执行翻译完成的代码
Python解释器到底有多大?
Linux的python2.7版本的解释器只有3.4M
注意:Python变量的定义不需要定义类型,解释器会自动推导数据类型
type函数:查看变量的数据类型
在Python2.x中:
type (2 ** 32) int类型
type ( 2 ** 64) long类型
在Python3.x中
type (2 ** 32) int类型
type ( 2 ** 64) int类型
Python3已经将原来的long也认为是int
Python非常适合做数学计算,并且自动处理大数字,例如计算2的10000次方都可以轻松计算出来!
不同变量之间的计算
(1)数字之间可以直接计算,包括double与int等不同类型的数据,只要是数字就可以运算
(2) 如果变量是bool类型,True对应的数字为1,False对应的数字为0
(3)+ 运算符可以拼接字符串
(4)字符串变量可以和数字用*连接
(5)数字型变量和字符型变量之间不能进行其他的计算
Python的输入函数
pwd = input(“请输入密码\n”)
注意:input函数只能得到字符串
类型转换函数
int(x):将x转化为整数
float(x):将x转化为浮点数
print()函数的格式化输出
%s
字符串
%d
有符号十进制整数,%06d
表示输出的整数显示位数,不足的地方用0补全
%f
浮点数,%0.2f
表示小数点后只显示两位
%%
输出%
注意这与C的printf函数的符号使用区别,这个是直接使用
%
链接的
查看python的关键字
import keyword
print(keyword.kwlist)
[‘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’]
import 关键字:导入工具包
python中变量名是区分大小写的
关于4空格与tab键
在开发python程序的时候Tab键和4个空格键不要混用,最好是直接用4个空格
if语句与下方的缩进是一个完整的代码块!
注意输入的只能是字符串,需要类型转换
age = int(input("请输入年龄:"))
print("年龄:%d" % age)
python中的逻辑运算符 and、or、not
pycharm使用技巧
Tab键可以统一向右缩进
Shift+Tab可以统一向左缩进
注意:if判断代码过长,可以加小括号换行,换行之后的条件必须加8个空格
如何产生1-100的随机数?
(第一个参数必须小于第二个参数)
import random
print(random.randint(0, 100))
python中的+=
、-=
、/=
、*=
、%=
与C一样,//=
是取整除、**=
是幂赋值运算符
python需要注意的地方
- 在循环中如果使用continue这个关键字,需要确认循环的计数是否修改,否则可能导致死循环
- print()函数输出内容之后,会自动增加换行,print(“*“, end=”“)
- python的九九乘法表
i = 1
while i <= 9:
j = 1
while j <= i:
print("%d*%d=%d\t"% (i, j, i*j), end = "")
j += 1
i += 1
print()
常见转义字符:
符号 | 原意 |
---|---|
\ | 反斜杠符号 |
\’ | 单引号 |
\” | 双引号 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
函数封装
封装函数的格式:注意函数命名应该符合命名规则
def 函数名():
封装的代码
注意:不能在定义函数之前就使用函数,和C语言一致,或者先声明函数
pycharm调试工具
F8 Step Over 可以单步执行代码,会把函数调用看作是一行代码直接执行
F7 Step Into 可以单步执行代码,如果是函数,会进入函数内部
函数的注释方式:
def my_fun():
"""
打印乘法表
:return:无返回值
"""
i = 1
while i <= 9:
j = 1
while j <= i:
print("%d*%d=%d\t"% (i, j, i*j), end = "")
j += 1
print()
i += 1
my_fun()
def 函数名(参数1,参数2,参数3,...):
函数体
模块的概念
模块:以.py结尾的文件就是一个模块,本质就是工具包,里面有工具函数,要使用的时候用import导入即可
模块名也是标识符,必须符合命名规则,比如以数字开头的文件是无法导入的
Pyc文件,c是compiled,即是编译过的意思
python中的数据类型
- 数字型:整型、浮点型、布尔型、复数型(用于科学计算:比如平面场、波形问题)
- 非数字型:字符串、列表、元组、字典、
非数字型都有的特点:
1、都是一个序列(sequence),也可以理解为容器
2、取值[]
3、遍历for in
4、计算长度、最大值、最小值、比较、删除
5、连接 + 和重复 *
6、支持切片
列表:list
在其他的编程语言叫做数组
列表的方法
序号 | 分类 | 关键字/函数/方法 | 说明 |
---|---|---|---|
1 | 增添 | 列表.insert(索引,数据) | 在指定位置插入数据 |
列表.append(数据) | 在末尾追加数据 | ||
列表.extend(列表2) | 将列表2的数据追加到列表 | ||
2 | 修改 | 列表[索引] = 数据 | 修改指定索引的数据 |
3 | del列表[索引] | 删除指定索引的数据 | |
列表.remove[数据] | 删除第一个出现的指定数据 | ||
列表.pop | 删除末尾数据 | ||
列表.pop(索引) | 删除指定索引的数据 | ||
列表.clear | 清空列表 | ||
4 | 统计 | len(列表) | 列表长度 |
列表.count(数据) | 数据在列表中出现的次数 | ||
5 | 排序 | 列表.sort() | 升序排序 |
列表.sort(reverse=True) | 降序排序 | ||
列表.reverse() | 逆序、反转 |
- 列表指定索引值越界,数组越界异常
- extend方法把arr2(其他列表)中的内容追加到arr1里面 arr.extend(arr2)
- 默认删除(弹出)最后一个元素 arr.pop(),pop方法返回被移除的元素
- remove方法可以删除指定内容的元素,但是只能删除第一个符合条件的数据,如果数据不存在就会报错
del关键字:使用delete关键字,简写为del
del关键字本质上是用来将一个变量从内存中删除的
注意:如果使用del关键字讲一个变量从内存中删除,后续的代码就不能使用该变量了,在开发中最常用的是使用列表提供的方法去删除元素
元组 :tuple
元组与列表类似,不同之处在于元组的元素不能修改,列表使用 [ ] 定义,二元组使用 ( ) 定义
如果只想定义只有一个元素的元组:
single_tuple = (4) # 这种做法是错误的,解释器会误以为是加了括号的int类型
single_tuple = (4,) # 这才是正确的另一方式,需要在后面加逗号
元组只有两个方法:
方法 | 作用 |
---|---|
元组.count(数据) | 求该数据在元组中的个数 |
元组.index(索引) | 取出元组中的数据 |
元组中通常保存的数据是不同的,实际开发中,除非能确认元组中的数据类型,否则针对元组的循环遍历需求并不是很多,元组的应用场景:
- 函数的参数和返回值,一个函数可以接受任意多个参数,或者一次返回多个数据
- 格式字符串,格式化字符串后面的()本质上就是一个元组
- 让列表不可以被修改,可以转换为元组
列表和元组之间的转换函数
list(元组)、tuple(列表)
字典 dictionary
- 字典是除了列表以外的最灵活的数据类型,字典同样可以用来存储多个数据,通常字典用于存储一个物体的相关信息
- 字典和列表的区别
列表是有序的对象集合、字典是无序的对象集合 - 字典用 { } 定义
- 字典使用键值对存储数据、键值对之间使用 “,”分割
key是索引、value是数据
键和值之间使用“:”分割
键必须是唯一的,值可以取任意数据类型,键只能用字符串、数字或者元组
字典的循环遍历:
student = {"name": "Tim",
"age": 20,
"scort": 66.6}
for k in student:
print("%s:%s"% (k, student[k]))
字典和列表的混合使用
students = [{"name": "Tim","age": 40,"scort": 66.6},
{"name": "LiLiLaLaLa","age": 30,"scort": 66},
{"name": "Android","age": 20,"scort": 59.9},
]
for student in students:
for k in student:
print("%s:%s"% (k, student[k]))
print()
字符串
定义字符串使用" "
和''
都是可以的,一般使用" "
定义,和其他编程语言一致
注意:
1、虽然可以使用 \”
或者 \'
做字符串的转移,但是在实际开发中:
- 如果字符串内部需要使用
"
,可以使用'
定义字符串 - 如果字符串内部需要使用
'
,可以使用"
定义字符串
2、可以使用索引获取一个字符串中指定位置字符,索引计数从0开始
3、也可以使用for循环遍历字符
方法 | 功能 |
---|---|
len(字符串) | 获取字符串的长度 |
字符串.count(字符串) | 小字符串在大字符串中出现的次数 |
字符串.index(字符串) | 获得小字符串第一次出现的索引 |
str3 = "hello hello"
print(len(str3)) # 10
print(str3.count("hello")) # 2
print(str3.count("abc")) # 0 查找子串出现次数,传入不存在的子串得到结果为0
print(str3.index("lo")) # 3
print(str3.index("abc")) # 出错,查找子串位置是若传入不存在的子串就会出错
字符串的常见操作
判断类型
方法 | 功能 |
---|---|
string.isspace() | 如果string中只包含空格则返回True |
string.isalnum() | 如果string中至少有一个字符并且所有字符都是字母或数字则返回true |
string.isalpha() | 如果string中至少有一个字符并且所有字符都是字母则返回true |
string.isdecimal() | 如果string中只包含数字,则返回True,全角数字 |
string.isdigit() | 如果string中只包含数字,则返回True,全角数字、(1)、\uoob2 |
string.isnumeric() | 如果string中只包含数字,则返回True,全角数字、汉字数字 |
string.istitle() | 如果string是标题化的(每个单词首字母大写)则返回True |
string.islower() | 如果string包含一个区分大小写的字符,并且这些(区分大小写的)字符都是小写,则返回True |
string.isupper() | 如果string包含一个区分大小写的字符,并且这些(区分大小写的)字符都是大写,则返回True |
查找和替换
方法 | 功能 |
---|---|
string.startwith(str) | 如果string以str开头则返回True |
string.endwith() | 如果string以str结尾则返回true |
string.find(str,start = 0,end = len(string)) | 检测str是否包含在string中,如果start和end指定范围,则只是检查是否在范围内部,若是则返回索引值,不是返回-1 |
string.rfind(str,start = 0,end = len(string)) | 与find函数类似,只不过是从右边开始查找 |
string.index(str,start = 0,end = len(string)) | 与find函数类似,只不过str不在string中会报错 |
string.rindex(str,start = 0,end = len(string)) | 与find函数类似,只不过是从右边开始 |
string.replace(old_str,new_str,num = string.count(old_str)) | 将string中的old_str替换成new_str,如果num指定,则替换不能超过num次 |
大小写转换
方法 | 功能 |
---|---|
string.capitalize(str) | 把字符串的第一个字母大写 |
string.title() | 把字符串的每个单词首字母大写 |
string.lower() | 转换string中的所有大写字母为小写 |
string.upper() | 转换string中的所有小写字母为大写 |
string.swapcase() | 反转string中的大小写 |
文本对齐
方法 | 功能 |
---|---|
string.ljust(width) | 返回原字符串右对齐,并使用空格填充至长度width的新字符串 |
string.ritle() | 返回原字符串左对齐,并使用空格填充至长度width的新字符串 |
string.center() | 返回原字符串居中对齐,并使用空格填充至长度width的新字符串 |
去除空白字符
方法 | 功能 |
---|---|
string.lstrip() | 截掉string左边的空白字符 |
string.rstrip() | 截掉string右边的空白字符 |
string.center() | 截掉string左右两边的空白字符 |
拆分和链接
方法 | 功能 |
---|---|
string.partition(str) | 把string分成一个3元素的元组(str前面,str, str后面) |
string.rpartition(str) | 类似于partition函数,只不过是从右边查找 |
string.split(str=”“,num) | 以str为分隔符切片string,如果num有指定值,则仅分割num+1个字符串,str默认包含’\r’,’\t’,’\n’和空格 |
string.splitlines() | 按照行(‘\r’,’\n’,’\r\n’)分隔,返回一个包含各行作为元素的列表 |
string.join(seq) | 以string作为分隔符,将seq中所有的元素(的字符串表示)合并为一个新的字符串 |
字符串中的转义字符
'\t'
在控制台中输出一个制表符,协助在输出文本时垂直方向
保持对其
'\n'
在控制台输出一个换行符
**制表符的功能是在不使用表格的情况下在垂直方向按列对齐文本
转义字符 | 描述 |
---|---|
\ | 反斜杠符号 |
\’ | 单引号 |
\” | 双引号 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
判断是否是数字的三种方法:(开发中常用的还是isdecimal方法)
# 都不能判断小数
num_str = "123"
print(num_str.isdecimal())
print(num_str.isdigit())
print(num_str.isnumeric())
# isdigit与isnumeric的强大之处
num_str2 = "⑴"
print(num_str2.isdecimal())
print(num_str2.isdigit())
print(num_str2.isnumeric())
# isnumeric的强大之处
num_str3 = "一千零一"
print(num_str3.isdecimal())
print(num_str3.isdigit())
print(num_str3.isnumeric())
print(str.find("abc")) # 查找不存在的字符串返回-1,index方法则会报错
print(str.replace("world", "python")) # replace方法执行完毕会返回一个字符串,而不会改变源字符串
字符串去除空格、切割字符串、拼接字符串
print(str.strip()) # 去除所有的空格
print(str.lstrip()) # 去除左边的空格
print(str.rstrip()) # 去除右边的空格
str = "hello#world#java#python"
split = str.split("#") # 按照#切割字符串,默认按照不可见字符进行切割
print(split)
join = "#".join(split) # 按照#合并字符串
print(join)
下标和切片
注意可以使用倒序的方式来使用下标
# 将字符串转为列表,再得到逆序的字符串
str = "abcdefg"
str_list = list(str)
str_list.reverse()
print(''.join(str_list))
# 直接使用字符串切片功能逆转字符串
str = "abcdefgh"
print(str[::-1])
print(str[-1::-1])
Python的内置函数
函数 | 描述 | 备注 |
---|---|---|
len(item) | 计算容器中元素个数 | |
del(item) | 删除变量 | del有两种方式 |
max(item) | 返回容器中元素最大值 | 如果是字典、只是针对key比较 |
min(item) | 返回容器中元素最小值 | 如果是字典、只是针对key比较 |
cmp(item1,item2) | 比较两个值,-1 小于/ 0相等/ 1大于 | Python3.x取消了cmp函数 |
注意:字符串比较符合以下规则:”0”<”A”<”a”
# 针对列表和元组进行切片
print([1, 2, 3, 4, 5][1:3])
print((1, 2, 3, 4, 5)[1:3])
# 由于字典是一个无序集合,使用键值对的方式保存数据,所以字典是无法切片的
# 列表和元组乘法运算
print([1, 2]*5)
print((1, 2)*5)
# print({"a": "z"}) error,因为key是唯一的
# 列表
l_list = [1, 2]
l_list2 = [3, 4]
print(l_list+l_list2) # 使用加号不会改变原有的列表,而是产生新的列表
l_list.extend(l_list2) # 此方法无返回值,直接改变l_list
l_list.append(5)
l_list.append([6, 7, 8]) # append方法会把列表当成一个元素插入到列表中
print(l_list)
l_list3 = (1, 2)
l_list4 = (3, 4)
print(l_list3+l_list4)
int 与 not in运算符
print("a" in "abcde")
print("a" not in "abcde")
完整的for循环
for 变量 in 集合:
循环体代码
else:
没有通过break退出循环,只有当循环结束后才会执行的代码
num = [1, 2, 3, 4, 5]
for n in num:
if n == 3:
break
print(n)
else:
print("完毕")
num = [1, 2, 3, 4, 5]
for n in num:
print(n)
else:
print("完毕")
其他
pass 关键字:pass代表空语句,就和java中的;是一样的
TODO(开发者姓名/开发者邮件) 功能描述
Linux上的Shebang符号(#!)
在要运行的python主文件在第一行加入 #! /usr/bin/python3即可,然后修改python文件权限为可执行!