Python入门

Posted xujun1270

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门相关的知识,希望对你有一定的参考价值。

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

计算机本身不能识别高级语言,当我们运行一个程序的时候,需要一个“翻译” 来把 高级语言转换成计算机能读懂的语言。 “翻译”过程分两种:

编译 编译型语言在执行程序前,首先会通过编译器执行一个编译的过程,把程序编译成机器语言。 之后,程序再次运行的时候,就不要“翻译”了,而是可以直接执行。比如C语言。 编译型语言的优点在于在运行程序的时候不用解释,可直接利用已经翻译过的文件。

解释 解释型语言就没有编译的过程,而是在程序运行的时候,通过解释器逐行解释代码,然后运行。比如python。

 java等基于虚拟机的语言兴起之后,编程语言又不能单纯的在划分为编译型语言或解释型语言。 java是首先通过编译器将代码编译成字节码文件,然后在JVM执行java字节码,将其解释成机器语言。 所以我们说java是一种半编译半解释的语言。

C#,在第一次执行的时候,将代码编译成IL中间码文件,然后由JIT编译器编译成本地的机器码执行。 相当于编译了两次。

下面是现在比较流行的编译型语言以及解释型语言:

技术图片
技术图片

编译型VS解释型

编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不同停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

2 文件编码

什么是文件编码

我们在显示器看见的文字图片等信息在电脑上存储的时候并不是我们看到的样子。如果你拆开硬盘,把里面的盘片拿出来用显微镜来看就会看到上面有很多凹凸的地方。和我们平时见到的光盘类似。凹凸的位置分别表示0和1。这是因为在电脑中电信号只有两种状态,有电和没电。在存储数据的时候,如果我们要保存一个字母“A”,那么就可以用一定长度的0和1来表示。比如说用“01000001”来表示A。有了这样的对应关系,我们就可以保存我们平时见到的一些字符了。
于是就是有ASCII(美国(国家)信息交换标准(代)码),使用7个或8个二进制位进行编码的方案,最多可以给256个字符。使用了ASCII码,不同的计算机之间就可以实现数据的标准化。
但是ASCII使用的时候有一些限制。他最多之可以表示256个字符。如果有其他的字符就无能为力了。ASCII只能表示26个基本的拉丁字母、阿拉伯数字和英式标点。因此也只能用于显示现代美国英语。
后来计算机世界开始有了其他语言,ASCII码已经无法满足需求。后来不同语言的人各自为自己定制了一套属于自己的编码,同时与ASCII保持兼容。这些编码统称MBCS,到了这里大家都开始好似用双字节。(中国的叫GB*,比如GBK).
在后来有人开始觉得,这么多编码,有些编码之间还不兼容,太让人头大了,于是有这么一群人就坐在一起想出了一个办法:所有的语言都使用同一种编码,这种编码就是Unicode。 Unicode使用最少2个字节(1个字节=1BYTE=8bit=一个长度为8的二进制数) 来表示字母和符号等,有时候是4个字节。这样就解决了上面遇到的问题。
Unicode又叫万国码,是业界的一种标准。但是有人又觉得如果我要表示一个ASCII里的字符,使用unicode来表示不是太浪费空间了吗,于是就有人想出了另外一种解决方案——UTF-8。
UTF-8是对Unicode编码的压缩和优化,最大的特点是它采用了变长的编码方式,他不再是最少使用2个字节,而是将所有的字符进行分类。ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存…

不同编码之间的关系:

技术图片
 技术图片

3. 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左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。
  2. 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
  3. 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。
 

4.Python2和3的区别

1、Python3默认支持中文
2、Python3不兼容2.x
3、python3核心语法调整,更加易学
4、Python3新特性默认只在3上有
 

5.Python安装

windows

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

Linux

在大多数情况下,Linux系统自带的版本都是2.x
因为现在大部分情况下建议使用3.x
那么该如何升级呢?
下面就让我来讲解一下升级步骤:
1、首先下载安装包
wget https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tgz
 
2、下载完成后解压
tar xf Python-3.5.6.tgz
 
3、进入到解压好后的目录
cd Python-3.5.6
 
4、编译前先给/usr/local建一个目录python3
mkdir -p /usr/local/python3
 
