Python学习笔记综合

一、安装和学习建议
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.选中文本(可视模式)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值