一、安装和学习建议
1、使用的2.7
2、环境变量+python的根目录
3、cmd就可以运行,执行使用 python xxx.py
4、编写代码可以直接python进入代码编辑
5、exit()退出编辑环境
安装与学习建议:pycharm专业版+anaconda,最好一步到位在Ubuntu系统上直接,方便后续开发和学习
Ubuntu 20.04安装 Anaconda和Pycharm
Anaconda之conda常用命令介绍(安装、更新、删除)
Pycharm中的Python Console与Terminal
其中,Python Console叫做Python控制台,即Python交互模式;Terminal叫做终端,即命令行模式。
Python交互模式主要有两种:CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
Python交互式模式可以直接输入代码,然后执行,并立刻得到结果,因此Python交互模式主要是为了调试Python代码用的。
命令行模式与系统的CMD(命令提示符)一样,可以运行各种系统命令。
二、代码
1、#注释
2、print
a = ‘xxx’ print a
print r’xxx/nxxx’ 不会转义
print ”’xxxxxxxx”’ 多行,不加r会转义
print u’中文’ 但是本地似乎没有这个问题
浮点 print 10/4 打印为2; 10%3 打印为1; 10.0/4 打印为2.5
3、运算符 True or False True and False 是短路的
4、list集合a = [‘yes’, True, 100] 集合使用中括号,元素越多速度越慢
a.append() #加末尾
a.insert(0, 'no') #加指定位置
print a[0] #访问第一个
print a[-2] #访问倒数第二个
a.pop() #删除最后一个,并且返回这个元素
a.pop(1) #删除索引为1的元素
a[1] = 'new' #赋值
5、元组 tuple 不可变list,使用小括号,注意单参数需要加一个逗号
t = (1,2,3) #不可变,没有append、insert、pop方法,也不能赋值
t = (1,) #单个参数需要加一个逗号
6、
if
age = 20
if age > 18:
print 'xxxx'
print age
else:
print 'xxxx'
#非
if not age > 18:
#嵌套
if xxx:
123
elif xxx:
123
elif xxx:
123
123
else:
123
7、for/while循环
for
a = [1,2,3]
for name in a:
print name
while
N = 10
x = 0
while x < N:
print x
x = x + 1
退出循环(继续循环continue也一样)
N = 100
x = 0
sum = 0
while x < N :
print x
x = x + 1
sum = sum + x
if x == 50 :
break
print sum
print x
双重循环
for x in ['a', 'b', 'c']:
for y in ['1', '2', '3']:
print x + y
8、dict 相当于java的map,定义是用大括号
优势:速度很快,多少个元素都一样的速度
过没有顺序,存进去的顺序和打印的顺序不一定一样
key不可变,并且存入的key是不可变的,所以list不能做key
d = {"one" : 1, "two" : 2}
print len(d)
访问使用 d[key] 或者 d.get(key)
#1、不存在会报错
d = {"one" : 1, "two" : 2}
if 'one' in d :
print d['one']
else :
print 'defalut'
#2、
print d.get('three') #展示none
print d.get('one') #正常展示
更新dict
d["one"] = 4
遍历dict
for name in d:
print name
9、set
和java的set一样,同list不重复,只能存入不可变的对象,所以不能存list
l = [1,2,3,3,3,3]
print l
s = set(l)
print s
s1 = set([1,2,3,4,5,6,6])
print s1
访问set,其实就是判断它是否在set里,因为没有顺序并且不重复
print 1 in s #打印True 大小写区分
set遍历
s = set([1,2,3,4,5])
for name in s:
print name
添加元素使用add,删除使用remove。 add重复不报错,remove会报错,需要先判断
s = set([1,2,3])
s.add(7)
for name in s:
print name
三、函数
使用help(函数)来查看详情
1、绝对值: abs(number)
2、比较:cmp(x, y) x
3、转整数:int(xxx)
4、转字符串:str(xxx)
5、总和:sum(list) list必须都是数值
l = [1,2,3,4,5]
print sum(l)
6、编写函数
def myMethod(x):
if x > 0:
return x
else:
return;
print myMethod(1)
print myMethod(-2)
7、返回多值,其实是返回一个tuple
def myMethod(x,y):
return x + y, x - y
x, y = myMethod(1, 2)
print x
print y
print myMethod(1, 2)
t = myMethod(1, 2)
print t[0]
8、递归,知道但是什么时候用把握不好
def fact(n):
if n == 1:
return 1;
else :
return n * fact(n-1)
print fact(1)
print fact(10)
9、定义默认参数
def fn(i, n = 2):
… # n如果不传则默认是2,顺序必须是先必须参数再默认参数
10、定义可变参数
def fn(*suibian):
…
11、平均数函数例子
def average(*i):
x = 0
for num in i:
x = x + num
print x / len(i)
average(1,2,3)
12、对list进行切片,取前三个参数。0~3不包括3,0可以省略。也一样可以使用倒数
l = [1,2,3,4,5,6]
print l[0:3]
print l[:3]
print l[:] #从头到尾复制一个新的list
print l[::2] #每隔2个取一个值
print l[-3:] #从倒数第三个开始取
13、字符串切片,同上
14、’abc’.upper() 变大写
首字母大写案例:
def up(s):
print s[0:1].upper() + s[1:]
up('abckdf')
15、迭代 就是for循环,python可以迭代一切可以迭代的东西
数7的案例:
def seven(num):
s = 0
while s < num :
if s % 7 == 0 :
print s
s = s + 1
def shou(str):
for letter in str:
print letter
seven(100)
shou('asdgdfgdfg')
16、拿到元素索引 enumerate()
for index, name in enumerate(["one", "two"]):
print str(index) + name
17、迭代dict的value
d = {"one" : 1, "two" : 2}
print d.values()
for v in d.values(): #还要生成一个list,不过好记忆
print v
for v in d.itervalues(): #省下生成list的过程,速度快
print v
key和value都迭代遍历
d = {"one" : 1, "two" : 2}
for k, v in d.items():
print k,' : ',v
18、生成列表,python主要处理数据,所以列表会经常生成
乘法口诀表案例:
L = []
for x in range(1, 11):
L.append(x * x)
print L
print [x * x for x in range(1,11)]
#输出:[1,4,9,16,25,36,49,64,81,100]
print [x * x for x in range(1,11) if x % 2 == 0] #只想要偶数的平方
range(1, 10, 2) 输出 [1,3,5,7,9]
19、生成一个table的html
d = {"Adam": 95, 'Lisa' : 85, 'Bart' : 59}
tds = ['<tr><td>%s</td><td>%s</td></tr>'%(name, score)
for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th></tr>'
print '\n'.join(tds)
print '</table>'
join 把一个list拼接成一个字符串。eg:
l = ['1','2','3']
s = 't'
print s.join(l)
#打印: 1t2t3t
20、多层表达式
print [m + n for m in 'ABC' for n in '123']
#打印:['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
21、身份运算符is和==区别
is比较身份,==赋值
22、私有属性和方法
——变量,在对象的方法内部,是可以访问对象的私有属性,而在外界不能够被直接访问
私有方法也不能被外界直接访问
伪私有,在Python中只是在名称前加—,不过我们一般不会轻易窥探别人的隐私
23、继承
子类拥有父类的所有的属性和方法 class Dog(Animal) 派生,基类
继承具有传递性
面向对象三大特性:封装、继承、多态
覆盖父类的方法 子类重新定义
对父类的方法扩展 super
如果不小心调用子类时,会出现递归现象,死循环
子类不能在自己的方法内部,直接访问父类的私有属性和方法
子类可以通过父类的公有方法间接访问到私有属性和私有方法
尽量避免多继承
MRO 方法搜索顺序
object是Python为所有对象提供的基类,提供有一些内置的属性和方法,可以使用dir函数查看
建议定义类时,如果没有父类,建议统一继承自object
24、多态
不同的子类对象调用相同的父类方法,产生不同的执行结果
多态可以增加代码的,灵活度
25、类的结构
实例
1.使用面向对象开发,第一步是设计类
2.使用类名创建对象,创建对象的动作有两步:
1)在内存中为对象分配空间
2)调用初始化方法——init__为对象初始化
3.对象创建后,内存中就有了一个对象的实实在在的存在的--实例
26、类是一个特殊的对象
1.类属性
2.类方法
通过类名的方式可以访问类的属性和调用类的方法
类下方使用赋值语句 类属性获取:类名.类属性
27、类方法
@classmethod
def 类方法名(cls):
pass
静态方法
@staticmethod
def 静态方法名():
pass
28、单例设计模式
返回唯一内存地址
__new__方法 创建对象时,new方法会被自动调用,为对象分配空间,返回对象的引用
语法错误 syntax error
无效 invalid
indent 缩进
python2.x不支持中文 3.x支持
使用python3.x解释器 $ python3 xxx.py
直接交互shell 好用的 ipython /3 退出exit() Ctrl+D
控制台字体 console font
注释 单行 # 多行“"”
取整除 //
幂 **
python拼接字符串 “—”*100
在python中定义变量时是不需要指定变量的类型的,python在运行时自动识别类型
在ipython中查看变量类型用 type(name)
在python中数字型变量之间可以直接计算,其中真为1,假为0
输入并赋值给变量 password = input(“请输入”)
类型转换函数 int(x) float(x)
变量格式化输出 print(“我的学号是 %06d”% no) %被称为格式化操作符 %s 字符串 %d 有符号十进制数,其中%06d表示共6位前面补0 %f 浮点数,其中%.2f表示控制小数位数 %% 输出%
变量的命名 标识符 关键字 keyword
在python开发中,不要tab和空格混用
一行程序太长 可以用()来换行 if(()or())
导入工具包 import random(随机数)
循环 row(行) col(列)
print函数 自动换行 增加 end="" 不会换行 保证每一步程序正确,再进行下一步
转义字符 \t 制表符 \n 换行符 " \r 回车
pycharm的调试工具 F8 Stop over 把函数看做一行代码 F7 stop into 会进入函数内部
函数 封装代码 引用函数名 函数注释 函数下方 三对引号
函数里面传递参数的使用 num(num1,num2)
形参和实参
代码结构示意图 sheban import模块 全局变量 函数定义 执行代码
变量下方有虚线 表明局部变量和全局变量重名了 全局变量gl_ or g_
赋值 a,b=b,a
赋值,使用 +=,变量和列表,在函数不一样,变量是对值进行赋值,而列表是追加列表
.sort()升序排序
函数缺省参数定义 print_info(name,gender=Ture):
多值参数 *nums指存放元组,**nums指存放字典
元组和字典的拆包
函数的递归,自己调用自己
面向对象 需求分析
类名,大驼峰命名法 属性,方法
dir内置函数
对初始化方法改造 init 在方法内部使用 self.属性 = 形参 接收外部传递的参数 在创建对象时,使用 类名(属性1,属性2…)调用
del 如果希望在对象被销毁前,再做一些事情,可以考虑一下__del__方法
生命周期 使用__del__后 内部属性结束
str 方法定制变量输出信息 必须返回字符串
封装特性和需求分析 面向对象编程的 第一步 将属性和方法封装到一个抽象的类中
需求 提出需求名词 动词
被使用的类先开发
python 能够自动的将一对小括号内部的代码连接在一起
调用父类 super().XXX
捕获异常 try: except: 错误类型 未知错误 exception as result
异常传递 一层层传递异常 可以利用异常捕获
主动抛出异常 raise 创建一个exception对象,主动raise异常
模块 模块别名 as
from 模块名 import 工具名 from XXX import * (导入所有)不推荐 出现错误不好排查
内置属性 ——file——可以查看当前模块的完整路径
在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍!
——name—— 是Python的一个内置属性,记录着一个字符串
包pkg 包含多个模块的特殊目录,有个特殊文件——init——.py,命名规则和变量一致
要在外界使用包中的模块,需要在__init__.py中指定对外界提供的模块列表,from . import XXX
制作发布压缩包步骤
1.创建setup.py
2.构建模块 Python3 setup.py build
3.生成发布压缩包 Python3 setup.py sdist
安装和卸载(删除)
pip安装第三方模块 sudo pip/pip3 install XXX
对文件操作r,w,a 只读、写、追加;r+ 打开文件file=open(‘‘xxx’’,“w”) 写入文件 fil.write("")
复制大文件 一行行读、写
在Python中,对文件和目录常见操作,import os os.listdir os.mkdir os.rmdir os.getcwd获取当前路径 os.chdir修改工作目录 os.path.isdir判断是否是文件
Python2中使用中文 添加 #- coding:utf8 - 带中文的字符串,引号前面的u告诉解释器这是一个utf8编码格式的字符串 eg: txt=u"hello 世界"
eval函数 可以将字符串当成有效的表达式来求值,并返回计算结果 不要滥用eval函数 直接转换用户input字符串
pygame游戏开发——飞机大战
在调用父类的子类时,不是object,需要初始化父类方法
使用常量代替固定数值,常量所有的字母都大写
vi编辑器
打开文件 vi 文件名 + 行数
进入命令模式,切换到编辑模式(i),切换到末行模式(:)
末行模式/编辑模式,切换到命令模式(esc)
末行模式输入wq/x,保存文件并退出,w,q,q!
w:向后移动一个单词,b:向前移动一个单词
0:行首,^:行首,第一个不是空白字符的位置
$:行位
1.行数移动:gg文件顶部,G文件末尾,数字gg/G,:数字
2.屏幕移动:Crtl+b向上翻页,Ctrl+f向下翻页,H屏幕顶部,M,L
3.移动(程序)
1)段落移动 {上一段,}下一段
2)括号切换%,在程序中括号是成对出现的,(),{},【】
3)标记m+字母,返回’+字母
4.选中文本(可视模式)