1、python介绍
介绍前端
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,Guido开始写可以解释Python语言语法的解释器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他但愿这个新的叫作Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。python
最新的TIOBE排行榜,Python赶超PHP占据第4, Python崇尚优美、清晰、简单,是一个优秀并普遍使用的语言。linux
Python能够应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎全部大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。web
1.web开发shell
Python拥有不少免费数据函数库、web模板系统、以及与web服务器进行交互的库,能够实现web的开发,目前比较有名气的Python web框架为flask和Django。这两款框架的效率都很是高macos
2.桌面开发django
Python在图形界面开发上也很强大,能够利用tkinter/PyQT框架开发各类桌面软件!编程
3.网络编程flask
支持高并发的Twisted网络框架, python3引入的asyncio使异步编程变的很是简单(python2没有)windows
4.爬虫
在爬虫领域python的绝对是霸主地位,无人能及
5.人工智能
这个我就很少说了吧,地球人都知道python在人工智能的地位
6.云计算
Python是从事云计算工做须要掌握的一门编程语言,目前很火的云计算框架OpenStack就是由Python开发的,若是想要深刻学习并进行二次开发,就须要具有Python的技能。
7.自动化运维
Python是一门综合性的语言,能知足绝大部分自动化运维需求,前端和后端均可以作,从事该领域,应从设计层面、框架选择、灵活性、扩展性、故障处理、以及如何优化等层面进行学习。
8.游戏开发
在网络游戏开发中,Python也有不少应用,相比于Lua or C++,Python比Lua有更高阶的抽象能力,能够用更少的代码描述游戏业务逻辑,据我所知《文明》这款游戏就是python写的
9.科学运算
97年开始,NASA就在大量使用Python在进行各类复杂的科学运算,随着NumPy, SciPy, Matplotlib, Enthought librarys等众多程序库的开发,使的Python愈来愈适合于作科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更普遍
2、python真实的应用场景
CIA: 美国中情局网站就是用Python开发的
NASA: 美国航天局(NASA)大量使用Python进行数据分析和运算
YouTube:世界上最大的视频网站YouTube就是用Python开发的
Dropbox:美国最大的在线云存储网站,所有用Python实现,天天网站处理10亿个文件的上传和下载
Instagram:美国最大的图片分享社交网站,天天超过3千万张照片被分享,所有用python开发
Facebook:大量的基础库均经过Python实现的
linux系统: 世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的
豆瓣: 公司几乎全部的业务均是经过Python开发的
知乎: 国内最大的问答社区,经过Python开发(国外Quora)
春雨医生:国内知名的在线医疗网站是用Python开发的
除上面以外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各类各样的任务。
3、Python的就业方向
发展前景一:Linux运维
发展前景二:Python Web网站工程师
发展前景三:Python自动化测试
发展前景四:数据分析
发展前景五:人工智能
4、windows安装python解释器
打开官网 https://www.python.org/downloads/windows/ 下载中心
测试安装是否成功:cmd下输入python关键字,若是能进入交互界面表示OK
pycharm安装方法
https://blog.csdn.net/pdcfighting/article/details/80297499
pip介绍
pip的用法其实跟linux的yum很像,它能够帮咱们安装python所须要的环境包,而且能够包解决依赖关系
列出已安装的包
pip list
安装要安装的包
pip install xxx
安装特定版本
pip install django==1.1.5
导出python的环境
pip freeze > requestment.txt
从导出的python环境中安装所须要的包
pip install -r requestment.txt
卸载导出的python环境中的包
pip uninstall -r requestment.txt
升级包
pip install -U <包名>
显示包所在的目录
pip show -f <包名>
搜索包
pip search <搜索关键字>
查询可升级的包
pip list -o
下载包而不安装
pip install <包名> -d <目录> 或 pip install -d <目录> -r requirements.txt
更换国内pypi镜像
阿里:https://mirrors.aliyun.com/pypi/simple
豆瓣:http://pypi.douban.com/simple
中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple/
pip install <包名> -i http://pypi.v2ex.com/simple
指定全局安装源
在unix和macos,配置文件为:$HOME/.pip/pip.conf
在windows上,配置文件为:%HOME%\pip\pip.ini
(1):在windows文件管理器中,输入 %APPDATA%
(2):会定位到一个新的目录下,在该目录下新建pip文件夹,而后到pip文件夹里面去新建个pip.ini文件
(3):在新建的pip.ini文件中输入如下内容,搞定文件路径:"C:\Users\Administrator\AppData\Roaming\pip\pip.ini"
[global] timeout = 6000 index-url = http://pypi.douban.com/simple
建立python的虚拟环境
为何须要虚拟环境:
若是你如今用Django 1.10.x
写了个网站,而后你的领导跟你说,以前有一个旧项目是用Django 0.9
开发的,让你来维护,可是Django 1.10
再也不兼容Django 0.9
的一些语法了。这时候就会碰到一个问题,我如何在个人电脑中同时拥有Django 1.10
和Django 0.9
两套环境呢?这时候咱们就能够经过虚拟环境来解决这个问题。
安装虚拟环境:
virtualenv
是用来建立虚拟环境的软件工具,咱们能够经过pip
或者pip3
来安装
pip install virtualenv pip3 install virtualenv
建立虚拟环境:
建立虚拟环境很是简单,经过如下命令就能够建立了:
virtualenv [虚拟环境的名字]
进入虚拟环境:
虚拟环境建立好了之后,那么能够进入到这个虚拟环境中,而后安装一些第三方包,进入虚拟环境在不一样的操做系统中有不一样的方式,通常分为两种,第一种是Windows
,第二种是*nix
:
windows
进入虚拟环境:进入到虚拟环境的Scripts
文件夹中,而后执行activate
。- linux进入虚拟环境:
source /path/to/virtualenv/bin/activate
一旦你进入到了这个虚拟环境中,你安装包,卸载包都是在这个虚拟环境中,不会影响到外面的环境。
退出虚拟环境:
退出虚拟环境很简单,经过一个命令就能够完成:deactivate
。
建立虚拟环境的时候指定Python
解释器:
在电脑的环境变量中,通常是不会去更改一些环境变量的顺序的。也就是说好比你的Python2/Scripts
在Python3/Scripts
的前面,那么你不会常常去更改他们的位置。可是这时候我确实是想在建立虚拟环境的时候用Python3
这个版本,这时候能够经过-p
参数来指定具体的Python
解释器:
virtualenv -p C:\Python36\python.exe [virutalenv name]
virtualenvwrapper
virtualenvwrapper
这个软件包可让咱们管理虚拟环境变得更加简单。不用再跑到某个目录下经过virtualenv
来建立虚拟环境,而且激活的时候也要跑到具体的目录下去激活。
安装virtualenvwrapper
linux:pip install virtualenvwrapper。 windows:pip install virtualenvwrapper-win。
virtualenvwrapper
基本使用:
-
建立虚拟环境:
mkvirtualenv my_env
那么会在你当前用户下建立一个
Env
的文件夹,而后将这个虚拟环境安装到这个目录下。
若是你电脑中安装了python2
和python3
,而且两个版本中都安装了virtualenvwrapper
,那么将会使用环境变量中第一个出现的Python
版原本做为这个虚拟环境的Python
解释器。 -
切换到某个虚拟环境:
workon my_env
-
退出当前虚拟环境:
deactivate
-
删除某个虚拟环境:
rmvirtualenv my_env
-
列出全部虚拟环境:
lsvirtualenv
修改mkvirtualenv
的默认路径:
在个人电脑->右键->属性->高级系统设置->环境变量->系统变量
中添加一个参数WORKON_HOME
,将这个参数的值设置为你须要的路径。
建立虚拟环境的时候指定Python
版本:
在使用mkvirtualenv
的时候,能够指定--python
的参数来指定具体的python
路径:
mkvirtualenv --python==C:\Python36\python.exe hy_env
5、变量
变量是什么?什么是变量?变量有什么好处?
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址能够存储Script运行时可更改的程序信息。例如,能够建立一个名为ClickCount的变量来存储用户单击Web页面上某个对象的次数。使用变量并不须要了解变量在计算机内存中的地址,只要经过变量名引用变量就能够查看或更改变量的值。在例如:我们平时玩的游戏都有level,打怪就升级,那个level就是变量
变量定义的规范:
变量名只能是字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
变量名不能为关键字,好比 and,as,break,class,continue,def,del............
变量名字尽可能起个个有意义的名字,好比:name=‘张三’,不要词不达意,好比:aaa='张三'
变量名字不要起过长
变量名字尽可能不要起拼音或者汉字
变量应该具备的属性或者特征
name='疯子'
id,type,value
id——表明变量的内存地址
type——表明变量的数据类型
value——表明等号右边的值
这3个特色缺一个都不叫变量
python的小整数池
在交互模式下python有一个小的整数池,他的范围是[-5,256],这么作的好处是避免浪费空间和资源
只要是在这个数值内,内存地址都同样
在pycharm中,pycharm出于对性能的考虑会扩大这个整数池,至于扩大到多少,视内存而定
6、常量
常量即表明不变的量,其实在python里不存在真正不变的量,只不过潜规则在咱们想定义一个常量的时候变量名为大写即为常量:
好比:一我的的年纪不断的增加,那么年纪就叫常量,若是这我的死了,那么他的年纪就被定格在了那一年的年纪上,这个时候年纪就是常量
AGE=60
7、用户与程序(python)交互
首先来讲什么是交互,交互就跟人与人对话同样,你有来言,我有去语,可以对话...可以沟通,那么用户怎么跟程序去对话呢?这时候咱们能够调用python的一个内置函数,叫:input
#例子 name = input() print(name) #若是你想让程序有提示信息 name = input("what's your name?") print(name)
8、注释
随着代码愈来愈多,若是你不写注释的话可能过几天连本身写的代码都不知道写的什么意思,更况且是别人了,所以就须要有注释来提示用户
单行注释能够用#表示,#号右边的为注释内容 若是要多行注释能够用''' ''',左右两边一边1个3引号中间的部分就是注释的内容
9、数据类型
数字
#int整型 定义:age=10 #age=int(10) 用于标识:年龄,等级,身份证号,qq号,个数 #float浮点型 定义:salary=3.1 #salary=float(3.1) 用于标识:工资,身高,体重,
字符串
单引号,多引号,三引号的区别和做用 #多行字符串须要用到三引号 双引号和单引号都是用来定义单行字符串的,那么2者有什么区别呢,举个例子 想把这个句话定义成字符串怎么办? what's your name 这句话当中有一个单引号了,若是咱们在用单引号把他包起来,他就会报错,所以,咱们须要在外面用双引号包裹起来 res = "what's your name"


