1、Python介绍
1.1 Python简介
Python,是一种广泛使用的高级编程语言,属于通用型编程语言,由吉多·范罗苏姆(中文名字:龟叔)创造,第一版发布于 1991 年。可以视之为一种改良 (加入一些其他编程语言的优点,如面向对象) 的 LISP。
作为一种解释型语言,Python 的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。
数据来源:https://www.tiobe.com/tiobe-index/
由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可。相比于 C++ 或 Java,Python 让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。
1.2 Python设计哲学与定位
Python的设计哲学是“优雅”、“明确”、“简单”。
Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”,也因此它和拥有明显个人风格的其他语言很不一样。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法。
这些准则被称为“Python格言”。在Python解释器内运行import this可以获得完整的列表。
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
1.3 Python应用范围
Web程序:
Python经常被用于Web开发。比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。使用Python语言编写的Gunicorn作为Web服务器,也能够运行Python语言编写的Web程序。
Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的沟通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可以让程序员轻松地开发和管理复杂的Web程序。
GUI开发:
Python本身包含的Tkinter库能够支持简单的GUI开发。但是越来越多的Python程序员选择wxPython或者PyQt等GUI包来开发跨平台的桌面软件。使用它们开发的桌面软件运行速度快,与用户的桌面环境相契合。通过PyInstaller还能将程序发布为独立的安装程序包。
其他:
YouTube、Google、Yahoo!、NASA都在内部大量地使用Python。OLPC的作业系统Sugar项目的大多数软件都是使用Python编写。
1.4 Python的种类
CPython
Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
Jython
Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
IronPython
Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行(与Jypthon类似)。
PyPy(特殊)
Python实现的Python,将Python的字节码字节再编译成机器码。
RubyPython,Brython ….
注意:本文中都的为Python 3.6.2 版本:https://www.python.org/downloads/release/python-362/
关于Python环境部署可以参考:http://www.runoob.com/python/python-install.html
2、Python的语法
Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。因为Python是动态语言,它不像其他的静态语言如C、Pascal那样需要书写声明语句。
2.1 缩进语法
Python开发者有意让违反了缩进规则的程序不能通过解释,以此来强迫程序员养成良好的编程习惯,也方便所有人查找和阅读。例如:
if age < 21:
print("你不能买酒。")
print("不过你能买口香糖。")
print("这句话处于if语句的外面。")
如果想要类似于执行shell脚本一样执行python脚本,例: ./clsn.py ,那么就需要在 clsn.py文件的头部指定解释器,如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
if age < 21:
print("你不能买酒。")
print("不过你能买口香糖。")
print("这句话处于if语句的外面。")
2.2 变量说明
变量定义的规则:
1、变量名只能是 字母、数字或下划线的任意组合
2、变量名的第一个字符不能是数字
3、以下关键字不能声明为变量名
```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’]
<br />4、变量的定义要具有可描述性。
<a name="5ZZGO"></a>
## 2.3 语句和控制流
| **语句类型** | **说明** |
| :--- | :--- |
| **if语句** | 当条件成立时运行语句块。经常与else, elif(相当于else if)配合使用。 |
| **for语句** | 遍列列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。 |
| **while语句** | 当条件为真时,循环运行语句块。 |
| **try语句** | 与except, finally, else配合使用处理在程序运行中出现的异常情况。 |
| **class语句** | 用于定义类型。 |
| **def语句** | 用于定义函数和类型的方法。 |
| **pass语句** | 表示此行为空,不运行任何操作。 |
| **assert语句** | 用于程序调适阶段时测试运行条件是否满足。 |
| **with语句** | Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加锁,然后在语句块运行结束后释放锁。 |
| **yield语句** | 在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。这个语句变成一个运算符。 |
| **raise语句** | 抛出一个异常。 |
| **import语句** | 导入一个模块或包。常用写法:from module import name, import module as name, from module import name as anothername |
<a name="YcWD4"></a>
## 2.4 程序交互
input进行交互
```python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 将用户输入的内容赋值给 name 变量
name = input("请输入用户名:")
# 打印输入的内容
print(name)
可以让用户输入多个信息,如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name = input("What is your name?")
age = input("How old are you?")
hometown = input("Where is your hometown?")
print("Hello ",name , "your are ", age , "years old, you came from",hometown)
2.5 数据类型与动态类型
Python内置多种数据类型。下面这个列表简要地描述了Python内置数据类型(适用于Python 3.x):
类型 | 描述 | 例子 |
---|---|---|
str | 一个由字符组成的不可更改的有序列。在Python 3.x里,字符串由Unicode字符组成。 | ‘Wikipedia’ “Wikipedia” “””Spanning multiple lines””” |
bytes | 一个由字节组成的不可更改的有序列。 | b’Some ASCII’ b”Some ASCII” |
list | 可以包含多种类型的可改变的有序列 | [4.0, ‘string’, True] |
tuple | 可以包含多种类型的不可改变的有序列 | (4.0, ‘string’, True) |
set, frozenset | 与数学中集合的概念类似。无序的、每个元素唯一。 | {4.0, ‘string’, True} frozenset([4.0, ‘string’, True]) |
dict或map | 一个可改变的由键值对组成的无序列。 | {‘key1’: 1.0, 3: False} |
int | 精度不限的整数 | 42 |
float | 浮点数。精度与系统相关。 | 3.1415927 |
complex | 复数 | 3+2.7j |
bool | 逻辑值。只有两个值:真、假 | True False |
除了各种数据类型,Python语言还用类型来表示函数、模块、类型本身、对象的方法、编译后的Python代码、运行时信息等等。因此,Python具备很强的动态性。
2.6 运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算
算数运算
比较运算
赋值运算
逻辑运算
关于逻辑运算
在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算。
in,not in :
判断子元素是否在原字符串(字典,列表,集合)中:
例如:
print('喜欢' in 'dkfljadklf喜欢hfjdkas')
print('a' in 'bcvd')
print('y' not in 'ofkjdslaf')
3、流程控制语句
3.1 流程控制之—if
假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的。你要判断那条岔路是你真正要走的路,很简单,只需要在程序里预设一些条件判断语句,满足哪个条件,就走哪条岔路。这个过程就叫流程控制。
单分支
if 条件:
满足条件后要执行的代码
双分支
"""
if 条件:
满足条件执行代码
else:
if条件不满足就走这段
"""
MemInfo = 48
if MemInfo > 95 :
print("内存即将用光")
else:
print("没事,放心用!")
多分支
if 条件:
满足条件执行代码
elif 条件:
上面的条件不满足就走这个
elif 条件:
上面的条件不满足就走这个
elif 条件:
上面的条件不满足就走这个
else:
上面所有的条件不满足就走这段
示例:猜猜我的年龄
age_of_clsn = 24
guess = int(input(">>:"))
if guess > age_of_clsn :
print("猜的太大了,往小里试试...")
elif guess < age_of_clsn :
print("猜的太小了,往大里试试...")
else:
print("恭喜你,猜对了...")
3.2 流程控制之—while循环
基本while循环
while 条件:
# 循环体
# 如果条件为真,那么循环体则执行
# 如果条件为假,那么循环体不执行
循环中止语句
如果在循环的过程中,因为某些原因,你不想继续循环了,怎么把它中止掉呢?这就用到break 或 continue 语句
break用于完全结束一个循环,跳出循环体执行循环后面的语句
continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。
示例:
之前猜年龄的代码运行一次使用一次,但稍加修改就能一自运行。
age_of_clsn = 24
while True:
guess = int(input(">>:"))
if guess > age_of_clsn:
print("猜的太大了,往小里试试...")
elif guess < age_of_clsn:
print("猜的太小了,往大里试试...")
else:
print("恭喜你,猜对了...")
break
3.3 格式化输出
现有一练习需求,问用户的姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Alex Li -----------
Name : CLSN
Age : 24
job : Linux Ops
Hobbie: girl
------------- end -----------------
这样的格式如何输出呢?
name = input("Name:")
age = input("Age:")
job = input("Job:")
hobbie = input("Hobbie:")
info = '''
------------ info of %s ----------- #这里的每个%s就是一个占位符,本行的代表 后面拓号里的 name
Name : %s #代表 name
Age : %s #代表 age
job : %s #代表 job
Hobbie: %s #代表 hobbie
------------- end -----------------
''' %(name,name,age,job,hobbie) # 这行的 % 号就是 把前面的字符串 与拓号 后面的 变量 关联起来
print(info)
在格式化输出里面,怎么表示%?
msg = "我是%s,年龄%d,目前工作进度为80%%"%('clsn',24)
print(msg)
4、编码说明
字符 | ASCII | Unicode | utf-8 | GBK |
---|---|---|---|---|
英文 | 1个字节 | 2-4个字节 | 1个字节 | 1个字节 |
中文 | x | 2-4个字节 | 3个字节 | 2个字节 |
其他 | x | 2-4个字节 | 2个字节 | x |
5、参考文献
https://zh.wikipedia.org/wiki/Python http://www.cnblogs.com/jin-xin/articles/7459977.html http://www.cnblogs.com/wang-yc/articles/6419907.html