python 基础
python 解释型语言。 常用的称为cpython Python目前有两个版本,Python2和Python3,最新版分别为2.7.13和3.6.2,现阶段大部分公司用的是Python2,Life is shot, you need Python. 人生苦短,我用Python。 4、Python优缺点 简单————Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。 易学————就如同你即将看到的一样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。 免费、开源————Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。 高层语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC、Symbian以及Google基于linux开发的Android平台! 解释性————这一点需要一些解释。一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。 面向对象————Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。 丰富的库————Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。 规范的代码————Python采用强制缩进的方式使得代码具有极佳的可读性。 5、Python应用场景 Web应用开发 Python经常被用于Web开发。比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的通信。一些Web框架,如Django,TurboGears,web2py,Zope等,可以让程序员轻松地开发和管理复杂的Web程序。 操作系统管理、服务器运维的自动化脚本 在很多操作系统里,Python是标准的系统组件。 大多数Linux发行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,可以在终端下直接运行Python。有一些Linux发行版的安装器使用Python语言编写,比如Ubuntu的Ubiquity安装器,Red Hat Linux和Fedora的Anaconda安装器。Gentoo Linux使用Python来编写它的Portage包管理系统。Python标准库包含了多个调用操作系统功能的库。通过pywin32这个第三方软件 包,Python能够访问Windows的COM服务及其它Windows API。使用IronPython,Python程序能够直接调用.Net Framework。一般说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。 科学计算机器学习 NumPy,SciPy,Matplotlib可以让Python程序员编写科学计算程序。 服务器软件(网络软件)——阿里云 Python对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络爬虫。第三方库Twisted支持异步网络编程和多数标准的网络协议(包含客户端和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件。 Linux下Python的安装 Python2.x 1、 下载Python2.x的包 2、 tar –zxvf python-2.7.15.tar 3、 yum install gcc 4、 ./configure 5、 Make && make install Python3.x 1、 依赖环境:yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 2、 下载Python3的包 3、 tar –zxvf python-3.6.1.tgz 4、 ./configure 5、 Make && make install 6、 添加环境变量 第二章 python安装下载及基础语法 1、Python的下载 1、python网址:https://www.python.org/ 2、anaconda网址:https://www.anaconda.com/ 注意:Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 2、Python的安装 1、Python安装比较简单,只需要双击安装即可,安装比较快(window) 2、anaconda同样是双击安装,但是安装过程的时间比较长,需要很多依赖项(window)
Anaconda 安装 包含许多依赖库。
pycharm 推荐开发工具。 python 安装 python-2.7.15.amd64.msi Anaconda3-5.2.0-Windows-x86_64.exe 自带python3 环境变量


HelloWorld3.py
print("hellow python 中文")
HelloWorld2.py
print("hellow python 中文")
D:\usr\pythondemo\demo00>python D:\usr\pythondemo\demo00\com\bjsxt\HelloWorld3.py
hellow python 中文
切换编译器为python2之后,需要加字符集注释
HelloWorld2.py
#coding=utf-8
# _*_ coding:utf-8 _*_
'''
我是注释
'''
print("hellow python 中文")
## cmd 下也可以。
D:\usr\pythondemo\demo00>python D:\usr\pythondemo\demo00\com\bjsxt\HelloWorld2.py
hellow python 中文
5、交互式窗口 1、python:在cmd中直接输入python(配置环境变量) 2、ipython:找到对应的ipython的执行文件,直接执行 Ipython:支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数 注意:Python中本身不带有这个ipython的交互,需要自行安装。首先查看计算机中是否包含pip,一般安装完之后有,执行python –m pip install --upgrade pip,先将pip进行更新,然后安装ipython:pip install ipython 6 Python的注释及乱码 1、单行注释:以#开头,#右边的所有东西当做说明,而不是真正要执行的程序,起辅助说明作用 2、多行注释:’’’多行注释’’’可以写多行的功能说明 3、Python乱码问题 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行: # -*- coding:utf-8 -*- # coding=utf-8
安装ipython 自动补全 C:\Users\Administrator>python -m pip install --upgrade pip C:\Users\Administrator>pip install ipython
C:\Users\Administrator>ipython
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit
In [1]: print("hello")
hello
In [2]: ls
2019/10/02 11:25 <DIR> ..
2019/04/01 14:32 <DIR> .android

7、变量及类型 1、变量的定义 在程序中,有时我们需要对2个数据进行求和,那么该怎样做呢? 大家类比一下现实生活中,比如去超市买东西,往往咱们需要一个菜篮子,用来进行存储物品,等到所有的物品都购买完成后,在收银台进行结账即可 如果在程序中,需要把2个数据,或者多个数据进行求和的话,那么就需要把这些数据先存储起来,然后把它们累加起来即可 在Python中,存储一个数据,需要一个叫做变量的东西: 例如: num1=100 Num2=87 Result=num1+num2 变量三要素:变量的名称,变量的类型,变量的值 2、变量的类型 为了更充分的利用内存空间以及更有效率的管理内存,变量是有不同的类型,如图所示

python 中没有null 用None
字符串是以单引号或双引号括起来的内容。
标识符与java类似。驼峰命名,也可以用下划线
ipython 查看## 保留的标识符
In [5]: import keyword
In [6]: keyword.kwlist
Out[6]:
['False',
希望输出的内容不换行
>>> a=10
>>> print(a)
10
>>> print(a,end="")
10>>>
输出1+2=3
num1 = 1
num2 = 2
print("%d+%d=%d"%(num1,num2,num1+num2))
输出hello,world
a = 'world'
print("hello,%s"%a)
print("hello,%s"%('world'))
print("hello,%s"%'world')
字符串拼接
print('The quick brown fox', 'jumps over', 'the lazy dog')
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
print(True,False)
'''
练习:编写程序
小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,
并用字符串格式化显示出'xx.x%',只保留小数点后1位:
'''
d = (85-72)/72 * 100
print(d)
print("%.1f%%"%d)
输入 python3
a=input("请输入数字:")
print(a)
python2
D:\Develop\Python\Python27>python
Python 2.7.16 (v2.7.16:413a49145e, Mar 4 2019, 01:37:19) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a=input("请输入:")
请输入:123
>>> a=input("请输入:")
请输入:abc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'abc' is not defined
>>> a=raw_input("请输入")
请输入abc
>>> print(a)
abc
>>> abc='abcdefg'
>>> a=input("请输入")
请输入abc
>>> print(a)
abcdefg
# print(10/3) #3.3333333333333335
# print(10//3) #3 ## 取整
# print(10//3.0) #3.0
# print(2**3) # 8 幂指数
a,b=1,2
print(a,b)
python 中没有a++
用如下:
a = 10
a+=1
>>>
age=input("请输入年龄:")
age = int(age)
if age>20:
print("长大了")
elif age >40:
print("老了")
else:
print("还小呢")
a = 10
if a >10:
pass
else:
pass
# i=1
# sum=0
# while i <=100:
# sum+=i
# i+=1
# print(sum)
## 九九乘法表
n = 1
while n <=9:
c= 1
while c<=n:
print("%d*%d=%d"%(c,n,c*n),end="\t")
c+=1
n+=1
print()
sum = 0
for i in range(1,100):
sum+=i
print(sum)
切片(分片)
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
切片的语法:[起始:结束:步长]
步长:表示下标变化的规律。
注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)。
# _*_ coding:utf-8 _*_
'''
集合
'''
a="abcdefg"
# print(a[0]) #a
# print(a[-1]) ## g
# ## 切片
# print(a[0:3]) ## abc
# print(a[:3]) ## abc
# print(a[2:]) ## cdefg
# print(a[2:7]) ## cdefg
# print(a[2:6]) ##cdef
# print(a[0:4:2])## ac
# print(a[::-1])## gfedcba
print('...........')
print(a[0:6:-1])##
print(a[1:-1]) ##bcdef
######
a="abcdefg"
a="abcdefg"
# print(a.find(a)) ##0
b = "Hello world hi python"
# print(b.title()) ## Hello World Hi Python
# print(a.rjust(20))# [ abcdefg]
# print("*"*50) ## 打印50个星
# print(a.center(50))
# print("*"*50)
print(a.isalpha())
list删除元素
<4>删除元素("删"del, pop, remove)
类比现实生活中,如果某位同学调班了,那么就应该把这个条走后的学生的姓名删除掉;在开发中经常会用到删除这种功能。
列表元素的常用删除方法有:
del:根据下标进行删除,其实可以删除所有变量
pop:默认删除最后一个元素
remove:根据元素的值进行删除第一个
## python2.7 (仅这一片段)
>>> a={"aaa":12,"bbb":23,"ccc":34}
>>> a.has_key("aaa")
True
s="abcdefg"
# print(s[20]) ## 报错,
print(s[2:20]) ## 不报错
'''
列表
'''
# a=["a","b","c",12,12.34]
# print(a)
# print(a.__len__(),len(a))
# print(a[100]) ## 报错
# print(a[-1])
# print(a[::-1]) ## 反转
# a.append("e")
# a.extend("f")
# b=["aa","bb","cc"]
# a.extend(b)
# a.insert(2,"hello")
# del(a)
# a.pop()
# a.remove(12)
# a.__delitem__(1)
# if "a" in a:
# print("存在")
# else:
# print('不存在')
# print(a.index("a"))
# print(a.index("c",2,6)) ## 从索引2找到6
# a=["a","b","c",12,12.34,"a","b"]
# print(a.count("a"))
# print(a)
# list存放 有序,不唯一的数据,数据类型不必一致
# print(a.sort()) ## TypeError: '< 排序类型必须一致
# c=[1,2,3,5,72,2]
# print(c)
# c.sort()
# print(c)
# c.reverse()
# print(c)
#
# for i,chrs in enumerate(c):
# print("%d-----%d"%(i,chrs))
#
# c[2] = "abcdefg"
# print(c)
'''
元组
'''
# a = ("a","b","c","d")
# a[2]="d" ## TypeError: 'tuple' object does n 元组不能修改数据
# print(id(a))
# b= (1,2,3,4,5)
# print(id(b)) ## 返回引用
# a=b
# print(id(a))
# print(a)
# t=(1)
# print(t) # 1
# t=(1,) ## 注意逗号才表示元组
# print(t) (1,)
'''
可变tuple
'''
# t=("a","b",["A","B"])
# print(t)
# t[2][0] = "X"
# t[2][1]= "Y"
# y=["X","Y"]
# t[2] = y ## TypeError: 'tuple' object 不能对直接子元组元素的引用进行修改
# print(t.index("a",))
# print(t.count("a"))
# print(t)
'''
dict 字典
'''
#dict
person={"aaa":12,"bbb":23,"ccc":34}
# print(person) ## {'aaa': 12, 'bbb': 23, 'ccc': 34}
# print(person['aaa'])
# abc = {"a","b","c"} ## set 可以为没有value的字典
# print(abc)
## 字典遍历
# for key in person.keys():
# print(key)
# for value in person.values():
# print(value)
# for item in person.items():
# print(item)
#
# for k,v in person.items():
# print(k,v)
## 修改元素
# person["aaa"] = 100
# person["ddd"] = 200
# del(person["bbb"])
# person.clear() ## {}
# del(person) ## 从内存中移除 or: name 'person' is not defined
print(person.ha)
print(person)
6、总结:
1、请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
2、和list比较,dict有以下几个特点:
1)查找和插入的速度极快,不会随着key的增加而变慢;
2)需要占用大量的内存,内存浪费多。
3)而list相反:查找和插入的时间随着元素的增加而增加;占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
总结:
1、可变类型,值可以改变:
列表 list
字典 dict
set (没有value的字典)
2、不可变类型,值不可以改变:
数值类型 int, long, bool, float
字符串 str
元组 tuple
'''
函数
'''
# def test():
# print("I'm function")
# # 调用;
# test() ## 不到定义重复的文件test __init__.py 不要删除
# def add(a,b):
# print(a+b)
# def add(a,b=2): ## 可以带有默认值
# print(a+b)
# add(1,2)
# add(1)
# add(b=3,a=5)
# a=1
# b=2
# add(a,b)
'''
不定长参数
'''
# def function(a,b,*args,**kwargs):
# print(a,b)
# print(*args)
# for i in kwargs.items():
# print(i)
#
# function(1,2,3,4,5,6,7,8,x=9,y=10)
# a=[1,2]
# a+=a
# print(a) # [1, 2, 1, 2]
'''
可变类型与不可变类型的传参
'''
# def add3(a):
# a+=1
# print(a)
#
# a = 10
# add3(a)
# print(a)## 10
# def add3(a):
# a+=a
# print(a)
# a =[1,2]
# add3(a)
# print(a) # [1, 2, 1, 2]
# a=(1,2)
# add3(a)
# print(a) #(1, 2)
'''
Python中函数参数是引用传递(注意不是值传递)。对于不可变类型,因变量不能修改,
所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。
'''
'''
函数返回值
'''
# def func(a,b):
# c = a+b
# return c
# print(func(2,3)) ## 5
# def func2(a):
# b = 100+a
# c=200+a
# return b,c # 返回值可以是多个
#
# b,c = func2(200)
# print(b,c) ## 300 400
'''
局部变量和全局变量
'''
# a=10
# def func(a):
# a+=10
# print(a)
# func(100)
# a=10
# def func():
# a+=10
# print(a)
# func() ## local variable 'a' referenced before assignment
# a=10
# def func():
# a=10
# print(a)
# func() ## local variable 'a' referenced before assignment
# a=10
# print(id(a))
# def func():
# global a
# a=a+ 10
# print(id(a))
# print(a) # 20
# func() ## local variable 'a' referenced before assignment
# print(a) # 20
# a = 100
# print(id(a))
# def test1():
# a=10
# print(a)
# a=20
# print(a)
#
# def test2():
# global a
# print(a)
# a += 200
# print(a)
# print(id(a))
#
# # test1()
# test2()
# print(id(a))
b = 10
def test():
print(b) ## 引用可以
# b=20 ## 修改值不允许 UnboundLocalError: local variable 'b' referenced before assignment
c=b
print(c)
test()
# _*_ coding:utf-8 _*_
'''
递归函数
'''
'''
斐波那契数列
'''
# def createNum(a):
# arr = []
# def getNum(b):
# if b <2:
# return 1
# else:
# return getNum(b-1) + getNum(b-2)
# for i in range(0,a):
# arr.append(getNum(i))
# print(arr)
#
# createNum(10)
'''
lambda : 小型的匿名函数
'''
# sum = lambda a,b:a+b
# print(sum(1,2))
# def test(a,b,opt):
# print(a)
# print(b)
# print("result:%d"%opt(a,b))
#
# test(1,2,lambda a,b:a+b)
stus = [ {"name":"zhangsan", "age":18}, {"name":"lisi", "age":19}, {"name":"wangwu", "age":17} ]
# stus.sort(key=lambda x:x['name'])
stus.sort(key=lambda x:x['age'])
print(stus)


