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,
编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当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执行)
主要优点:
主要缺点:
以己之长,较他之短。显然是毫无意义的。没有最好的,只有最适合的。
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 random
secret = random.randint(1,99)
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
if count == 5 :
print("Max error number,continue place 'y',exit place 'n'")
YorN = input('-->:')
if YorN == 'y':
count=0
continue
else:
exit()
count += 1
else:
print("No more guesses! Better luck next time,matey!")
print("The secret number was",secret)
手机扫一扫
移动阅读更方便
你可能感兴趣的文章