#在python当中数字能够进行加法,那么字符串能够吗?让我大声的告诉你,也能够 a = '你' b = '好' a + b #结果为'你好' #注意,字符串只能和字符串相加,不能和别的数据类型相加
列表


#在[]内用逗号分隔,能够存听任意个任意类型的值好比(数字,字符串,列表,元组都OK),#用于标识存储多个值,好比一个班级的学生有多个,一我的的兴趣爱好也有多个 >>> test = [1,2,'a',[1,2],{'a','b'}] >>> test [1, 2, 'a', [1, 2], {'b', 'a'}] >>> #利用下标取列表里的值 >>> test[0] 1 >>>
元组


元组跟列表同样均可以存取多个值,只不过元组大部分是用来读的
字典


#既然有了列表能够存取多个值,为何还要有字典呢?举个例子你就明白了 好比在这个列表中有2个值一个28用来表示年纪,一个187用来标识身高,可是并无一个说明,那个元素对应的是年纪,那个元素对应的是身高 info = [28,187] #所以,字典就能够解决这个问题 info = {'age':28,'high':187}


info={ 'name':'fengzi', 'hobbies':['play','sleep'], 'company_info':{ 'name':'宏福', 'type':'education', } } info['company_info']['name']#取公司名字
布尔


#布尔类型就是True和False >>> a=100 >>> b=200 >>> >>> a > b #不成立就是False,也就是假 False >>> a < b #成立就是True, 也就是真 True #谨记 #0,None,空都为假,其他为真
引用计数和垃圾回收机制
10、可变类型和不可变类型


