python--一、入门

python的创始人为吉多·范罗苏姆(Guido van Rossum)。  
python在2017年统计的全部语言排名中处于第四名,稳步上升状态。

 

python应用领域:
WEB开发(Django框架,异步高并发的Tornado框架,短小精悍的flask,bottle)
网络编程(高并发的Twisted网络框架, py3引入的asyncio使异步编程变容易)
爬虫(Scrapy\Request\BeautifuSoap\urllib等模块)
云计算(openstack)
人工智能、科学运算( 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas,很是适合编写 1 万行以上的项目。)
自动化运维(jumpserver、CMDB)
金融分析(量化交易,金融分析)
python是一种什么样的语言:
  编程语言主要从如下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言。(此处仅介绍编译型和解释型)
    编译型:把源码文件的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机才能以本身认识的机器语言来执行。须要编译器,相似翻译软件,调试麻烦,执行速度快。不依赖语言环境运行,跨平台差,如C,
    解释型:在执行程序时,才一条一条的解释成机器语言给计算机来执行。须要解释器,相似实时翻译,调试方便,执行效率略低。跨平台好,一份代码,处处使用,如python,

编译型vs解释型

编译型
优势:编译器通常会有预编译的过程对代码进行优化。由于编译只作一次,运行时不须要编译,因此编译型语言的程序执行效率高。能够脱离语言环境独立运行。
缺点:编译以后若是须要修改就须要整个模块从新编译。编译的时候根据对应的运行环境生成机器码,不一样的操做系统之间移植就会有问题,须要根据运行的操做系统环境编译不一样的可执行文件。python

解释型
优势:有良好的平台兼容性,在任何环境中均可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就能够,能够快速部署,不用停机维护。程序员

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。算法

当咱们在命令行中输入python hello.py时,实际上是激活了Python的“解释器”,告诉“解释器”:你要开始工做了。但是在“解释”以前,其实执行的第一项工做和Java同样,是编译。
 

Python的运行过程shell

在说这个问题以前,咱们先来讲两个概念,PyCodeObject和pyc文件。编程

咱们在硬盘上看到的pyc天然没必要多说,而其实PyCodeObject则是Python编译器真正编译成的结果。咱们先简单知道就能够了,继续向下看。flask

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。网络

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,若是找到,则直接载入,不然就重复上面的过程。多线程

因此咱们应该这样来定位PyCodeObject和pyc文件,咱们说pyc文件实际上是PyCodeObject的一种持久化保存方式。并发

 
python编译器的种类:
要运行代码,就须要Python解释器去执行 python代码文件。
  CPython(官方默认的、C语言开发)、IPython(也是C写的,交互性强)、PyPy(JIT技术,动态编译,可提高执行速度)、Jython(在Java平台,可直接译成Java字节码执行)、IronPython(在微软.Net平台,可直译成 .NET执行)
 

Python的优缺点

主要优势:框架

  1. Python的定位是“优雅”、“明确”、“简单”,因此Python程序看上去老是简单易懂,初学者学Python,不但入门容易,并且未来深刻下去,能够编写那些很是很是复杂的程序。
  2. 开发效率很是高,Python有很是强大的第三方库,基本上你想经过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大下降开发周期,避免重复造轮子。
  3. 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
  4. 可移植性————因为它的开源本质,Python已经被移植在许多平台上(通过改动使它可以工 做在不一样平台上)。若是你当心地避免使用依赖于系统的特性,那么你的全部Python程序无需修改就几乎能够在市场上全部的系统平台上运行
  5. 可扩展性————若是你须要你的一段关键代码运行得更快或者但愿某些算法不公开,你能够把你的部分程序用C或C++编写,而后在你的Python程序中使用它们。
  6. 可嵌入性————你能够把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

主要缺点:

  1. 速度慢,Python 的运行速度相比C语言确实慢不少,跟JAVA相比也要慢一些,所以这也是不少所谓的大牛不屑于使用Python的主要缘由,但其实这里所指的运行速度慢在大多数状况下用户是没法直接感知到的,必须借助测试工具才能体现出来,好比你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是很是夸张了,可是你是没法直接经过肉眼感知的,由于一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数状况下Python已经彻底能够知足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种状况下,固然仍是建议你用C去实现的。
  2. 代码不能加密,由于PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,若是你的项目要求源代码必须是加密的,那你一开始就不该该用Python来去实现。
  3. 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任什么时候刻仅有一个线程在执行,Python的线程是操做系统的原生线程。在Linux上为pthread,在Windows上为Win thread,彻底由操做系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即便在多核CPU平台上,因为GIL的存在,因此禁止多线程的并行执行。关于这个问题的折衷解决方法,咱们在之后线程和进程章节里再进行详细探讨。

