菜鸟Python笔记-基础篇02:Python基础知识

一、 简单认识python

1. Python发展背景

  • Python的作者,Guido von Rossum(吉多·范·罗苏姆,中国Python程序员都叫他 龟叔),荷兰人。1982年,龟叔从阿姆斯特丹大学获得了数学和计算机硕士学位。然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣。用他的话说,虽然拥有数学和计算机双料资质,他总趋向于做计算机相关的工作,并热衷于做任何和编程相关的事情。

  • 在那个时候,龟叔接触并使用过诸如Pascal、C、Fortran等语言。这些语言的基本设计原则是让机器能更快运行。在80年代,虽然IBM和苹果已经掀起了个人电脑浪潮,但这些个人电脑的配置很低。比如早期的Macintosh,只有8MHz的CPU主频和128KB的RAM,一个大的数组就能占满内存。所有的编译器的核心是做优化,以便让程序能够运行。为了增进效率,语言也迫使程序员像计算机一样思考,以便能写出更符合机器口味的程序。在那个时代,程序员恨不得用手榨取计算机每一寸的能力。有人甚至认为C语言的指针是在浪费内存。至于动态类型,内存自动管理,面向对象…… 别想了,那会让你的电脑陷入瘫痪。

  • 这种编程方式让龟叔感到苦恼。龟叔知道如何用C语言写出一个功能,但整个编写过程需要耗费大量的时间,即使他已经准确的知道了如何实现。他的另一个选择是shell。Bourne Shell作为UNIX系统的解释器已经长期存在。UNIX的管理员们常常用shell去写一些简单的脚本,以进行一些系统维护的工作,比如定期备份、文件系统管理等等。shell可以像胶水一样,将UNIX下的许多功能连接在一起。许多C语言下上百行的程序,在shell下只用几行就可以完成。然而,shell的本质是调用命令。它并不是一个真正的语言。比如说,shell没有数值型的数据类型,加法运算都很复杂。总之,shell不能全面的调动计算机的功能。

  • 龟叔希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程。

  • 1989年,为了打发圣诞节假期,龟叔开始写Python语言的编译器。Python这个名字,来自龟叔所挚爱的电视剧Monty Python's Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。龟叔作为一个语言设计爱好者,已经有过设计语言的尝试。这一次,也不过是一次纯粹的hacking行为。

2. Python语言的诞生

  • 1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了 :类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。

  • Python语法很多来自C,但又受到ABC语言的强烈影响。来自ABC语言的一些规定直到今天还富有争议,比如强制缩进。 但这些语法规定让Python容易读。另一方面,Python聪明的选择服从一些惯例,特别是C语言的惯例,比如回归等号赋值。龟叔认为,如果“常识”上确立的东西,没有必要过度纠结。

  • Python从一开始就特别在意可拓展性。Python可以在多个层次上拓展。从高层上,你可以直接引入.py文件。在底层,你可以引用C语言的库。Python程序员可以快速的使用Python写. py文件作为拓展模块。但当性能是考虑的重要因素时,Python程序员可以深入底层,写C程序,编译为.so文件引入到Python中使用。Python就好像是使用钢构建房一样,先规定好大的框架。而程序员可以在此框架下相当自由的拓展或更改。

  • 最初的Python完全由龟叔本人开发。Python得到龟叔同事的欢迎。他们迅速的反馈使用意见,并参与到Python的改进。龟叔和一些同事构成Python的核心团队。他们将自己大部分的业余时间用于hack Python。随后,Python拓 展到研究所之外。Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python程 序员可以花更多的时间用于思考程序的逻辑,而不是具体的实现细节。这一特征吸引了广大的程序员。Python开始流行。

人生苦短,我用python

3. 关键点常识

  • Python的发音与拼写
  • Python的作者是Guido van Rossum(龟叔)
  • Python正式诞生于1991年
  • Python的解释器如今有多个语言实现,我们常用的是CPython(官方版本的C语言实现),其他还有Jython(可以运行在Java平台)、IronPython(可以运行在.NET和Mono平台)、PyPy(Python实现的,支持JIT即时编译)
  • Python目前有两个版本,Python2和Python3,最新版分别为2.7.15和3.7.0
  • Life is shot, you need Python. 人生苦短,我用Python。

4. Python优缺点

优点

  • 简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。

  • 易学:Python极其容易上手。

  • 免费、开源:Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。

  • 高层语言:当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。

  • 可移植性:由于它的开源本质,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平台!

  • 解释型语言:Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。

  • 面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

  • 可扩展性:如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

  • 丰富的库:Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。

  • 规范的代码:Python采用强制缩进的方式使得代码具有极佳的可读性。