#1.可变类型:在id不变的状况下,value能够变,则称为可变类型,如列表,字典 #2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着建立了新的内存空间)
11、格式化输出


#程序中常常会有这样场景:要求用户输入信息,而后打印成固定的格式 #好比要求用户输入用户名和年龄,而后打印以下格式: My name is xxx,my age is xxx. #这种状况下就用到了%s和%d res = 'my name is %s, my age is %d' % ('疯子',29) print(res) #这里要注意%d只能够接收数字,%s能够接收数字也能够接收字符串


#第一种方法,传递参数 res = 'my name is {name}, my age is {age}'.format(name='疯子',age=29) print(res) #第二种方法按顺序 res = 'my name is {0}, my age is {1}'.format('疯子',29) print(res)
内置函数(len,in,not in)
12、基本运算符
a = 10 b=20
十3、比较运算符
十4、赋值运算符
十5、身份运算符


#is表示id是否相等,也就是比较内存地址是否一致,一致为True,不一致为False #==表示两个值是否一致,一致为True,不一致为False
十6、流程控制if...else....


name = '疯子' res = input('你叫什么名字?') if res == name: print('帅哥') else: print('丑男')


#若是:女人的年龄>=18而且<22岁而且身高>170而且体重<100而且是漂亮的,那么:表白,不然:叫阿姨 age_of_girl=18 height=171 weight=99 is_beautiful=True if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_beautiful == True: print('表白...')else: print('阿姨好')
十7、逻辑运算符
小练习:
#1.定义布尔型变量 has_ticket 表示是否有车票 #2.定义整形变量 knife_length 表示刀的长度,单位:厘米 #3.首先检查是否有车票,若是有,才容许进行安检 #4.安检时,须要检查棍子的长度,判断是否超过20厘米 # 若是超过20厘米,提示棍子的长度,不容许上车 # 若是不超过20厘米,按键经过 #5.若是没有车票,不容许进门


