python基础知识
python2x 不规范,不标准,不符合龟书优美、清晰、简单的编写初衷。无法显示中文,除非加
1 #-*- encoding:utf-8 -*-
因为其默认的编码方式是ascii。
python3x 用utf-8编译,规范,标准统一,去除了重复代码。
python是一门动态解释性的强类型定义语言。
语言分类:
编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
动态语言和静态语言
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
强类型定义语言和弱类型定义语言
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。
python优缺点:
先看优点
- Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
- 开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。
- 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
- 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
- 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
- 可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
再看缺点:
- 速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。
- 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
- 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py
为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py
文件。
由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器
python种类
CPython
当我们从Python官方网站下载并安装好Python 3.6后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python
就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>
作为提示符,而IPython用In [
序号
]:
作为提示符。
PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结:
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
1.运行python代码
使用win+r快速打开命令提示符, 输入cmd执行程序命令框。
在命令框中输入python 后面写明要运行的文件路径 回车即可执行。
2.内容编码
python2 解释器编码默认ascill码, 对于中文不能识别,所以要在最前前加上 #-*- encoding:utf-8 -*-。
而python3对内容进行编码的默认为utf-8 所以无需解释 直接编码。
3.注释
方便自己方便他人理解代码。
单行注释:# 被注释内容
多行注释:'''被注释内容''',或者"""被注释内容"""
4.变量
变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。
变量的作用:昵称,其代指内存里某个地址中保存的内容。
变量定义的规则:
1 变量名只能是 字母、数字或下划线的任意组合 变量名的第一个字符不能是数字
2 以下关键字不能声明为变量名
['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']
3 变量的定义要具有可描述性。
变量的赋值:
和数学运算方法有些区别,在python中等号右边的值赋值给等号左边的变量。
值or数值在内存中占据一定内存,等号则表示指针指向这一值or数值。如果后边定义变量=新的值or数值,则变量的指针则由原来的变量值指向新的变量值。
变量定义要注意的事项:
1 变量名为中文、拼音
2 变量名过长
3 变量名词不达意
5.常量
常量在python中则用大写的的数字 字母 下划线的任意组合表示,用以表达在运算中不发生变化的量。
如π= 3.141592653...
6.程序交互
程序交互用以使用户的数据输入电脑,是电脑完成运算。
典型交互类型为:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 # 将用户输入的内容赋值给 name 变量 5 name = input('请输入用户名:') 6 age = input('请输入年龄:') 7 8 # 打印输入的内容 9 print(name,age)
其中要注意 input 输入的内容全部被电脑识别为str(字符串)类型 特别要注意数字输入后也被识别为字符串!!!
7.数据类型(基础)
数字、字符串、布尔型
1 数字
int(整型)(在python3中不再有长整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
2 字符串
在Python中,加了引号的字符都被认为是字符串!
使用的单引号和双引号没有区别,但是在实际使用中要避免单引号和英文中的缩写混用的情况。
1 a = "I'am a boy" 2 b = 'I'am a boy'
第二种就电脑就会只识别I才是字符串内的内容。
多行引用使用'''三引号'''
1 msg = ''' 2 今天我想写首小诗, 3 歌颂我的同桌, 4 你看他那乌黑的短发, 5 好像一只炸毛鸡。 6 ''' 7 print(msg)
字符串拼接
字符串只能进行"相加"和"相乘"运算。
1 >>> name = 'Alex Li' 2 >>> age = '22' 3 >>> name + age #相加其实就是简单拼接 4 'Alex Li22' 5 >>> name * 5 #相乘其实就是复制自己多少次,再拼接在一起 6 'Alex LiAlex LiAlex LiAlex LiAlex Li'
字符串只能和字符串拼接,不能和其他类型的拼接,会报错。
3 布尔值
就True,False两个值, 主要用记逻辑判断。
也可以用一个or一种关系来表达True or False。
1 a=3 2 b=5 3 a > b #不成立就是False,即假 4 False 5 a < b #成立就是True, 即真 6 True
8.流程控制-条件
流程控制通过if-如果,elif-或,else-否则 这三个元素来实现。
1 if 条件: 2 满足条件后要执行的代码
1 """ 2 if 条件: 3 满足条件执行代码 4 else: 5 if条件不满足就走这段 6 """ 7 AgeOfOldboy = 48 8 9 if AgeOfOldboy > 50 : 10 print("Too old, time to retire..") 11 else: 12 print("还能折腾几年!")
注意缩进 if elif else 后边都要缩进4个空格位置,以保证内容是流程控制内部才会执行的。
Python的缩进有以下几个原则:
1 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进。
2 同一级别的代码,缩进必须一致。
3 官方建议缩进用4个空格。
if...else ...可以有多个分支条件
1 if 条件: 2 满足条件执行代码 3 elif 条件: 4 上面的条件不满足就走这个 5 elif 条件: 6 上面的条件不满足就走这个 7 elif 条件: 8 上面的条件不满足就走这个 9 else: 10 上面所有的条件不满足就走这段
当其中一个条件满足的时候,就不往下执行了。
9.流程控制-循环
1 基本循环
1 while 条件: 2 # 循环体 3 # 如果条件为真,那么循环体则执行 4 # 如果条件为假,那么循环体不执行
2 循环终止
循环终止有2种
1. break
2. continue
break用于完全结束一个循环,跳出循环体执行循环后面的语句。
continue只是终止本次循环,接着还执行下一次循环。
例子:break
1 count = 0 2 while count <= 100 : #只要count<=100就不断执行下面的代码 3 print("loop ", count) 4 if count == 5: 5 break 6 count +=1 #每执行一次,就把count+1,要不然就变成死循环啦,因为count一直是0 7 8 print("-----out of while loop ------")
输出
1 loop 0 2 loop 1 3 loop 2 4 loop 3 5 loop 4 6 loop 5 7 -----out of while loop ------
例子:continue
1 count = 0 2 while count <= 100 : 3 count += 1 4 if count > 5 and count < 95: #只要count在6-94之间,就不走下面的print语句,直接进入下一次loop 5 continue 6 print("loop ", count) 7 8 print("-----out of while loop ------")
输出
1 loop 1 2 loop 2 3 loop 3 4 loop 4 5 loop 5 6 loop 95 7 loop 96 8 loop 97 9 loop 98 10 loop 99 11 loop 100 12 loop 101 13 -----out of while loop ------