# _*_ coding:utf-8 _*__
'''
文件操作
'''
f = open("./test.txt","r")
# a = f.read()
# a = f.readlines()
# a = f.readline()
# p = f.tell() ## 位置
# print(a)
# print(p)
# f.close()
# f = open("./test.txt","w")
# f = open("D:\\usr\\pythondemo\\demo00\\com\\bjsxt\\test.txt","w") ## 注意转义
# f = open(r"D:\usr\pythondemo\demo00\com\bjsxt\test.txt","w") ## r 表示字符是本身的含义
# f.write("hello Appollo; python is simple 1")
# f.close()
f = open("./test.txt","rb")
a = f.readline()
print(a)
# f.seek(0,0) ## 又从头开始读取
f.seek(-20,2) ## 需要rb模式
a = f.read()
print(a)
f.close()
import os
# print(os.name) ## Windows 返回 ‘nt'; Linux 返回’posix'
# print(os.getcwd())
# print(os.listdir("d:"))
# os.remove("./test1.txt")
'''
set 补充 # 相当于没有value的字典
'''
a = set([1,2,3,4])
print(a)


1、__new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供 2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例 3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值 4、我们可以将类比作制造商,__new__方法就是前期的原材料购买环节,__init__方法就是在有原材料的基础上,加工,初始化商品环节