has_ticket = True stick_length = 22 if has_ticket: if stick_length > 20: print('你的棍子太长了',stick_length) else: print('请进....') else: print('您没有车票,不容许进入车站')
十8、流程控制之while
while 条件: # 循环体 # 若是条件为真,那么循环体则执行,执行完毕后再次循环,从新判断条件。。。 # 若是条件为假,那么循环体不执行,循环终止


num = 0 while num < 5: print(num) num+=1


num = 0 while num <= 10: if num % 2 ==0: print(num) num += 1


import time num = 0 while True: print(num) num += 1 time.sleep(1)


count = 0 while count <= 5 : count += 1 print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------") 输出 Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 循环正常执行完啦 -----out of while loop ------


for letter in 'Python': # continue第一个实例 if letter == 'h': continue print('当前字母 :', letter) var = 10 # continue第二个实例 while var > 0: var = var -1 if var == 5: continue print('当前变量值 :', var) print("Good bye!") count = 0 #break实例 while True: print(count) count+=1 if count == 5: break


import random win = 0 lost = 0 ping = 0 while True: print('\033[31m胜:%s 输:%s 平:%s\033[0m' % (win, lost, ping)) chooses = ['石头', '剪刀', '布'] print('欢迎来猜拳\n1.石头 2.剪刀 3.布 4退出') hum = input('请出拳:') computer = random.choice(chooses) if (hum == '1' and computer == '石头') or (hum == '2' and computer == '剪刀') or (hum == '3' and computer == '布'): ping += 1 print('\033[31m不要走,决战到天亮!!\033[0m') elif (hum == '1' and computer == '剪刀') or (hum == '2' and computer == '布') or (hum == '3' and computer == '石头'): win += 1 print('\033[31m你好NB!!\033[0m') elif (hum == '1' and computer == '布') or (hum == '2' and computer == '石头') or (hum == '3' and computer == '剪刀'): lost += 1 print('\033[31m你个损塞\033[0m') elif hum == '4': break elif not hum: continue else: print('输入错误!!') print('\033[31m=\033[0m' * 50)
十9、流程控制之for循环
1 迭代式循环:for,语法以下
for i in range(10):
缩进的代码块
2 break与continue(同上)
文件


