前言
参考资料
Python3教程
我服了,学了6个多小时,才发现这教程好垃圾,还是去看廖老师的。
版本
python版本:Python 3.7
平台:Windows 10
python特点
- 解释性:不编译
- 交互性:可以在提示符中输入
- 面向对象
- 可扩展:关键部分可以使用C++写
官方支持
下载:python下载
文档:Python documentation
环境搭建
- 下载安装python
- 环境变量配置,直到cmd内输入python可以打开交互式解释器
- sublime安装插件SublimeREPL
- 打开sublime->preferences->Key bindings,输入
[
{
"keys": ["f5"],
"caption": "SublimeREPL: Python - RUN current file",
"command": "run_existing_window_command",
"args": {
"id": "repl_python_run",
"file": "config/Python/Main.sublime-menu"}
},
{
"keys": ["alt+f5"],
"caption": "SublimeREPL: Python - PDB current file",
"command": "run_existing_window_command",
"args": {
"id": "repl_python_pdb",
"file": "config/Python/Main.sublime-menu"}
},
{
"keys": ["f8"],
"caption": "SublimeREPL: Python",
"command": "run_existing_window_command",
"args": {
"id": "repl_python",
"file": "config/Python/Main.sublime-menu"}
},
]
现在,如果当前是一个py文件,ctrl+B是运行,F5是运行(可输入),alt+F5是调试,f8是打开交互式解释器。
基础语法
-
hello,world
print("Hello, World!)
-
标识符:开头是字母或下划线,由字母数字下划线组成,大小写敏感
-
保留字:
['False', 'None', 'True', 'and', 'as', 'assert', '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']
-
注释:单行注释#开头,多行注释’’‘三个引号围起来’’’,""“单双都行”""
-
缩进:py使用 缩进 来表示代码块,而不是大括号,同一个程序的缩进字符数应当相同
-
多行语句:反斜杠\ 加换行
-
数字类型(Number):int,bool,float,complex(单位复数是j)
-
等待输入:input(""),括号里面里面的信息会被输出
-
一行多语句:使用分号分隔
-
代码组,相同缩进的一组语句。一个缩进更少的首句加上一个代码组称为一个子句 clause
-
print默认换行,可以修改print(“statement”,end=""),这样就不会换行。
-
导入:import 模块;静态导入:from 模块 import 成员(*)
-
help(print),可以打印帮助信息,非常好用
-
range([start,]stop[,step])是一种对象,里面是从start到stop,步长为step的数
-
条件语句if-elif-else,判断条件为序列时,非空为真,没有switch-case
if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3
-
while循环
while condition: statement_block
while-else,条件不满足时执行一次else中的语句,break不会执行
while condition: statement_block else: do_another_things
-
for循环,可以遍历任何序列中的项目,带索引遍历:
languages = ["C","C++","JAVA","PYTHON"] for i in range(len(languages)): print(i,languages[i])
-
pass,占位语句
变量
- 在py中,一切变量都是引用,所以变量没有类型,变量指向的值才有类型。
- 使用=给变量赋值,可以同时赋多个值
var1,var2 = val1,val2
- 使用id(x)可以获得变量的地址
- 使用type(x)可以获得变量指向值的类型
a,b,c,d = 5,4.4,True,4+3j print(type(a),type(b),type(c),type(d))
- isinstance(var,type)会返回var是否是type类型或type的子类类型
- del 删除变量
- 交互模式中,_ 存储最后输出的表达式值,如果用户手动给这个变量赋值,就失去了这个效果。
基本数据类型
- 标准数据类型有 Number数字,String字符串,List列表,Tuple元组,Set集合,Dictionary字典
- 前三种不可变,后三种可变。不可变是指在变化变量的值时,在新的地址创建了新的值。
- 使用type()查看变量指向的值的类型。
Number
- 数值运算+,-,*,/,%,除取整//,乘方**
- 布尔值是True,False,首字母大写,参与运算时视为1和0
String
- 单双引号全部相同
- 三个引号指定多行字符串’’'或""",注意放在行首会被当成注释
- \n换行,字符串前加r让转义失效,r表示原始字符串
r"p\np"
- 字符串按字面值级联,“a”"b"与"ab"完全等价
- 用+连接字符串,用*使字符串重复,“a”*2=“aa”
- 索引方式:左往右下标从0开始,右往左下标从-1开始
- 没有字符类型
- 字符串截取
str[头下标:尾下标:步长]
,左闭右开 - 字符串不能改变
- 格式化字符串
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
- 格式化符号:%c,s,d,u,o,x,X,f,e,E,g,p,e表示科学记数法法,g表示f或e,p表示地址。
- 辅助指令:数字表宽度,-左对齐,+正数前写加号,空格正数前写空格,#写出8进制或16进制的表示(0o,0x),0填0,%%输出%,.数字:小数位数
str='Runoob'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始的后的所有字符
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print('------------------------------')
print('hello\nrunoob') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
字符串成员函数
- 大小写变换
capitalize() 第一个字符大写
lower() 全部小写
upper() 全部大写
title() 所有单词以大写开始
swapcase() 大小写互换 - 填充与清除函数
center(width, fillchar)在宽度width中居中,填充fillchar
ljust左对齐填充
rjust右对齐填充
rstrip,删除右端空格
lstrip,删除左端空格 - 查找函数:
count(str,beg=0,end=len(string)),统计str的出现次数;
endswith(str,),检查是否以str结尾
startswith(str,)
find(str,),查找返回开始的索引值或-1
rfind()
replace(old,new,[,max])替换最多max次 - 信息函数:
len(),长度
min(),最小的字母
max(),最大的字母 - 分析函数:isalnum(),isalpha(),isdigit(),islower(),isupper(),isspace(), istitle()
- 分割函数
split(str=" ", num=string.count(str)),如果num有指定值,仅截取num+1个子字符串
splitlines(bool),按换行截取并决定是否保留换行符
partition(sep),分割为【头,分割符,尾】三元组 - join(seq),以本字符串为分隔符把seq中的字符串合并
列表List
- 列表以[]定义
- 列表中的元素可以不相同,可以嵌套列表
- 列表可以被截取,可以用+连接,可以用*重复
- 列表元素可以改变
- 删除列表元素 del lst[2]
相关函数
- len(list)
- max(list),min(list)
- list(seq)
成员函数(方法)
- 查找函数count,index,
- 单点修改函数append,extend(seq),insert(index,obj),pop有返回值,remove
- 多点修改sort(cmp=None,key=None,reverse=False),reverse,clear
- copy复制(不要使用等于号复制)
例子
list = ['abcd',786,2.23,'fall',70.2]
tinylist = [123,'runoob']
print(list)
print(list[0])
print(list[1:3])
print(list[2:])
print(list*2)
print(list+tinylist)
# 创建二维列表
list_2d = [[0 for col in range(5)] for row in range(4)] # 0表示值
元组tuple
- 元组写在小括号里,不能被修改,但可以存放可修改的元素
- 空元组
tup0 = ()
,单元素元组tup1 = (1,)
,注意这个逗号 - 字符串类似于特殊的元组
- string,list,tuple都属于序列sequence
- 类似于C语言的指针数组
集合set
- 用大括号
{}
或者set()
创建集合,构成集合的元素称为成员。空集合不能用{}
创建,因为它用来创建字典 - 集合中重复的元素会被去掉
- value in set来测试元素是否在集合中
- 集合运算,-差集,&交集,|并集,^对称差
- 字符集合可以这样创建a = set(‘abracadabra’)
相关函数
- 添加 add(x)
添加序列中的元素update(x) - 移除 remove(x),不存在会报错
discard(x),不存在不报错 - pop(),随机删除一个元素,推测可能是哈希表的最后一项
- 清空clear
字典dictionary
- 字典相当于映射,字典中的元素通过键存取
- 键必须为不可变类型,同一个字典中的键唯一
- 使用成员函数keys()和values()可以获得所有值
- 创建空字典直接用大括号
- 字典可以用构造函数dict创建,
dic = dict(p=1,c=2,d=3)
- 下面这个例子中,使用dict作为标识符是非常不明智的行为,set同理。
dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2] = "2 - 菜鸟工具"
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
print (dict['one']) # 输出键为 'one' 的值
print (dict[2]) # 输出键为 2 的值
print (tinydict) # 输出完整的字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值
相关函数
str(dict) 输出这个字典
类型转换
- int(x),转换整数,可以添加第二个参数:进制
- complex(x),转换复数,可以参加第二个参数表示虚数部分
- float,str,tuple,list,set,dict同理,无第二参数
- eval(str) 计算字符串中的有效python表达式,返回一个对象,如
eval("prinrt(5)")
repr(x),将对象转换为表达式字符串,与eval互为反操作 - fronzenset(s),转换为不可变集合
- chr(x),将整数转换为ascii码对应的字符
ord(x),将字符转为整数值 - hex(x),将整数转为16进制字符串,oct(x)对应8进制,bin(x)对应2进制
运算
运算符
-
算术运算符:+,-,*,/,//,%,**
-
比较运算符:==,!=,>,<,>=,<=
-
赋值运算符:=,+=,-=,*=,/=,//=,**=,%=
-
位运算符:&,|,^,~,<<,>>
-
逻辑运算符:and,or,not
-
成员运算符:in,not in;返回True或False
-
身份运算符:is,not is;判断两个标识符是不是同一个地址,注意与==的区别。
-
没有++,–,原因可能是因为所有变量都是引用。
另外,python会有一个小整数池的概念,在某个范围的的整数的地址是确定的。>>> a = 3000 >>> b = 3000 >>> a is b False >>> a = 5 >>> b= 5 >>> a is b True
运算函数
- abs(x)
- max(a,b,c),min(a,b,c)
- round(a) 舍入函数,可以加第二个参数表示舍入到小数位数。注意摄入规则不是“四舍五入”,而是“4舍6入,5看整数,偶舍奇入”
进阶语法
迭代器
- 迭代是访问数据结构元素的一种方式,迭代器是一个可以记住遍历位置的对象。
- 两个基本方法:iter()创建,next()返回当前元素并递增
模块简记
模块math
- ceil,floor
- exp,pow,log,log10
- modf,返回整数和小数部分
- sqrt
- 变量pi,e
- 三角函数,默认全为弧度
- degrees(),将角度转为弧度;radians(),将弧度转为角度
模块random
- choice(seq),从序列中随机挑选一个元素,如chocie(range(10))
- randrange([start,]stop[,step]),从这个range中随机挑选一个数
- random(),随机生成一个实数
- seed(),随机数种子,可以接收参数
- shuffle(lst),将序列元素随机排序
- uniform(x,y),生成一个x到y的实数
函数
属性:函数内的块注释。
其它
python解释器
Python依赖解释器来执行语句和脚本,常见的解释器有:
CPython:C语言实现,官方版本,应用最广
IPython:CPython的增强版本,交互方面做的很好
JPython:专为Java平台设计的py解释器,把python代码编译成java字节码
PyPy:用Python重写的Python解释器,以块著称,速度可达CPython的20倍以上