本节内容
1、python介绍
2、发展史
3、python2和python3
4、安装
5、简单程序,hello world程序
6、变量
7、用户输入
8、模块初识
9、.pyc是什么?
10、数据类型初识
11、数据运算
12、表达式if...else语句
13、表达式for循环
14、break and continue
15、表达式while 循环
一、python介绍
python 的创始人为吉多.范罗苏姆。吉多.范罗苏姆为打发1989年年圣诞节而开发的一个小的脚本解释程序。是ABC语言的继承。
python 目前世界使用率排行为第五。python崇尚优美、清晰、简单,是一个优秀并且广泛的语言。而且使用率也逐年上升。python目前可以应用于众多的领域,如:数据分析、组件构成、网络服务、图像处理、数值计算和科学计算等众多领域。目前几乎所有大中型的互联网公司都在使用python。如:YouTube、Dropbox、Quora、知乎、Google、Yahoo、百度、腾讯、汽车之家、美团等。
主要应用领域:
云计算:云计算中最火的语言,典型应用Openstack。
WEB开发:python拥有众多优秀的WEB框架,众多的大型网站都是用python开发,YouTube、豆瓣等,典型的WEB框架有Diango
科学运算、人工智能:典型的NumPYthon、SciPY等。
系统运维:运维人员必备语言。
金融:量化交易,金融分析、在金融工程领域,Python不但在用,而且用的最多,而且重要性逐年提高。原因:作为动态语言,python语言结果清晰简单,库丰富,成熟稳定。科学计算和统计分析都很牛逼,科学计算和统计分析也很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测。
图形GUI:
1、python是一门什么样子的语言?
编程语言从编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言这几个方面分析。
1.1 编译器和解释器
编译器:把源程序每条语句都编译成机器语言,并且保存成二进制文件。这样计算机可以直接使用机器语言来运行程序。速度很快。
解释器:只有在执行程序的时候,才会一条一条的翻译成机器语言来给计算机执行。速度不软编译后的程序快。这是因为计算机不能直接认识并且执行我们写的语句。它只能识别机器语言(二进制)。
1.2 低级语言与高级语言
低级语言:最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译。
高级语言:从人类的逻辑思维角度出发的计算机语言,抽象成都大大提高。需要编译成特定机器上的代码后才能执行。
1.3 编译和解释
编译:编译是将源程序翻译成可执行的木编代码,翻译与执行时分开的。
解释:是对源程序解释和翻译一次性完成。不生产可存储的目标代码。
区别:对解释执行而言,程序运行时控制权在解释器而不再用户程序。对编译执行而言,程序运行时的控制权在用户程序。
解释器具有良好的可移植性,和动态性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
1.4 python优缺点
优点:
1、python定位是优雅、明确、简单,所以python看上去容易学,简单易懂。
2、开发效率高。python有非常强大的第三方库,基本上可以实现你想实现的任何功能,python官方库里面有相应的模块进行支持,直接下载调用后,在基础库的基础上在进行开发,大大降低了开发周期,避免重复工作。
3、高级语言,当用python的时候,不需要考虑底层的细节。
4、可移植性,
5、可扩展性,如果你需要你的一段关键代码运行的更快或者希望某些算法不被公开,你可以把部分程序用c或者c++代替。
6、可嵌入性,把python嵌入多种语言当中。
缺点:
1、速度慢。
2、代码不能加密
3、县城不能利用多CPU问题。
1.5 python解释器
python代码是.py结尾,运行时,python解释器去执行.py文件。运行代码时候,要用pyton去执行.py文件。
多种python解释器。
1、Cpython c语言开发,使用最为广泛
2、IPpython 基于Cpython开发。
3、pypy 速度快,采用JIT技术。对python代码进行动态编译。python未来发展的方向。
4、Jython java平台的python解释器
5、IronPython 运行在。net上面的解释器
1.6 为什么是Python而不是其他语言?
C 和 Python、Java、C#等
C语言: 代码编译得到 机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作
其他语言: 代码编译得到 字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行
Python 和 C Python这门语言是由C开发而来
对于使用:Python的类库齐全并且使用简洁,如果要实现同样的功能,Python 10行代码可以解决,C可能就需要100行甚至更多.
对于速度:Python的运行速度相较与C,绝逼是慢了
Python 和 Java、C#等
对于使用:Linux原装Python,其他语言没有;以上几门语言都有非常丰富的类库支持
对于速度:Python在速度上可能稍显逊色
所以,Python和其他语言没有什么本质区别,其他区别在于:擅长某领域、人才丰富、先入为主。
二、发展史
1、1989年诞生,目前最新版本3.5,老版本2.7兼容2.0版本和3.5版本,2.0版本2020年后不再维护。
三、python2和python3
选python。兼容2.7
2和3的区别
有很多的优化,如少了字符编码的烦恼,库更改了名字等。
四、python的安装
Windows安装
1
、下载安装包
https:
/
/
www.python.org
/
downloads
/
2
、安装
默认安装路径:C:\python27
3
、配置环境变量
【右键计算机】
-
-
》【属性】
-
-
》【高级系统设置】
-
-
》【高级】
-
-
》【环境变量】
-
-
》【在第二个内容框中找到 变量名为Path 的一行,双击】
-
-
> 【Python安装目录追加到变值值中,用 ; 分割】
如:原来的值;C:\python27,切记前面有分号
无需安装,原装Python环境
ps:如果自带
2.6
,请更新至
2.7,同时需要安装3.5
>>> print ("hello world")
hello world
>>>
指定解释器:执行上hello world.py的时候,明确指出hello.py脚本由python解释器来执行。
如果想要类似于执行shell脚本一样执行python脚本,则需要在hello.py头部指定解释器,如下。
!/usr/bin/env python
print
"hello,world"
六、变量、字符编码
声明变量
#_*_coding:utf-8_*_
name
=
"Alex Li"
上述代码声明了一个变量,变量名为: name,变量name的值为:"Alex Li"
变量定义的规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
['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']
变量的赋值
name
=
"Alex Li
name2
=
name
print
(name,name2)
name
=
"Jack"
print
(
"What is the value of name2 now?"
)
七、字符编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
ASCII无法识别中文,在python中告诉解释器,使用什么编码来执行源代码。即:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
注释:
当行注视:# 被注释内容
多行注释:""" 被注释内容 """
八、用户输入
#!/usr/bin/env python
#_*_coding:utf-8_*_
#name = raw_input("What is your name?") #only on python 2.x
name
=
input
(
"What is your name?"
)
print
(
"Hello "
+
name )
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
getpass
# 将用户输入的内容赋值给 name 变量
pwd
=
getpass.getpass(
"请输入密码:"
)
# 打印输入的内容
print
(pwd)
九、模块初识
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的。
sys
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys
print (sys.argv)
#输出 $ python test.py helo world [ 'test.py' , 'helo' , 'world' ] #把执行脚本时传递的参数获取到了
|
os
1
2
3
4
5
6
|
#!/usr/bin/env python # -*- coding: utf-8 -*- import os
os.system( "df -h" ) #调用系统命令
|
完全结合一下
1
2
3
|
import os,sys
os.system(''.join(sys.argv[ 1 :])) #把用户的输入的参数当作一条命令交给os.system来执行
|
自己写个模块
python tab补全模块
自己写个模块
python tab补全模块
1 import sys
2 import readline
3 import rlcompleter
4
5 if sys.platform == 'darwin' and sys.version_info[0] == 2:
6 readline.parse_and_bind("bind ^I rl_complete")
7 else:
8 readline.parse_and_bind("tab: complete") # linux and python3 on mac
1 #!/usr/bin/env python
2 # python startup file
3 import sys
4 import readline
5 import rlcompleter
6 import atexit
7 import os
8 # tab completion
9 readline.parse_and_bind('tab: complete')
10 # history file
11 histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
12 try:
13 readline.read_history_file(histfile)
14 except IOError:
15 pass
16 atexit.register(readline.write_history_file, histfile)
17 del os, histfile, readline, rlcompleter
写完保存后就可以使用了
1
2
3
4
5
|
localhost:~ jieli$ python Python 2.7 . 10 (default, Oct 23 2015 , 18 : 05 : 06 )
[GCC 4.2 . 1 Compatible Apple LLVM 7.0 . 0 (clang - 700.0 . 59.5 )] on darwin
Type "help" , "copyright" , "credits" or "license" for more information.
>>> import tab
|
你会发现,上面自己写的tab.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里啦,基本一般都放在一个叫 Python/2.7/site-packages 目录下,这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表。
十、.pyc是个什么鬼?
Python是一门解释性语言,pyc文件其实是PyCodeObject的一种持久化保存方式。
十一、数据类型初识
1、数字
数字分为int,long,float
2、布尔值
真或者假
1或者0
3、字符串
“hello world”
字符串是 %s;整数 %d;浮点数%f
- 移除空白
- 分割
- 长度
- 索引
- 切片
1
2
3
|
name_list = [ 'alex' , 'seven' , 'eric' ]
或 name_list = list ([ 'alex' , 'seven' , 'eric' ])
|
基本操作:
- 索引
- 切片
- 追加
- 删除
- 长度
- 切片
- 循环
- 包含
1
2
3
|
ages = ( 11 , 22 , 33 , 44 , 55 )
或 ages = tuple (( 11 , 22 , 33 , 44 , 55 ))
|
1
2
3
|
person = { "name" : "mr.wu" , 'age' : 18 }
或 person = dict ({ "name" : "mr.wu" , 'age' : 18 })
|
常用操作:
- 索引
- 新增
- 删除
- 键、值、键值对
- 循环
- 长度
十二、数据运算
算数运算:
比较运算:
赋值运算:
逻辑运算:
成员运算:
身份运算:
位运算:
运算符优先级:
十三、表达式if ... else
场景一、用户登陆验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 提示输入用户名和密码 # 验证用户名和密码 # 如果错误,则输出用户名或密码错误 # 如果成功,则输出 欢迎,XXX! #!/usr/bin/env python # -*- coding: encoding -*- import getpass
name = raw_input ( '请输入用户名:' )
pwd = getpass.getpass( '请输入密码:' )
if name = = "alex" and pwd = = "cmd" :
print ( "欢迎,alex!" )
else :
print ( "用户名和密码错误" )
|
场景二、猜年龄游戏
在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/usr/bin/env python # -*- coding: utf-8 -*- my_age = 28
user_input = int ( input ( "input your guess num:" ))
if user_input = = my_age:
print ( "Congratulations, you got it !" )
elif user_input < my_age:
print ( "Oops,think bigger!" )
else :
print ( "think smaller!" )
|
十四、表达式for loop
最简单的循环10次
1
2
3
4
5
6
|
#_*_coding:utf-8_*_ __author__ = 'Alex Li'
for i in range ( 10 ):
print ( "loop:" , i )
|
输出:
1
2
3
4
5
6
7
8
9
10
|
loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
loop: 5
loop: 6
loop: 7
loop: 8
loop: 9
|
需求一:还是上面的程序,但是遇到小于5的循环次数就不走了,直接跳入下一次循环
1
2
3
4
|
for i in range ( 10 ):
if i< 5 :
continue #不往下走了,直接进入下一次loop
print ( "loop:" , i )
|
需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出
1
2
3
4
|
for i in range ( 10 ):
if i> 5 :
break #不往下走了,直接跳出整个loop
print ( "loop:" , i )
|
十五、while loop
有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。
海枯石烂代码
1
2
3
4
5
|
count = 0
while True :
print ( "你是风儿我是沙,缠缠绵绵到天涯..." ,count)
count + = 1
|
其实除了时间,没有什么是永恒的,死loop还是少写为好
上面的代码循环100次就退出吧
1
2
3
4
5
6
7
8
|
count = 0
while True :
print ( "你是风儿我是沙,缠缠绵绵到天涯..." ,count)
count + = 1
if count = = 100 :
print ( "去你妈的风和沙,你们这些脱了裤子是人,穿上裤子是鬼的臭男人.." )
break
|
回到上面for 循环的例子,如何实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/usr/bin/env python # -*- coding: utf-8 -*- my_age = 28
count = 0
while count < 3 :
user_input = int ( input ( "input your guess num:" ))
if user_input = = my_age:
print ( "Congratulations, you got it !" )
break
elif user_input < my_age:
print ( "Oops,think bigger!" )
else :
print ( "think smaller!" )
count + = 1 #每次loop 计数器+1
else :
print ( "猜这么多次都不对,你个笨蛋." )
|