5、编译三部曲
./configure --prefix=/usr/local/python3/
make && make install
 
6、然后备份一下之前的老版本python
mv /usr/bin/python /usr/bin/python_bak
 
7、再建立新版本python的链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
 
8、查看python版本
[root@mysql-11 Python-3.5.6]# python -V
Python 3.5.6
 
注意:这种方法虽然可以安装成功,但是它带来了新的问题,比如yum不能正常使用了
修改/usr/bin/yum的第一行:
#!/usr/bin/python_bak

6.编写第一个小程序Hello World

在linux环境下创建一个文件叫hello.py,并输入
技术图片
技术图片

指定解释器

上一步执行python hello.py时,明确的指出hello.py脚本由python解释器来执行
如果想要类似于执行shell脚本一样执行python脚本,列:./hello.py,那么就需要在hello.py文件的头部指定解释器,如下:
技术图片
技术图片
如此一来,执行:./hello.py即可
注意:执行前要给文件执行权限,chmod +x hello.py
技术图片
技术图片
 

7.变量和常量

变量

变量是保存、存储信息,以方便被程序所调用,并且可以被操作或者更改。它们还提供了一种用描述性的名称或者标记数据的方法,这样读者和我们自己就能更清楚地理解我们的程序。它们的唯一目的是在内存中标记和存储数据。然后可以在整个程序中使用这些数据。

声明变量

name = "linus"
上述代码就是声明一个变量,变量名为:name,变量的赋值为:"linus"

变量定义的规则:

