Python介绍&表达式Day01

Python介绍

python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。  

最新的TIOBE排行榜,Python赶超PHP占据第五, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。注视:上述重点字体表示该公司主要使用Python语言开发

为什么是Python而不是其他语言?

  • C 和 Python、Java、C#等

  • C语言:代码编译得到机器码,机器码在处理器上直接执行,每一条指令控制CPU工作

  • 其他语言:代码编译得到字节码,虚拟机执行字节码并转换成机器码再后在处理器上执行

  • Python C  Python这门语言是由C开发而来

  • 对于使用:Python的类库齐全并且使用简洁,如果要实现同样的功能,Python 10行代码可以解决,C可能就需要100行甚至更多.

  • 对于速度:Python的运行速度相较与C,绝逼是慢了

  • Python JavaC#

  • 对于使用:Linux原装Python,其他语言没有;以上几门语言都有非常丰富的类库支持

  • 对于速度:Python在速度上可能稍显逊色

所以,Python和其他语言没有什么本质区别,其他区别在于:擅长某领域、人才丰富、先入为主。

 

Python是一门什么样的语言

编译和解释的区别是什么?  

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式) 

编译型vs解释型

编译型


 

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。 缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

 

解释型


 

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

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

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左右。

  2. 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的。

  3. 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。

 Python安装

windows

1、下载安装包
    https://www.python.org/downloads/
2、安装
    默认安装路径:C:\python27
3、配置环境变量
    【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
    如:原来的值;C:\python3.5,切记前面有分号

linux、Mac

无需安装,原装Python环境2.7
  
ps:安装最新到python官网下载安装

 

第一个python程序

在任意目录下创建 hello.py 文件,内容如下:
print "hello,world"
执行 hello.py 文件,即: python /home/dev/hello.py


上一步中执行 python /home/dev/hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。

如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需要在 hello.py 文件的头部指定解释器,如下:

#!/usr/bin/env python
  
print "hello,world"
如此一来,执行: ./hello.py 即可。

ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py

 

变量 

量定义的规则:

  • 变量名只能是 字母、数字或下划线的任意组合
  • 变量名的第一个字符不能是数字
  • 以下关键字不能声明为变量名
  • ['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']
  • python中定义变量的时候字符串都用用引号括起来,单引号和双引号没有区别.
  • 变量的作用:说的简单点,就是存东西,供给后面使用
    1 name = "Baylor_Chen"
    2 
    3 name2 = name   # 变量赋值
    4 
    5 print(name,name2)
    6 
    7 name = 'NiuHanyang'
    8 
    9 print("What is the value of name2 now?")

 

模块初识 

Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:

Python内部提供的模块

业内开源的模块

程序员自己开发的模块

Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数

 1 import sys
 2 
 3 print sys.argv
 4 
 5 
 6 import os
 7  
 8 os.system("df -h") #调用系统命令
 9 
10 import  time
11 print(time.strftime('%Y-%m-%d',time.localtime(time.time())))
12 
13 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

 

注释

  当行注视:# 被注释内容

  多行注释:""" 被注释内容 """

 

 输入\输出

1 name = input("What is your name?")
2 print("Hello " + name )

输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法

1 import getpass
2   
3 # 将用户输入的内容赋值给 name 变量
4 pwd = getpass.getpass("请输入密码:")
5   
6 # 打印输入的内容
7 print(pwd)  #python自带的ide终端不支持隐藏回显的。用系统的终端

 

表达式

  • if.....else...

需求一:用户验证登录

 1 # 提示输入用户名和密码
 2 
 3 # 验证用户名和密码
 4 #     如果错误,则输出用户名或密码错误
 5 #     如果成功,则输出 欢迎,XXX!
 6 
 7 
 8 import getpass
 9 
10 name = input('请输入用户名:')
11 pwd = getpass.getpass('请输入密码:')
12 
13 if name == "Baylor" and pwd == "besttest":
14     print( "欢迎,Baylor!")
15 else:
16     print("用户名和密码错误")
需求二:根据用户输入内容打印内容
 1 temp = 'houzi'
 2 
 3 name = input('请输入用户名:')
 4 
 5 if name == "niuhanyang":
 6     print("是一个男的")
 7 elif name == temp:
 8     print("强调还是一个男的")
 9 elif name == "xiaoli" or name == "xiaomei":