'''
类和对象
'''
# class Dog:
# class Dog(object):
# def run(self):
# print("running")
#
# dog = Dog()
# print(id(dog))
#
# dog2 = Dog()
# print(id(dog2))
#
# dog.run()
# class Dog:
# def run(self):
# print("running")
#
# dog = Dog()
# dog.name = "hello"
# dog.run()
# print(dog.name)
#
# dog2 = Dog()
# dog2.age =12
# print(dog2.age)
class Dog:
def run(self):
print("running")
## init 不是构造器只是完成对象的初始化
# def __init__(self):
# print("init被调用")
def __init__(self,name,age): ##对象的初始化,完成一些默认的设定
print("init被调用")
self.name = name
self.age = age
def __new__(cls,name,age): ## 这里才是创建对象
print("new被调用")
return object.__new__(cls)
def __del__(self):
print("对象被删除,和回收%s"%self.name)
def __str__(self):
# return object.__str__(self)
# return "hello python"
return "name:%s,age:%s"%(self.name,self.age)
## 先执行创建对象,再初始化
dog = Dog("旺财",7)
# dog.run()
# print(dog.name)
# dog2 = Dog("旺财22",17)
# print(dog2.age)
#
# print(dog)
# print(dog2)
# dog.run()
dog2 = dog
dog3 = dog
print("dog2 被删除")
del dog2
print("dog3 被删除")
del dog3
print("dog 被删除")
del dog
## dog 一直被引用,直到最后才删除。
"魔法"方法