1、变量名只能是字母、数字或下划线的任意组合
student = 30
student_number = 30
studentNumber = 30  #这种写法叫做驼峰体
2、变量名的第一个不能是数字
3、要具有描述性,比如:name
4、不能以中文为变量名
5、以下关键字不能声明为变量名
[‘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 = "linus"
 
name2 = name
print(name,name2)
 
name = "Jack"
 
print("What is the value of name2 now?")

变量怎么清除

Python内存有自动回收机制,一般而言不需要主动去删除变量。如果你是在想删除的话就del变量名就行了
>>> a=1
>>> a
1
>>> del a

常量

常量:不变的量
在python语言中没有专门定义常量的方式,通常使用大写变量名表示,但仅仅是一种提示效果
NAME="linus" (本质还是变量)

8.基础数据类型(初始)

什么是数据类型?
我们人类可以很容易的分清数字与字符的区别,但是计算机并不能,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和“汉”的区别,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。python中常用的数据类型有多种,今天我们暂时讲3种,数字、字符串、布尔值。

整数类型(int)

整数就是指数字0到9,这些都属于整数

浮点型(float)

浮点数用来处理实数,即带有小数的数字。

字符串类型(str)

在python中,加了引号的字符都被认为是字符串!
技术图片
技术图片
以上这些只要加了双引号以及单引号,都可以认定为字符串
那单引号、双引号、多引号有什么区别呢?让我大声告诉你,单双引号木有任何区别,只有下面这种情况,你需要考虑单双的配合
技术图片
技术图片
字符串拼接
数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能。是的没错,但是能进行相加和相乘运算
技术图片
技术图片
但是注意字符串拼接不能和数字在一块,否则会报错!!!

布尔值(True、False)

布尔值很简单,就两个值,一个True(真),一个False(假),主要用做逻辑判断
技术图片
技术图片 

9.Python中文编码

在Python中2.7版本默认不支持中文,所以要想打印出中文,就必须在代码中的开头添加一句# -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了
# -*- coding: UTF-8 -*-
print ("徐骏")
python3以上版本都不需要这样,默认就支持中文。

10. Python注释

Python中单行注释采用#开头
技术图片
 技术图片
Python中多行注释使用三个单引号(‘‘‘)或三个双引号(""")
技术图片
 技术图片
Python中多行注释还有一个作用就是提供变量多行赋值
msg = ‘‘‘
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
‘‘‘
print(msg)

11. 用户交互

#!/usr/bin/python
death_age=100
name=input ("你的名字是:")
age=input ("你的年龄是:")  #input接受的所有数据都是字符串,即便你输入的是数字,但依然会被当成字符串来处理
print ("You name:",name)
print ("You can still live for ",death_age - int(age),"years")
#int integer=整数 把字符串转成整数 用法:int(被转的数据)
#str string=字符串 把数据转成字符串 用法:str(被转的数据)

12. 缩进

Python的代码块不适用大括号来控制类,函数以及其他逻辑判断,python最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行,如下所示:
#!/usr/bin/python
age=56
num=int(input("请输入年龄:"))
if num == age:
    print ("您输入的",num,"是对的")
else:
    print ("请输入错误,请重新输入")
以下代码将会执行错误:
#!/usr/bin/python
age=56
num=int(input("请输入年龄:"))
if num == age:
    print ("您输入的",num,"是对的")
print ("您输入的",num,"是对的")  #没有严格缩进,在执行时会报错
else:
    print ("请输入错误,请重新输入")
总结:
1、缩进的空白数量必须保持一致
2、空格和tab不能混合用,要么空格,要么tab
3、官方建议用空四格,最好用空格键。这样就可以运行在windows或者linux上,否则tab会报错

13.单分支if..else

#!/usr/bin/python
age=56
num=int(input("请输入年龄:"))
if num == age:
    print ("您输入的",num,"是对的") 

双分支if...else

#!/usr/bin/python
age=56
num=int(input("请输入年龄:"))
if num == age:
    print ("您输入的",num,"是对的")
else:
    print ("请输入错误,请重新输入") 

多分支if...elif...else

#!/usr/bin/python
age=56
num=int(input("请输入年龄:"))
if num == age:
    print ("您输入的",num,"是对的")
elif num < age:
    print ("您输入的",num,"小于实际年龄")
else:
    print ("您输入的",num,"大于实际年龄")
money=int(input("请输入你兜里的钱: "))
if money >= 500:
   print("喝啤酒吃炸鸡,生活美滋滋")
elif money < 500 and money >= 300:
    print("吃个盖浇饭,生活乐无边")
elif money < 300 and money >= 50:
   print("吃个方便面,开心")
else:
   print("今天减肥") 
补充:

if语句的另外一种用法

s = input("请开始喷: ")
 
if "马化腾" in s:    #这个if语句表示包含了XXX:
 print("这个词语是屏蔽词")
 continue
print("喷的内容是:"+s)

14.while循环

在生活中,我们遇到过循环的事情吧?比如吃饭睡觉工作,循环听歌等等。在python程序中,循环也是存在的。而这个循环在python中就是流程控制语句while

基本循环

技术图片
 技术图片

无限循环

技术图片

技术图片
那么大家都看到了,while循环他的执行结果就是这样一直循环,只要电脑不死机,直至天荒地老,所以我们要如何终止无限循环呢?

如何终止循环?

1.改变条件(根据上面的流程,只要改变条件,就会终止循环)
2.关键字:break(停止当前循环)
3.调用系统命令:quit(),exit()后面会讲到,不建议使用
4.关键字:continue(停止本次循环,继续下一次循环)

终止循环的第一个方法:利用改变条件,终止循环。给大家引入标志位的概念

技术图片

技术图片
FLAG = True就是标志位
打印1~100所有的数字

终止循环的第二方法:break

break:循环中,只要遇到break马上退出循环
技术图片
技术图片
打印1~100所有的数字

while..else..

在python语言中还有一个while..else语句
while后面的else作用是指,当while循环正常执行完,中间没有被break中止的话,就会执行else后面的语句
count = 0
while count <= 5 :
    count += 1
    print("Loop",count)
 
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出结果:
技术图片
 技术图片
如果执行过程中被break啦,就不会执行else的语句啦
count = 0
while count <= 5 :
    count += 1
    if count == 3:break
    print("Loop",count)
 
else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
输出结果:
技术图片
 技术图片

while循环习题

1到100的加法

count = 1
num = 0
while count <= 100:
    num = count + num
    count = count + 1
print(num)

循环求奇数

count = 0
while count < 100:
    count = count + 1
    num = count % 2
    if num == 1:
        print(count)

以上是关于Python入门的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫入门:爬虫基础了解

Python-入门基础-《Python编程-从入门到实践》-第一章

「数据挖掘入门系列」Python快速入门

Python 从入门到精通推荐看哪些书籍呢?

如何把Python入门?

如何入门 Python 爬虫?