缺点

  • Python语言非常完善,没有明显的短板和缺点,唯一的缺点就是执行效率慢,这个是解释型语言所通有的,同时这个缺点也将被计算机越来越强大的性能所弥补。

5. Python应用场景

  • Web应用开发
    Python经常被用于Web开发。比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的通信。一些Web框架,如Django,TurboGears,web2py,Zope等,可以让程序员轻松地开发和管理复杂的Web程序。

  • 操作系统管理、服务器运维的自动化脚本
    在很多操作系统里,Python是标准的系统组件。 大多数Linux发行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,可以在终端下直接运行Python。有一些Linux发行版的安装器使用Python语言编写,比如Ubuntu的Ubiquity安装器,Red Hat Linux和Fedora的Anaconda安装器。Gentoo Linux使用Python来编写它的Portage包管理系统。Python标准库包含了多个调用操作系统功能的库。通过pywin32这个第三方软件 包,Python能够访问Windows的COM服务及其它Windows API。使用IronPython,Python程序能够直接调用.Net Framework。一般说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。

  • 网络爬虫
    Python有大量的HTTP请求处理库和HTML解析库,并且有成熟高效的爬虫框架Scrapy和分布式解决方案scrapy-redis,在爬虫的应用方面非常广泛。

  • 科学计算
    NumPy、SciPy、Pandas、Matplotlib可以让Python程序员编写科学计算程序。

  • 桌面软件
    PyQt、PySide、wxPython、PyGTK是Python快速开发桌面应用程序的利器。

  • 服务器软件(网络软件)
    Python对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络爬虫。第三方库Twisted支持异步网络编程和多数标准的网络协议(包含客户端和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件。

  • 游戏
    很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。

  • 构思实现,产品早期原型和迭代
    Google、NASA、Facebook都在内部大量地使用Python。

二、第一个Python程序

  1. 打开 Pycharm,选择 Create New Project,创建一个新项目。

    菜鸟Python笔记-基础篇02:Python基础知识_第1张图片
    打开Python

  2. 选择 Pure Python 表示创建一个纯Python程序项目, Location 表示该项目保存的路径,Interpreter 表示使用的Python解释器版本,最后点击 Create 创建项目。

    菜鸟Python笔记-基础篇02:Python基础知识_第2张图片
    创建程序

  3. 右击项目,选择New,再选择Python File

    菜鸟Python笔记-基础篇02:Python基础知识_第3张图片
    创建程序

  4. 在弹出的对话框中输入的文件名HelloPython,点击OK,表示创建一个Python程序的文本文件,文本文件后缀名默认.py

    菜鸟Python笔记-基础篇02:Python基础知识_第4张图片
    输入字符串

  5. 输入以下代码,并右击空白处,选择Run运行,表示打印一个字符串"Hello World!"

print("Hello World!")
菜鸟Python笔记-基础篇02:Python基础知识_第5张图片
运行py文件
  1. 运行成功后,Pycharm Console窗口将显示我们的输出结果。
    菜鸟Python笔记-基础篇02:Python基础知识_第6张图片
    显示结果

三、注释

1. 注释的引入

  • 看以下程序示例(未使用注释)

    未使用注释

  • 看以下程序示例(使用注释)

    菜鸟Python笔记-基础篇02:Python基础知识_第7张图片
    使用注释

  • 总结
    注释的作用:通过用自己熟悉的语言,在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。

2. 注释的分类

单行注释

以#开头,#右边的所有东西当做说明,而不是真正要执行的程序,起辅助说明作用

# 我是注释,可以在里写一些功能说明
print('hello world')

多行注释

'''
我是多行注释,可以写很多很多行的功能说明
下面的代码完成 ,打印一首诗
名字叫做:XXXXXX
'''

python程序中,中文支持

python3中,是默认支持中文的,但是在python2中就需要一定的额外操作才可以。

python2中,如果直接在程序中用到了中文,比如:

print('你好')

如果直接运行输出,程序会出错:


error

解决的办法为:在程序的开头写入如下代码,这就是中文注释:

#coding=utf-8

修改之后的程序:

#coding=utf-8
print('你好')

运行结果:

你好

注意:
在python的语法规范中推荐使用的方式:

# -*- coding:utf-8 -*-

四、变量以及类型

1. 变量的定义

在程序中,需要把2个数据,或者多个数据进行求和的话,那么就需要把这些数据先存储起来,然后把它们累加起来即可。

在Python中,存储一个数据,需要一个叫做变量的东西,如下示例:

num1 = 100 #num1就是一个变量,就好一个小菜篮子

num2 = 87  #num2也是一个变量

result = num1 + num2 #把num1和num2这两个"菜篮子"中的数据进行累加,然后放到 result变量中
  • 说明:
    • 所谓变量,可以理解为菜篮子,如果需要存储多个数据,最简单的方式是有多个变量,当然了也可以使用一个。
    • 程序就是用来处理数据的,而变量就是用来存储数据的。

2. 变量的类型

为了更充分的利用内存空间以及更有效率的管理内存,变量是有不同的类型的,如下所示:

  • Numbers (数字)
    • int (有符号整型)
    • long (长整型)
    • float (浮点型)
    • complex (复数)
  • 布尔类型
    • True
    • False
  • String (字符串)
  • List (列表)
  • Tuple (元组)
  • Dictinary (字典)

怎样知道一个变量的类型呢?

  • 在python中,只要定义了一个变量,而且它有数据,那么它的类型就已经确定了,不需要咱们开发者主动的去说明它的类型,系统会自动辨别。
  • 可以使用type(变量的名字),来查看变量的类型。

五、标识符和关键字

1. 标识符

什么是标识符?

开发人员在程序中自定义的一些符号和名称
标识符是自己定义的,如变量名、函数名等

2. 标识符的规则

  • 标识符由字母、下划线和数字组成,且数字不能开头
  • python中的标识符是区分大小写的


    菜鸟Python笔记-基础篇02:Python基础知识_第8张图片
    区分大小写

3. 命名规则

见名知意

起一个有意义的名字,尽量做到看一眼就知道是什么意思(提高代码可读性) 比如: 名字 就定义为 name , 定义学生 用 student。

驼峰命名法

  • 小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog
  • 大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、LastName
  • 还有一种命名法是用下划线“_”来连接所有的单词,比如send_buf

4. 关键字

什么是关键字

python一些具有特殊功能的标识符,这就是所谓的关键字。
关键字,是python已经使用的了,所以不允许开发者自己定义和关键字相同的名字的标识符。

查看关键字:

可以在Python Shell通过以下命令进行查看当前系统中python的关键字:

>>> import keyword
>>> keyword.kwlist

关键字不需要记,随着以后的使用自然会记住。

六、输出

1. 普通的输出

python中变量的输出

# 打印提示
print('hello world')
print('萨瓦迪卡---泰语,你好的意思')

2. 格式化输出

格式化操作的目的

比如有以下代码:

pirnt("我今年10岁")
pirnt("我今年11岁")
pirnt("我今年12岁")
    ...

在输出年龄的时候,用了多次"我今年xx岁",能否简化一下程序呢???

字符串格式化

什么是格式化

看如下代码:

age = 10
print("我今年%d岁" % age)

age += 1
print("我今年%d岁" % age)

age += 1
print("我今年%d岁" % age)

...

在程序中,看到了%这样的操作符,这就是Python中格式化输出。

age = 18
name = "xiaohua"
print("我的姓名是%s, 年龄是%d" % (name, age))

常用的格式符号

格式符号 转换
%c 字符
%s 字符串
%d 有符号十进制整数
%u 无符号十进制整数
%o 八进制整数
%x 十六进制整数(小写字母0x)
%X 十六进制整数(大写字母0X)
%f 浮点数
%e 科学计数法(小写'e')
%E 科学计数法(大写“E”)
%g %f和%e 的简写
%G %f和%E的简写

3. 换行输出

在输出的时候,如果有 \n 那么,此时 \n 后的内容会在另外一行显示

print("1234567890-------1") # 会在一行显示
print("1234567890\n-------1") # 一行显示1234567890,另外一行显示-------1

七、输入

怎样才能让程序知道咱们刚刚输入的是什么呢??

1. python2版本中

raw_input()

在Python中,获取键盘输入的数据的方法是采用 raw_input 函数(至于什么是函数,以后的章节中讲解),那么这个 raw_input 怎么用呢?

看如下示例:

password = raw_input("请输入密码:")
print('您刚刚输入的密码是:%d' % password)

运行结果:


结果

注意:

  • raw_input()的小括号中放入的是,提示信息,用来在获取数据之前给用户的一个简单提示。
  • raw_input()在从键盘获取了数据以后,会存放到等号右边的变量中。
  • raw_input()会把用户输入的任何值都作为字符串来对待。

input()

input()函数与raw_input()类似,但其接受的输入必须是表达式。

>>> a = input() 
123
>>> a
123
>>> type(a)


>>> b = input()
"abc"
>>> b
'abc'
>>> type(b)

input()接受表达式输入,并把表达式的结果赋值给等号左边的变量

2. python3版本中

没有raw_input()函数,只有input()

并且 python3中的input与python2中的raw_input()功能一样。

八、运算符

python支持以下几种运算符

1. 算术运算符

下面以a=10 ,b=20为例进行计算:

运算符 描述 实例
+ 两个对象相加 a + b 输出结果 30
- 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ b / a 输出结果 2
// 取整除 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0
% 取余 返回除法的余数 b % a 输出结果 0
** 指数 a**b 为10的20次方, 输出结果 100000000000000000000

注意:混合运算时,优先级顺序为: ** 高于 * / % // 高于 + - ,为了避免歧义,建议使用 () 来处理运算符优先级。

并且,不同类型的数字在进行混合运算时,整数将会转换成浮点数进行运算。

>>> 10 + 5.5 * 2
21.0
>>> 10 + (5.5 * 2)
21.0

2. 赋值运算符

运算符 描述 实例
= 赋值运算符 把 = 号右边的结果 赋给 左边的变量,如 num = 1 + 2 * 3,结果num的值为7
# 单个变量赋值
>>> num = 10
>>> num
10

# 多个变量赋值
>>> num1, num2, f1, str1 = 100, 200, 3.14, "hello"
>>> num1
100
>>> num2
200
>>> f1
3.14
>>> str1
"hello"

复合赋值运算符

运算符 描述 实例
+= 加法赋值运算符 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
//= 取整除赋值运算符 c //= a 等效于 c = c // a

九、数据类型转换

常用的数据类型转换

函数 说明
int(x [,base ]) 将x转换为一个整数
float(x ) 将x转换为一个浮点数
complex(real [,imag ]) 创建一个复数,real为实部,imag为虚部
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个Unicode字符
ord(x ) 将一个字符转换为它的ASCII整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
bin(x ) 将一个整数转换为一个二进制字符串

举例

>>> # int(): 将数据转换为 int 类型
... 
>>> str1 = "10"
>>> # int() 默认按10进制转换后显示
... num1 = int(str1)
>>> 
>>> # int() 处理浮点数,只留下整数部分,舍弃小数部分(并不是四舍五入操作)
... num2 = int(3.74)
>>> print(num2)
3
>>> 
>>> """
... num1 = int(str1, 8) # 第二个参数为8,表示按8进制转换后显示,结果为 8
... num1 = int(str1, 16) # # 第二个参数为16,表示按16进制转换后显示,结果为 16
... #01 02 03 04 05 06 07 10
... #01 02 ... 0B 0C 0D 0E 0F 10
... print(num1)
... """
>>> 
>>> # float() 将数据转化为浮点数
... str2 = "3.14"
>>> f1 = float(str2)
>>> print(type(f1))

>>> 
>>> f2 = float(10)
>>> print(f2)
10.0
>>> 
>>> # complex() 创建复数: 第一个参数是复数的实部,第二个参数是复数的虚部
... c1 = 10 + 4j
>>> c2 = complex(10, 4)
>>> 
>>> print(c1)
(10+4j)
>>> print(c2) # 等同与c1
(10+4j)
>>> 
>>> # str() : 转换为 字符串类型
... num1 = 10
>>> f1 = 3.14
>>> 
>>> print(type(str(num1)))

>>> print(type(str(f1)))

>>> 
>>> # repr(): 转换为表达式字符串
... num1 = 10
>>> print(type(repr(num1)))

>>> 
>>> 
>>> # eval(): 将字符串形式的数据,转换为原本的类型
... str1 = "3.14"
>>> print(type(eval(str1)))

>>> 
>>> str2 = "[10, 20, 30]"
>>> l = eval(str2)
>>> print(type(l))

>>> 
>>> 
>>> # chr: 将一个整数转换为对应的 Unicode 字符
... s = chr(1065)
>>> print(s)
Щ
>>> 
>>> # ord :将一个字符转换为对应的字符编码数字
... n = ord("A")
>>> print(n)
65
>>> 
>>> # bin: 将一个整数转换为二进制
... print(bin(1024)) # 0b 开头表示二进制数
0b10000000000
>>> 
>>> # oct:将一个整数转换为八进制
... print(oct(1024)) # 0o 开头表示八进制数
0o2000
>>> 
>>> # hex: 将一个整数转换为十六进制
... print(hex(1024)) # 0x 开头表示十六进制
0x400
>>>

附录:常用字符与ASCII码对照表

菜鸟Python笔记-基础篇02:Python基础知识_第9张图片
ASCII码

你可能感兴趣的:(菜鸟Python笔记-基础篇02:Python基础知识)