'''
私有属性
'''
class Person(object):
def __init__(self,name,age):
self.__name = name ## 属性前加"__" 为私有属性
self.age = age
def setName(self,name):
if len(name) >3:
self.__name = name
else:
print("名字长度不符合规范")
def getName(self):
return self.__name
def __test(self):
print("test")
def test2(self):
self.__test()
p = Person("张三",12)
# # print(p.__name) ## AttributeError: 'Person' object has no attribute '__name'
# print(p.getName(),p.age)
# p.setName("dd")
# p.__test() ## AttributeError: 'Person' object has no attribute '__test'
p.test2() ## 用共有方法访问私有方法
# class Animal(object):
# def __init__(self,name):
# self.name = name
#
# def eat(self):
# print("吃的很开心")
#
# class Cat(Animal):
# def __init__(self,name,age):
# Animal.__init__(self,name)
# self.age = age
#
# def run(self):
# print("running")
#
#
# cat = Cat("哈哈",12)
# cat.run()
# cat.eat()
# print(cat.name)
# print(cat.age)
'''
单继承
'''
# class Animal(object):
# def __init__(self, name='动物', color='白色'):
# self.__name = name
# self.color = color
# def __test(self):
# print(self.__name)
# print(self.color)
# def test(self):
# print(self.__name)
# print(self.color)
#
#
# class Dog(Animal):
# def dogTest1(self):
# # print(self.__name)
# # 不能访问到父类的私有属性
# print(self.color)
# def dogTest2(self):
# # self.__test()
# # 不能访问父类中的私有方法
# self.test()
#
#
# A = Animal()
# # print(A.__name)
# # 程序出现异常,不能访问私有属性
# print(A.color)
# # A.__test()
# # 程序出现异常,不能访问私有方法
# A.test()
# print("------分割线-----")
# D = Dog(name="小花狗", color="黄色")
# D.dogTest1()
# D.dogTest2()
'''
多继承
'''
class A(object):
def test(self):
print("---------A----------")
class B(object):
def test(self):
print("------B-----")
class C(A,B):
# def test(self):
# A.test(self) ## 犯法重复时,必须指定父类方法
# def test(self): ## 打印A ,
# pass
def test(self): ## 打印A ,
# super(C,self).test()
super().test()
c = C()
c.test()
# print(C.__mro__)
## (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)