10     print("是一个女的")
11 else:
12     print("不确定性别")
  • while 循环

  • while循环之前,先判断一次,如果满足条件的话,在循环
while 条件:

# 循环体

# 如果条件为真,那么循环体则执行
# 如果条件为假,那么循环体不执行
count = 0
while True:
    print("山路崎岖,但毕竟是向上延伸的...",count)
    count +=1
    if count == 20:
        print("都是扯淡。。山路上长满了带刺的草,你去啊!!!")
        break  #break用于退出所有循环
一种循环叫死循环,一经触发,除非电脑关机!

count = 0
while True:
    print("你电脑还能坚持吗????...",count)
    count +=1
  • for循环

  • for循环的时候必须有一个可迭代的对象,才能循环
1 names = ['Baylor', 'niuhanyang', 'houzi']
2 for name in names:
3     if name == 'niuhanyang':
4         continue  # ontinue用于退出当前循环,继续下一次循环
5     print('hello  ' + name)
6 
7 else: # for也有个else,不过这个一般没人写它,意思是如果正常循环完了去做什么
8     print('over')
 1 小于5的循环次数就不走了,直接跳入下一次循环
 2 
 3 for i in range(10):
 4     if i<5:
 5         continue #不往下走了,直接进入下一次loop
 6     print("loop:", i )
 7 
 8 大于5的循环次数就不走了,直接退出
 9 
10 for i in range(10):
11     if i>5:
12         break #不往下走了,直接跳出整个loop
13     print("loop:", i )

 

格式化输出 

 1 name = input('请输入你的名字:')
 2 print('你的名字是' + name)  # 使用加号连接
 3 print('你的名字是%s' % name)  # 使用占位符  
 4 print('你的名字是{your_name}'.format(your_name=name))  # 使用format格式化输出,{}里面的名字可以随便写但是
 5 #要和后面的format中的名字保持一致,然后再把你前面定义的变量写到等号后面就可以了。
 6 age = 18
 7 print('我的名字是%s,年龄是%d岁.' %(name, age))  # 这种是里面有多个格式化内容的,前面那个是字符串,后面这
 8 #个是整数,多个变量的后面跟值的时候必须要加上括号
 9 
10 PS: 字符串是 %s;整数 %d;浮点数 %f

 

练习 

 1 #随机一个数,猜大小,猜对结束
 2 import random
 3 str = random.randint(1,100) #随机一个1到100的数字
 4 print(str)
 5 while True:
 6     num = int(input('输入一个数字'))
 7     if num >1 and num <= 100:
 8         if num == str:
 9             print('猜对了。。。。')
10         elif num < str:
11             print('数字小了')
12         else:
13             print('数字大了')
14     else:
15         print('输入的数字不符合')

 

资料补充

 pyc 文件

  • 执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。
  • ps:代码经过编译可以产生字节码;字节码通过反编译也可以得到代码。

1. Python是一门解释型语言?

我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

  

2. 解释型语言和编译型语言 

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

 

3. Python到底是什么 

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

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

熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:

javac hello.java

java hello

 

只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。

4. 简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

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

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

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

 

类型转换

int(x)         x转换为一个整数

long(x)      x转换为一个长整数

float(x)                  x转换到一个浮点数
complex(real)         创建一个复数
str(x)                     将对象 x 转换为字符串
repr(x)                   将对象 x 转换为表达式字符串
eval(str)                 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s)                  将序列 s 转换为一个元组
list(s)                     将序列 s 转换为一个列表
chr(x)                     将一个整数转换为一个字符
unichr(x)                 将一个整数转换为Unicode字符
ord(x)                     将一个字符转换为它的整数值
hex(x)                     将一个整数转换为一个十六进制字符串
oct(x)                     将一个整数转换为一个八进制字符串
 

 

posted on 2018-04-21 10:42  Baylor_Chen  阅读(255)  评论(1编辑  收藏  举报

导航