#在python3中如何打开一个文件呢? f = open('lock.txt', 'r',encoding='utf-8')#应用程序向操做系统发起打开文件的操做 print(f.read())#操做系统打开文件获得文件句柄返回给应用程序并赋值给f f.close()#应用程序向操做系统发起关闭文件的信号,而且回收变量f #注意:操做完文件后必定要记得关闭,由于若是开的文件多了,不关闭,会浪费系统资源,使系统变慢 #可是仍是有不少同窗忘记关闭文件,所以,能够用下面这个方式 with open('lock.txt', 'r', encoding='utf-8') as f: print(f.read()) #这里要注意字符编码,秉承一个原则就不会出现乱码(用什么方式写的,就用什么方式打开)


r ,#只读模式【默认模式,文件必须存在,不存在则抛出异常】 w,#只写模式【不可读;不存在则建立;存在则清空内容】 a, #之追加写模式【不可读;不存在则建立;存在则只追加内容】 #如下三种跟上面三种同样,只不过是以二进制方式 rb wb ab 文本打开的经常使用模式


操做文件的方法 #掌握 f.read() #读取全部内容,光标移动到文件末尾 f.readline() #读取一行内容,光标移动到第二行首部 f.readlines() #读取每一行内容,存放于列表中 f.write('1111\n222\n') #针对文本模式的写,须要本身写换行符 f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,须要本身写换行符 f.writelines(['333\n','444\n']) #文件模式 #了解 f.readable() #文件是否可读 f.writable() #文件是否可读 f.closed #关闭文件 f.flush() #马上将文件内容从内存刷到硬盘 f.name #查看打开的文件名 操做文件的方法


f.seek(0,0)等价于f.seek(0)#表明把光标移动到开头 f.seek(2,1)#表明在相对位置移动2个字节(1表明光标的相对位置,2表明在相对位置上把光标向后移动2个字节) f.seek(-3,2)#表明在末尾往前移动3个字节(2表明把光标移动到末尾,-3表明把光标向前移动3个字节) f.read(3)表明读取3个字符(意思是光标在第三个字节后面) 光标位置移动
二10、做业
编写一个用户登陆程序
- 登陆成功显示欢迎页面
- 登陆失败显示密码错误,并显示错误几回
- 登陆三次失败后,退出程序


username = 'root' password = 'root' count = 0 print('请登陆...') while True: user = input('username:') pwd = input('password:') if user == username and pwd == password: print('欢迎登录') break else: count += 1 print('密码错误', count) if count == 3: print('滚') break
做业升级:
- 能够支持多个用户登陆
- 用户3次认证失败后,退出程序,再次启动程序尝试登陆时,仍是锁定状态


userinfo = { 'root':['root',0], 'fengzi':['fengzi',0], 'test': ['test',0] } while True: with open('lock.txt', 'r', encoding='utf-8') as f: username = input('username:') if not username: continue elif username in f.read(): print('您的帐户已被锁定,请联系管理员') elif username in userinfo.keys(): password = input('password:') if password in userinfo[username][0]: print('欢迎页面') break else: userinfo[username][1] += 1 print('密码错误',userinfo[username][1]) if userinfo[username][1] >= 3: with open('lock.txt', 'a', encoding='utf-8') as f: f.write('%s|' % username) else: print('用户名不存在')