# class Person(object):
# name="zhangsan"
#
# def __init__(self,name,age):
# self.name = name
# self.age = age
#
# p = Person("lisi",12)
# print(p.name) ## lisi
# p.name="wangwu"
# print(p.name) ## wangwu
# print(Person.name) ## zhangsan
# Person.name = "maliu"
# print(Person.name) ## maliu
# print(p.name)
# class Person(object):
# name="zhangsan"
# # def __init__(self,name,age):
# # self.name = name
# # self.age = age
#
# p = Person()
# print(p.name) ## zhangsan
# p.name="wangwu"
# print(p.name) ## wangwu
# Person.name = "maliu"
# print(Person.name) ## maliu
# print(p.name) ## wangwu
'''
类方法和静态方法
'''
class Person(object):
name="zhangsan"
@classmethod
def test(cls):
print("类方法")
def test2(self):
print("test2")
@staticmethod
def test3():
print("test3")
p = Person()
p.test()
p.test2()
Person.test()
# Person.test2(p) ## TypeError: test2() missing 1 required positional argument: 'self'
Person.test3()
《设计模式之禅》 实例比较浅显易懂
'''
设计模式
'''
'''
单例模式
'''
#
# class Singleton:
# __instance = None
# def __new__(cls):
# if not cls.__instance:
# __instance=object.__new__(cls)
# return cls.__instance
#
# a = Singleton()
# b=Singleton()
# print(id(a))
# print(id(b))
'''
简单工厂模式
'''
class Person(object):
def __init__(self,name):
self.name = name
def work(self,type_axe):
print("%s开始工作了"%(self.name))
# axe=StoneAxe()
# axe=SteelAxe()
axe = Factory.create_axe(type_axe)
axe.cut_tree()
class Axe(object):
def cut_tree(self):
print("正在砍树")
class StoneAxe(Axe):
def cut_tree(self):
print("使用石头做的斧子砍树")
class SteelAxe(Axe):
def cut_tree(self):
print("使用钢铁做的斧子砍树")
class Factory(object):
@classmethod
def create_axe(self,type_axe):
if type_axe == "stone":
return StoneAxe()
elif type_axe == "steel":
return SteelAxe()
elif type_axe == "water":
return SteelAxe()
else:
print("传入的参数不对")
p = Person("张三")
p.work("steel")
p.work("stone")
## 切换斧子不太方便,需要工厂模式
## 斧头增加类型了
class WaterAxe(Axe):
def cut_tree(self):
print("使用水做的斧子砍树")
p.work("water")
'''
异常
'''
# f = None
# try:
# # print(num)
# print("test1")
# f = open("./123.txt","r") ## FileNotFoundError:
# print("test2")
# except (FileNotFoundError,NameError) as errormsg: ## errormsg 存储异常信息的基本描述
# print("报错了")
# print(errormsg)
# else:
# print("没有异常")
# finally:
# print("finally")
# if f:
# f.close()
#
# print("test3")
'''
自定义异常
'''
class ShortInputException(Exception):
'''自定义的异常类'''
def __init__(self, length, atleast):
# super().__init__()
self.length = length
self.atleast = atleast
def main():
try:
s = input('请输入 --> ')
if len(s) < 3: # raise引发一个你定义的异常
raise ShortInputException(len(s), 3)
except ShortInputException as result: # x这个变量被绑定到了错误的实例
print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'% (result.length, result.atleast))
else:
print('没有异常发生.')
main()
<5>定位模块 当你导入一个模块,Python解析器对模块位置的搜索顺序是: 1、当前目录 2、如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。 3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/ 4、模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
<6>安装模块
conda create -n py2 python=2.7
conda install 模块
pip install 模块
pymysql
numpy
__init__.py
'''
可以将from import 的内容写到这里
'''
test.py
def add(a,b):
return a+b
def sub(a,b):
return a-b
'''
模块导包
'''
import os
# from os import * ## 最好需要谁就导谁
from os import path
# print(os.getcwd())
# print(os.path.isfile("./ImportDemo.py"))
# print(path.isfile("./ImportDemo.py"))
import pygame ## 没有,需要安装 ## C:\Users\Administrator>pip install pygame
import pymysql
'''
pip 是python自带的安装方式
pip install 模块
annaconda 也有一种安装方式
conda install 模块
pymysql
numpy
'''
## 导入自己写的包
import test
result = test.add(1,2)
print(result)
result = test.sub(3,2)
print(result)
模块的发布
1.mymodule目录结构体如下:
.
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── __init__.py
└── subb
├── cc.py
├── dd.py
└── __init__.py
2.编辑setup.py文件
py_modules需指明所需包含的py文件
from distutils.core import setup
setup(name="压缩包的名字", version="1.0", description="描述", author="作者", py_modules=['suba.aa', 'suba.bb', 'subb.cc', 'subb.dd'])
3.构建模块
python setup.py build
4.生成发布压缩包
python setup.py sdist
## 使用pip 暗转模块
C:\Users\Administrator>pip install pygame
C:\Users\Administrator>pip install pymysql
C:\Users\Administrator>pip install numpy