以己之长,较他之短。显然是毫无心义的。没有最好的,只有最适合的。

 
 python3较之python2的变更
交互采用input()
输出变为函数类型:print()
字符集改成unicode
某些库更名了:
 

Old Name

New Name

_winreg

winreg

ConfigParser

configparser

copy_reg

copyreg

Queue

queue

SocketServer

socketserver

markupbase

_markupbase

repr

reprlib

test.test_support

test.support

安装注意事项:

  安装完后必定要作环境变量,多版本时复制一个 python.exe 改成 python3.exe 来区分。
 
入门第一代码:输出“hello world”,(直接在解释器执行或写入文件指定解释器运行文件均可以)
  print(“hello world”)
#注:在Linux中想要像执行shell脚本同样执行python程序,需在python文件第一行声明运行的解释器 #!/usr/bin/env python。并给文件添加可执行权限。
         代码中出现中文要在开头处添加 #_*_coding:utf-8_*_
 
变量
 
变量:可变的量值,在主代码前定义。
  假设在写程序时有多处须要定义同一个值,若直接写值,之后在须要修改的时候须要挨个修改,效率低。若使用变量,在须要一样值的多处都使用变量,若须要修改值时直接改变量值便可。
定义变量: name = value
变量名的定义范围:只能是字母、数字、下划线的任意组合,第一个字符不能是数字,不能是python内置的关键字
#注:python内置的关键字['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
命名误区:不要用中文拼音、不要过长、意义要明确。
定义变量要注意的: ID、value、type
#注:==比对的是value(值),is只比较的是内存地址(ID)
   解释器中变量的value相同,但value中出现特殊字符(如空格,逗号等) 时会形成id不一样。
 
常量 
常量:python语法中没有定义,但程序员约定俗成用变量名所有大写表明常量。
交互式获取值:input(‘instruction’)
  不论用户输入何种类型值都会存成字符串,获取到的值必定是str类型
python2中的input()用户输入什么类型值,就存成什么类型。raw_input()等价python3 input(),
 
注释
为何要注释:由于遗忘是一个必然的过程,为了增长代码的可读性,也方便别人理解。
分单行和多行注释, 单行注释用#,多行注释能够用三对双引号""" """
只须要在本身以为重要或很差理解的部分加注释便可,用中英文均可,必定不能是拼音
在Linux中运行的python,必须定义的文件头
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
数据与数据类型
数据:即变量的值。变量的是用来反映/保持状态以及状态变化的,毫无疑问针对不一样的状态就应该用不一样类型的数据去标识
数字类型: 定义时不用引号直接输入,或用函数把数据转为数字类型
  int整形--int()   float浮点数--float()   complex复数型   long长整型(python2才有)
字符串类型:定义时需把数据用引号引发来,或用函数把数据转为字符串类型
  str()
#注意1:字符串相加的效率不高 字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,至关字符串1与字符串3的空间被复制了一次,
#注意2:只能字符串加字符串,不能字符串加其余类型
 
列表:数据定义在 [] 内,或者使用list()函数把数据转换为列表。存在多个元素时用逗号分隔开,每一个元素能够是任意类型,其中元素是可变的
能够相互嵌套使用,取值时也能够多层取值

经常使用操做:

  • 索引
  • 切片
  • 追加
  • 删除
  • 长度
  • 切片
  • 循环
  • 包含
 
元组:数据定义在 () 内,或者使用tuple()将列表转换为元组。若只有一个元素时要在后面加逗号,存在多个元素时用逗号隔开。每一个元素能够是任意类型,定义完成后元素的指向是永远不变的(例如,元组中包含list,但list的值能够改变)
能够相互嵌套使用,取值时也能够多层取值
 
字典:数据定义在 {} 内,或者使用dict()函数把数据转换为字典。用key=value形式表示一个元素,硬性规定了映射关系。用逗号(,)隔开。value能够是任意类型。
可多层嵌套使用,取值时亦可多层取值。

经常使用操做:

  • 索引
  • 新增
  • 删除
  • 键、值、键值对
  • 循环
  • 长度
 
集合
 
布尔:逻辑判断,返回TRUE或FALSE。 通常在作比较时使用。亦可判断数据是否为空或0(0,'',[] 等值均为FALSE,数据非空非0即为TRUE。)
 
