# Python第一节课
Python学习 第一天
1.Python的发展及其概况
1.1Python出生及发展
- 1989,为了度过圣诞假期,Guido开始编写Python语言编译器。Python这个名字来自Guido的喜爱的电视连续剧《蒙蒂蟒蛇的飞行马戏团》。他希望新的语言Python能够满足他在C和Shell之间创建全功能、易学、可扩展的语言的愿景。
- Python发展史
1989年由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年
Granddaddy of Python web frameworks, Zope 1 was released in 1999
Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
Python 2.0 - October 16, 2000,加入了内存回收机制,构成了现在Python语言框架的基础
Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生
Python 2.5 - September 19, 2006
Python 2.6 - October 1, 2008
Python 2.7 - July 3, 2010
Python 3.0 - December 3, 2008
Python 3.1 - June 27, 2009
Python 3.2 - February 20, 2011
Python 3.3 - September 29, 2012
Python 3.4 - March 16, 2014
Python 3.5 - September 13, 2015
1.2Python是什么样的编程语言
-
高级计算机语言:高级语言与低级语言的区别:高级语言大部分不能直接跟硬件打交道,这使得相对来的程序运行速度降低,总之一句话来说那种语言更接近人性化的语言就更高级。
-
动态:动态性语言是指在程序运行期间才给变量指定数据的类型,常见于python和Ruby,而静态类型语言则恰好相反,在写程序代码的时候就要指定变量的类型
-
弱类型:
C语言中,一个变量只能定义为一种类型,如float类型,那么它就只能是float类型而不能在不发生转化的情况下赋予int类型,这就是强制的具体体现。
而python不是,python中的变量可以任意的复制,而没有类型的界限。这就是弱类型 -
编译型:编译型语言是离不开解释程序的,这也导致了解释性语言对于运行时候的速度比价慢,解释型语言只要有解释器,移植起来比较方便,而编译型语言则要对于不同的系统进行编译,是的工作繁琐,且在调试程序的时候比较慢
综上Python时一种编译型,动态弱类型的高级计算机语言。
1.3Python优缺点
Python的优点
1.作为初学python的科班出身的小白,python非常简单,非常适合人类阅读。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。
2.易学。python虽然是用c语言写的,但是它摈弃了c中非常复杂的指针,简化了python的语法。
3.Python是FLOSS(*/开放源码软件)之一。简单地说,你可以*地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的*软件中。Python希望看到一个更加优秀的人创造并经常改进。
4.可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC、Symbian以及Google基于linux开发的Android平台!
5.在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。
6.Python既支持面向过程的函数编程也支持面向对象的抽象编程。在面向过程的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在面向对象的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。
7. 可扩展性和可嵌入性。如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
8.丰富的库。Python标准库确实很庞大。python有可定义的第三方库可以使用。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
9. Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。
10.规范的代码。Python采用强制缩进的方式使得代码具有极佳的可读性。
python语言的缺点:
很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。(对很多用户而言这也不算是限制)
1.运行速度,有速度要求的话,用C++改写关键部分吧。不过对于用户而言,机器上运行速度是可以忽略的。因为用户根本感觉不出来这种速度的差异。
2.既是优点也是缺点,python的开源性是的Python语言不能加密,但是目前国内市场纯粹靠编写软件卖给客户的越来越少,网站和移动应用不需要给客户源代码,所以这个问题就是问题了。国随着时间的推移,很多国内软件公司,尤其是游戏公司,也开始规模使用他。
3. 构架选择太多(没有像C#这样的官方.net构架,也没有像ruby由于历史较短,构架开发的相对集中。Ruby on Rails 构架开发中小型web程序天下无敌)。不过这也从另一个侧面说明,python比较优秀,吸引的人才多,项目也多
1.4Python的种类
- CPython:
当 从Python官方网站下载并安装好Python2.7后,就直接获得了一个官方版本的解释器:Cpython,这个解释器是用C语言开发的,所以叫 CPython,在命名行下运行python,就是启动CPython解释器,CPython是使用最广的Python解释器。 - IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的,好比很多国产浏览器虽然外观不同,但内核其实是调用了IE。 - PyPy
PyPy是另一个Python解释器,它的目标是执行速度,PyPy采用JIT技术,对Python代码进行动态编译,所以可以显著提高Python代码的执行速度。 - Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。 - IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
在Python的解释器中,使用广泛的是CPython,对于Python的编译,除了可以采用以上解释器进行编译外,技术高超的开发者还可以按照自己的需求自行编写Python解释器来执行Python代码,十分的方便!
2.Python基础
2.1两条常用函数语句
- print()函数
print("Hello,Python")
print("to be,or not to be,it's a question")
print("to be,or not to be,it's up to you ")
print("Make it")
print("面朝大海,春暖花开")
打印语句
print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
- input()函数
作用:从外部获取值
用法:Help on built-in function input in module builtins:
input(prompt=None, /)
Read a string from standard input. The trailing newline is stripped.The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
返回值为字符串
a=input(‘please input something:’)
please input something:i’m icon man
a
“i’m icon man”
type(a)
<class ‘str’>
2.2注释
- 单行注释:
# 这是单行注释
多行注释:
三个单引号或者三个双引号
'''
多行注释
'''
demo:
print("Hello,Python") #向Python致敬
'''
下面是一些东西
'''
print("to be,or not to be,it's a question")
print("to be,or not to be,it's up to you ")
print("Make it")
print("面朝大海,春暖花开")
2.3 运行python程序的三种方式
-
1.解释器环境运行
-
2.脚本运行
-
3.IDE
-
pycharm
-
sublime
-
VS Code
-
Atom
-
2.4 Python中的常见数据类型
-
数据的概念:
-
Python中数据类型(常见):
- 数字(number)
- 整型 int
- 浮点型 float
- 布尔型 bool
- 复数 complex
- 字符串(string)
- 数字(number)
-
列表(list)
-
元组(tuple)
-
字典(dict)
-
集合(set)
-
2.5 变量和常量
变量:没有固定值,能够改变的量
-
概念:
-
程序可操作性的存储区的名称;
-
程序运行时存储区中能够改变的数据;
-
每个变量都有自己特定的数据类型
-
-
作用:
-
将数据存储到内存
-
定义:
-
命名
- 规则:
- 必须是字母,下划线,数字组合
- 不能数字开头
- 不可以是Python中的关键字
- 注意:见名知意,区分大小写,在Python中单双下划线开头的变量有特殊用途,一般不推荐使用
- 规则:
-
定义:
val_name = 初始值
拓展:
关键字的查看:
>>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', ' def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'retu rn', 'try', 'while', 'with', 'yield']
以下变量那些是正确的:_city
-
类型测试type()
type(val_name)
-
内存地址id()
id(val_name)
-
常量:不变化的量
通常用大写,如
PI=3.14159
>>> g=1,2,3 #默认逗号为创建元组 >>> x,y,z=g >>> g (1, 2, 3) >>> type(g) <class 'tuple'> >>> type(x) <class 'int'> >>>
互换两元素的值
>>> a=123
>>> b=234
>>> a=a^b
>>> b=a^b
>>> a=a^b
>>> a
234
>>> b
123
>>> x=123
>>> y=234
>>> x,y=y,x
>>> x
234
>>> y
123
2.6数字
-
整型(int)
-
32bit,取值范围
-
64bit,取值范围
以前Python区分短整型和长整型,现在不区分
-
-
浮点型(float)
- 带有小数点的数字
-
布尔型(bool)
- ture
- false
-
复数型(complex)
- 实部(complex.real)
- 虚部(complex.iamg)
- 共轭(complex.conjugate())
2.7常见数学函数
函数名 | 描述 |
---|---|
abs(x) | 绝对值 |
pow(x,y) | |
round(x,[n]) | 四舍五入返回n位小数的值 |
math.exp(x) | 返回e的x次幂 |
math.fabs(x) | 返回x的浮点型绝对值 |
math.ceil(x) | 返回数字的’上入整数’ |
math.floor(x) | 返回数字的’下舍整数’ |
math.log(x,y) | 返回以y为底x为基的对数的值 |
math.modf(x) | 返回浮点数的小数部分和整数部分 |
math.sqrt(X) | 返回x的平方根 |
返回最大值 | |
返回最小值 |
2.8表达式与运算符
-
表达式
- 由变量,常量和运算符组成的式子
-
运算符
- 算数
- 比较
- 逻辑
- 赋值
- 成员
- 身份
- 位
Python算数运算符
运算符 | 描述 | 实例 |
---|---|---|
+ | 相加/拼接 | a+b |
- | 相减/求差集 | a-b |
* | 相乘/重复 | a *b |
/ | 相除 | a/b |
** | 幂运算 | a **b |
% | 取余数 | a%b |
// | 取整数 | a//b |
拓展
divmod(a,b) 返回a除以b的商和余数(以元组形式)
>>> divmod(33,5) (6, 3)
Python比较运算符
运算符 | 描述 |
---|---|
> | 判断大于 |
< | 判断小于 |
== | 判断等于 |
>= | 判断大于等于 |
<= | 判断小于等于 |
!= | 判断不等于 |
=== | 判断全等 |
Python赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | a=b将b的值赋给a |
+= | 加法赋值运算符 | c+=a等效于c=c+a |
-= | 减法赋值运算符 | c-=a等效于c=c-a |
/= | 除法赋值运算符 | c/=a等效于c=c/a |
*= | 乘法赋值运算符 | c*=a等效于c=c*a |
**= | 除法赋值运算符 | c ** =a等效于c=c ** a |
//= | 除法赋值运算符 | c//=a等效于c=c//a |
Python的位运算符
按位运算是把数字看做二进制来计算,常见的位运算符如下:
运算符 | 描述 |
---|---|
& | 按位与,全为1才为1 |
| | 按位或,有一个为1就为1 |
^ | 按位亦或 |
~ | 按位取反,~a其值为-x-1 |
<< | 左移运算符 |
>> | 右移运算符 |
a=15 —>0000 1111
b=30 —>0001 1110
a&b—>0000 1110=14
a|b—>0001 1111=31
a^b—>0001 0001=17
a>>2—>0000 0011=3
Python的成员运算符
测试是否包含某个成员,一般测试字符串,列表,元组
运算符 | 描述 |
---|---|
in | 如果在指定的序列返回Yure,否则返回False |
not in | 如果在指定的序列中没有找到返回值返回True,否则返回False |
demo:
>>> s='qwer'
>>> 'q' in s
True
>>> 'e' not in s
False
>>> p=list(s)
>>> p
['q', 'w', 'e', 'r']
>>> 'p' in p
False
Python的身份运算符
运算符 | 描述 |
---|---|
is | is时判断两个标识符是不是应用自一个对象 |
is not | is not 是判断 两个标识符是不是应用自不同对象 |
demo:
>>> a='zx'
>>> b='xc'
>>> a is b #类似判断id(a)==id(b)
False
>>> b='zx'
>>> a is b
True
>>> id(a)
41944488
>>> id(b)
41944488
>>> b='xc'
>>> id(b)
41938992
Python中的逻辑运算符
- and 同时为真 返回第二个值
- or
- not
2.9数据类型的强制转换
强转类型 | 描述 |
---|---|
int(x,[base]) | 将x强制转换为整型,如果x为字符串就需要指定基数 |
float(x,) | 将x强制转换为浮点型 |
complex(x) | 将x强制转换为复数型 |
str(x) | 将x强制转换为字符串型 |
repe(x) | 将x强制转换为表达式字符串型 |
list(x) | 将x强制转换为列表型 |
tuple(x) | 将x强制转换为元组型 |
dict(x) | 将x强制转换为字典型 |
set(x) | 将x强制转换为集合型 |
chr(x) | 将整数转换为字符 chr(65)—>‘A’ |
ord(x) | 将字符转换为数值 |
bin(x) | 转换为2进制 |
oct(x) | 转换为8进制 |
hex(x) | 转换为16进制 |
>>> a='123'
>>> int(a)
123
>>> int(a,8) #判定123为八进制数进行十进制转换
83
>>> int(a,16)#判定16为八进制数进行十进制转换
291
>>>
2.10随机函数
导入模块
import random
random的常见功能
-
random.random():用来生成一个[0,1)的随机浮点数
import random for i in range(100): a=random.random() print(a,end='')
-
random.uniform(a,b):用来生成指定范围内的随机浮点数
import random for i in range(100): a=random.uniform(1,2) print(a,end='')
-
random.randint(a,b):生成[a,b]之间的整数
import random for i in range(100): a=random.randint(1,2) print(a,end='')
-
random.randrange([start],stop,[step]):从指定范围内按指定基数递增或递减的集合中随机取出一个值
import random
for i in range(100):
a=random.randrange(1,6,0.2)
print(a,end='')
-
random.choice(sequence):从序列中随机获取一个元素,字典,元组,字符串皆可
import random x=range(1,21,1) for i in range(100): a=random.choice(x) print(a,end='')
-
random.shuffle(x,[random]):用来将一个列表中的元素打乱(重新排列)
import random li=['a','b','c','d'] for i in range(100): a=random.shuffl(li) print(li,end='')
-
random.sample(sequence,k):用来从指定序列中获取指定长度的序列并重新排列,不修改原序列
import random li=['a','b','c','d'] for i in range(6): print(random.sample(li,2))