'''
列表推导式
'''
for i in range(1,10):
print(i)
a = [i for i in range(1,10)]
print(a)
a = [i for i in range(1,10) if i%2==0]
print(a)
b = [(i,j) for i in range(1,10) for j in range(1,10)]
print(b) ## 81个
b = [(i,j,k) for i in range(1,10) for j in range(1,10) for k in range(1,10)]
print(b) ##
b = ((i,j) for i in range(1,10)) ## 列表推导式不能这么写,不是叫元组推导式
print(b) ## <generator object <genexpr> at 0x000001C9C2AF3678>
# print(b[1]) ## TypeError: 'generator' object is not subscriptable
d = (1,2,3)
print(d)
'''
连接mysql数据库
pip install pymysql
新建数据库名test,导入如下数据
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`DEPTNO` int(2) NOT NULL,
`DNAME` varchar(14) DEFAULT NULL,
`LOC` varchar(13) DEFAULT NULL,
PRIMARY KEY (`DEPTNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `dept` VALUES ('10', 'ACCOUNTING', 'NEW YORK');
INSERT INTO `dept` VALUES ('20', 'RESEARCH', 'DALLAS');
INSERT INTO `dept` VALUES ('30', 'SALES', 'CHICAGO');
INSERT INTO `dept` VALUES ('40', 'OPERATIONS', 'BOSTON');
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`EMPNO` int(4) NOT NULL,
`ENAME` varchar(10),
`JOB` varchar(9),
`MGR` int(4),
`HIREDATE` date,
`SAL` int(7),
`COMM` int(7),
`DEPTNO` int(2),
PRIMARY KEY (`EMPNO`),
KEY `FK_DEPTNO` (`DEPTNO`),
CONSTRAINT `FK_DEPTNO` FOREIGN KEY (`DEPTNO`) REFERENCES `dept` (`DEPTNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `emp` VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17', '800', null, '20');
INSERT INTO `emp` VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20', '1600', '300', '30');
INSERT INTO `emp` VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22', '1250', '500', '30');
INSERT INTO `emp` VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-04-02', '2975', null, '20');
INSERT INTO `emp` VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28', '1250', '1400', '30');
INSERT INTO `emp` VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-05-01', '2850', null, '30');
INSERT INTO `emp` VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-06-09', '2450', null, '10');
INSERT INTO `emp` VALUES ('7788', 'SCOTT', 'ANALYST', '7566', '1987-04-19', '3000', null, '20');
INSERT INTO `emp` VALUES ('7839', 'KING', 'PRESIDENT', null, '1981-11-17', '5000', null, '10');
INSERT INTO `emp` VALUES ('7844', 'TURNER', 'SALESMAN','7698', '1981-09-08', '1500', '0', '30');
INSERT INTO `emp` VALUES ('7876', 'ADAMS', 'CLERK', '7788', '1987-05-23', '1100', null, '20');
INSERT INTO `emp` VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03', '950', null, '30');
INSERT INTO `emp` VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03', '3000', null, '20');
INSERT INTO `emp` VALUES ('7934', 'MILLER', 'CLERK', '7782', '1982-01-23', '1300', null, '10');
'''
import pymysql as pm
conn = pm.connect("node1","root","123456","demo") ## Connection
cursor=conn.cursor()
cursor.execute("select * from emp")
# emp = cursor.fetchone()
# print(emp) ## (7369, 'SMITH', 'CLERK', 7902, datetime.date(1980, 12, 17), 800, None, 20)
# print(type(emp)) ##<class 'tuple'>
all = cursor.fetchall()
print(all) ## ((7369,
conn.close()
#coding:utf-8
import pymysql
class MysqlHelper(object):
config={
"host":"node1",
"user":"root",
"password":"123456",
"db":"demo",
"charset":"utf8"
}
def __init__(self):
self.connection=None
self.cursor=None
# 从数据库表中查询一行数据 select count(*) from emp
def getOne(self,sql,*args):
try:
self.connection = pymysql.connect(**MysqlHelper.config)
self.cursor = self.connection.cursor()
self.cursor.execute(sql,args)
return self.cursor.fetchone()
except Exception as ex:
print(ex,ex)
finally:
self.close()
# 从数据库表中查询多行数据
def getList(self,sql,*args):
try:
self.connection = pymysql.connect(**MysqlHelper.config)
self.cursor = self.connection.cursor()
self.cursor.execute(sql,args)
return self.cursor.fetchall()
except Exception as ex:
print(ex,ex)
finally:
self.close()
# 对数据库进行增,删,改
def executeDML(self,sql,*args):
try:
self.connection = pymysql.connect(**MysqlHelper.config)
self.cursor = self.connection.cursor()
self.cursor.execute(sql,args)# 返回 sql语句执行之后影响的行数
new_id = self.connection.insert_id() # 返回系统刚刚自动生成的id
self.connection.commit();
return new_id
except Exception as ex:
self.connection.rollback()
print(ex,ex)
finally:
self.close()
def close(self):
if self.cursor:
self.cursor.close()
if self.connection:
self.connection.close()
if __name__ == "__main__":
helper = MysqlHelper()
print(helper.executeDML("delete from dept where deptno=%s",80))
# print(helper.executeDML("insert into dept values(%s,%s,%s)","80","admin","beijing"))
1. Numpy是什么?
NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。 NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。
这个库的前身是1995年就开始开发的一个用于数组运算的库。经过了长时间的发展,基本上成了绝大部分Python科学计算的基础包,当然也包括所有提供Python接口的深度学习框架。
4. numpy 基础:
NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型。在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。NumPy的数组类被称作 ndarray(矩阵也叫数组) 。通常被称作数组。常用的ndarray对象属性有:ndarray.ndim(数组轴的个数,轴的个数被称作秩),ndarray.shape(数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n行m列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性),ndarray.size(数组元素的总个数,等于shape属性中元组元素的乘积),ndarray.dtype(一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。另外NumPy提供它自己的数据类型)。
'''
numpy 库
矩阵
机器学习
'''
import numpy as np
# arr = np.array([[1,2,3],[4,5,6]])
# print(arr)
# print(arr.ndim) ## 轴的个数,秩
# print(arr.dtype) ## np.arange(1,10)
# print(arr.shape) ## (2, 3) 行列数量
# print(arr.size) ## 6
## 三维数组
# arr = np.array([[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]]])
# print(arr)
# print(arr.ndim)
# print(arr.dtype)
# print(arr.shape) ## (2, 3, 2)
# print(arr.size)
'''
创建数组的方式2
'''
# arr = np.arange(10).reshape(2,5)
# print(arr)
#
# arr = np.arange(27).reshape(3,3,3) ## 0-26
# print(arr)
# arr = np.arange(35).reshape(3,3,3) ## ValueError: cannot reshape array of size 35 into shape (3,3,3)
# print(arr)
# arr = np.random.random((2,5)) ## 随机小数[0,1) 10个, 2x5矩阵
# arr = np.random.randn(2,3) ## 正太分布
# arr = np.zeros((2,3)) ## 所有元素是0
# arr = np.ones((2,3)) ## 所有元素是1
# arr = np.empty((2,3)) ## 所有元素是0
# print(arr)
# arr=np.arange(10).reshape(2,5)
# print(arr)
# print(np.where(arr>5,arr,0))
# '''
# [[0 0 0 0 0]
# [0 6 7 8 9]]
# '''
# arr=np.random.randint(1,10,20).reshape(4,5)
# print(arr)
# print(arr[0])
# print(arr[0,0])
# print(arr[:,0]) ## 取第一列
# ## 取第一行和第四行
# print(arr[0:4:3])
# print(arr[[0,3]])
## 第一列和第四列
# print(arr[0:,0:5:3])
# print(arr[:,[0,3]])
# ## 第二三行,第二三列
# print(arr[[1,2]])
# print(arr[[1,2],1:3])
# print(arr[[1,2],[1,2]]) ## 合并成坐标了 不行
# for i in range(0,arr.shape[0]):
# print()
# for j in range(0,arr.shape[1]):
# print(arr[i][j],end=" ")
# print(arr.sum())
# print((arr>5).sum()) ## 大于5的个数
# print(arr.sum(0)) ## 逐行相加
# print(arr.sum(1)) ## 逐列相加
# arr=np.random.randint(1,10,20).reshape(4,5)
# arr1=np.random.randint(1,10,20).reshape(4,5)
# print(arr)
# print(arr1)
# print(arr+arr1)
'''
相乘
'''
# arr=np.random.randint(1,10,20).reshape(4,5)
# arr1=np.random.randint(1,10,20).reshape(5,4)
# print(arr)
# # print(arr1)
# # print(np.dot(arr,arr1))
# print(arr.T) ## 转置 旋转
# a = np.arange(10).reshape(2,5)
# print(a.resize(5,2))
# print(a)
b = np.arange(6).reshape(2,3)
print(b)
c = np.ones((2,3))
print(c)
# d = np.hstack((b,c)) # hstack:horizontal stack 左右合并
# print(d)
# e = np.vstack((b,c)) # vstack: vertical stack 上下合并
# print(e)
# f = np.column_stack((b,c))
# print(f)
# g = np.row_stack((b,c))
# print(g)
# h = np.stack((b, c), axis=1) # 按行合并
# print("--h------")
# print(h)
# i = np.stack((b,c), axis=0) # 按列合并
# print("--i------")
# print(i)
# j = np.concatenate ((b, c, c, b), axis=0) #多个合并
# print(j)
print()
print()
print()
i = np.stack((b,c), axis=0) # 按列合并
print(i)
print(i.shape)
#分割
k = np.hsplit(i, 2)
print(k)
l = np.vsplit(i, 2)
print(l)
m = np.split(i, 2, axis=0)
n = np.split(i, 2,axis=1)
print(m)
print(n)
o = np.array_split(np.arange(10),3) #不等量分割
print(o)
'''
机器学习
深度学习
神经网络
'''


浙公网安备 33010602011771号