#注1.可变类型:在id不变的状况下,value能够变,则称为可变类型,如列表,字典
#注2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着建立了新的内存空间) 
 
格式化输出: 把用户输入或上层返回的值,穿插到固定格式的字符串中。
使用占位符,如:%s 字符串占位、%d 数字占位
例:
name=input('your name: ')
print('My name is %s',%name)
 

基本运算符

假设a=10 , b=20

计算

 

比较

 

赋值

 

逻辑

 

 

优先级

 

 

条件判断语句: if为语句开始,elif为屡次不一样条件判断,else为不知足上面的条件则执行。可多层嵌套

if condition :

  exec

elif condition :

  exec

else :

  exec

迭代式循环语句:for。每循环一次从数据中按顺序取出一个值,直到数据中全部值均被使用。可多层嵌套、

for i in range(0,9) :

  exec

条件循环语句:while。 条件为真则循环,条件为假则中止循环。若条件定义为True则成死循环。可多层嵌套。

while condition :

  exec

 while的条件可使用布尔值变量判断循环是否成立。在多个while嵌套须要一次退出时,能够经过修改该变量的布尔值一次控制多个循环退出。

while ...else 语句,while 后面的else 做用是当while 循环正常执行完,中间没有被break 停止的话,就会执行else后面的语句

break与continue (仅适用于循环语句)

break 执行后会跳出此循环。外层循环不会受影响。

continue  执行后跳过此循环内后面的代码,直接开始下一次循环。

 

练手代码:

'1 使用while循环输出1 2 3 4 5 6     8 9 10'
number=1
while number <= 10:
if number == 7 :
number+=1
continue
print(number)
number+=1

while number <= 10 :
if number != 7 :
print(number)
number+=1
'2. 求1-100的全部数的和'
number2 = 0
total2 = 0
while number2 <= 100 :
total += number2
number2+=1
print(total)
装X方法:print(sum(range(101)))
'3. 输出 1-100 内的全部奇数'
number3 = 0
total3 = 0
while number3 <= 100 :
if number3 % 2 == 1:
total3 += number3
number3+=1
装X方法:print(sum(range(1,101,2)))
'4. 输出 1-100 内的全部偶数'
number4 = 0
total4 = 0
while number4 <= 100 :
if number4 % 2 == 0:
total4 += number4
number4+=1
print(total4)
装X方法:print(sum(range(0,101,2)))
'5. 求1-2+3-4+5 ... 99的全部数的和'
number5 = 0
odd = 0
even = 0
while number5 <= 99 :
if number5 % 2 == 1:
odd += number5
else :
even += number5
number5+=1
result = odd - even
print(result)
装X方法:print(sum(range(1,100,2))-sum(range(0,100,2)))
'6. 用户登录(三次机会重试)'
user = 'jinyudong'
password = '666666'
count = 0
while count < 3 :
username = input('user->:')
passwd = input('passwd->:')
if username == user and password == passwd :
print('login OK !')
break
count+=1
print('login count is %d' %count)
else:
print('login error!')
'7:猜数字游戏'
import random
secret = random.randint(1,99)
# print(secret)
guess = 0
count = 0
print("AHOY! i'm the Dread Pirate Roberts, and I have a secret!")
print("It is a number from 1 to 99. I'll give you 6 tries.")
while count < 6:
guess = int(input( "What's yer guess?"))
if guess < secret:
print("Too low,ye scurvy dog!")
elif guess > secret:
print("Too high,landlubber!")
else :
print("Avast! Ye got it! Found my secret,ye did!")
break
count += 1
else:
print("No more guesses! Better luck next time,matey!")
print("The secret number was",secret)
'8:猜年龄游戏升级'import randomsecret = random.randint(1,99)guess = 0count = 0print("AHOY! i'm the Dread Pirate Roberts, and I have a secret!")print("It is a number from 1 to 99. I'll give you 6 tries.")while  count < 6:    guess = int(input( "What's yer guess?"))    if guess < secret:        print("Too low,ye scurvy dog!")    elif guess > secret:        print("Too high,landlubber!")    else :        print("Avast! Ye got it! Found my secret,ye did!")        break    if count == 5 :        print("Max error number,continue place 'y',exit place 'n'")        YorN = input('-->:')        if YorN == 'y':            count=0            continue        else:            exit()    count += 1else:        print("No more guesses! Better luck next time,matey!")        print("The secret number was",secret)
相关文章
相关标签/搜索