Python_note1
2018-08-06 09:14:30来源:博客园 阅读 ()
一、Python的介绍
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
- Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
- Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。
- Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
- Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
Python的特点:
- 1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
- 2.易于阅读:Python代码定义的更清晰。
- 3.易于维护:Python的成功在于它的源代码是相当容易维护的。
- 4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
- 5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
- 6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
- 7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
- 8.数据库:Python提供所有主要的商业数据库的接口。
- 9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
- 10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。
- 11.速度慢:Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,但在大多数情况下Python已经完全可以满足你对程序速度的要求。
- 12.代码不能加密:因为python是解释性语言,它的源码都是以名文形式存放的。如果要求源代码必须是加密的,则就不应该用Python来去实现。
- 13.线程不能利用多CPU问题:GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。
二、Python的发展历史
Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC 语言的一种继承。
ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是其非开放造成的。Guido 决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。然后,Python在Guido手中诞生了。
Python已经成为最受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率呈线性增长 由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
三、Python的语言类型
Python是一门动态解释型强类型定义语言。
编译型语言与解释性语言:
编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,运行时直接以机器语言来运行此程序。
优缺点:
- 较编译型语言执行速度快。用C/C++编写的程序运行速度要比用Java编写的相同程序快30%-70%。
- 编译型程序比解释型程序消耗的内存更少。
- 不利的一面——编译器比解释器要难写得多。
- 编译器在调试程序时提供较少帮助——比如C语言代码中遇到一个“空指针异常”时,需要花费好几个小时来明确错误到底在代码中的什么位置。
- 可执行的编译型代码要比相同的解释型代码大许多。例如,C/C++的.exe文件要比同样功能的Java的.class文件大很多。
- 编译型程序是面向特定平台的因而是平台依赖的。
- 编译型程序不支持代码中实现安全性——例如,一个编译型的程序可以访问内存的任何区域,并且可以对你的PC做它想做的任何事情(大部分病毒是使用编译型语言编写的)
- 由于松散的安全性和平台依赖性,编译型语言不太适合开发因特网或者基于Web的应用。
应用方向:由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它。
解释性语言:源代码不是直接翻译成机器语言,而是程序在运行时先翻译成中间代码,再由解释器对中间代码进行解释运行。只在执行程序时,才一条一条的解释成机器语言给计算机执行,所以运行速度不如编译后的程序运行的快。
优缺点:
- 解释型语言提供了极佳的调试支持。一名Java程序员只需要几分钟就可以定位并修复一个“空指针异常”,因为Java运行环境不仅指明了异常的性质,而且给出了异常发生位置具体的行号和函数调用顺序(著名的堆栈跟踪信息)。这样的便利是编译型语言所无法提供的。
- 解释器比编译器容易实现。
- 解释型语言最大的优势之一是其平台独立性
- 解释型语言也可以保证高度的安全性——这是互联网应用迫切需要的。
- 中间语言代码的大小比编译型可执行代码小很多。
- 平台独立性,以及严密的安全性是使解释型语言成为适合互联网和Web应用的理想语言的2个最重要的因素。
- 解释型语言存在一些严重的缺点。解释型应用占用更多的内存和CPU资源。这是由于为了运行解释型语言编写的程序,相关的解释器必须首先运行。解释器是复杂的,智能的,大量消耗资源的程序并且它们会占用很多CPU周期和内存。
- 由于解释型应用的decode-fetch-execute(解码-抓取-执行)的周期,它们比编译型程序慢很多。
- 解释器也会做很多代码优化,运行时安全性检查;这些额外的步骤占用了更多的资源并进一步降低了应用的运行速度。
应用方向:应用于一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序。
- 常见编译型语言:C、C++、GO
- 常见解释型语言:JavaScript、Python、Ruby、PHP(最好的语言 :) )
参见:点击此处
动态语言与静态语言:
动态类型语言(动态语言)指在 运行期间 才去做 数据类型 的检查的语言,也就是说,在用动态语言编程时,永不给任何变量指定数据类型。该语言会在第一次赋值给变量时,在内部将其数据类型记录下来。
1 # Author : YM 2 i = 1 # 不用给变量指定类型,第一次给变量赋值时,会在内部将其数据记录下来 3 print(i)
静态类型语言(静态语言)在 编译期间 检查数据类型,也就是写程序时要声明所有变量数据类型(所谓的变量要先定义后使用)。
1 #include<stdio.h> 2 int main(){ 3 int i=1; //声明变量数据类型并赋初值否则编译出错 4 printf("%d\n",i); 5 }
- 常见的动态语言:Python、Ruby等
- 常见的静态语言:C、C++、C#、JAVA等
强类型定义语言与弱类型语言:
强类型定义语言即若一个变量被指定了某个数据类型,如过不经过强制转换,那么它永远都是此数据类型不会发生改变。比如:有一个整型数据,如果不显式地进行转换,你不能将其视为一个字符串,必须经过强制转换才可以作为字符串类型使用。
弱类型定义语言即数据类型是可以被忽略的语言。一个变量可以赋不同数据类型的值。
- 常见的强类型定义语言有:JAVA、Python
- 常见的弱类型定义语言有:VBScript
四、Python第一个程序(Hello Wold)
1 # Author : YM 2 print("Hello world!")
对比其他语言(只学过此三种语言):
1 #include<iostream> 2 using namespace std; 3 void main(){ 4 cout<<"Hello world!"<<endl; 5 }
1 #include <stdio.h> 2 int main(){ 3 printf("Hello, World! \n"); 4 return 0; 5 }
1 public class Hello_World{ 2 public static void main(String args[]) { 3 System.out.println("Hello world!"); 4 } 5 }
小知识:为什么学每一门汇编语言,第一个程序都要写 “ Hello world! ” ?1972年,贝尔实验室著名研究员Brian Kernighan在撰写“B语言教程与指导(Tutorial Introduction to the Language B)”时初次使用(程序),这是目前已知最早的在计算机著作中将hello和world一起使用的记录。之后,在1978年,他在他和Dennis Ritchie合作撰写的C语言圣经“The C Programming Language”中,延用了“hello,world”句式,作为开篇第一个程序。在这个程序里,输出的”hello,world”全部是小写,没有感叹号,逗号后有一空格。虽然之后几乎没能流传下来这个最初的格式,但从此用hello world向世界打招呼成为惯例。(更多小知识可见《互连网时代》)
Python语言风格:Python代码直观简洁,其可读性高(常用英文单词作关键字)、易维护、具有强制缩进(比如:if语句下一行必须向右缩进否则无法通过编译。)与C/C++等语言不同,C/C++通过 “{ }” 确定代码执行边界而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']
注意:一般变量名的取名要直观明了,诸如年龄(age)、姓名(name)、学号(number)等。如若变量名较长可以用下划线连接或者单词首字母大写,如:my_girlfriend(或MyGirfriend)
六、字符编码
第一阶段:ASCII码(American Standard Code for Information Interchange)最多只能用 8 位来表示(一个字节)即:28 = 256-1=255,所以,ASCII码最多只能表示 255 个符号。
第二阶段:随着计算机普及,各国针对自己国家的语言纷纷制定一套自己国家的编码规范,称作ANSI(ANSI代表了不同国家的不同编码方案,如果一台Windows操作系统设定为中文,那么ANSI就表示GBK,如果设定为日本ANSI就表示Shift_JIS。)
第三阶段:Unicode(统一码、万国码、单一码) 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:216 = 65536(注:此处说的的是最少2个字节,可能更多。)
第四阶段:utf-8 是对 Unicode 编码的压缩和优化,它不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ASCLL码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
Python2.X 解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ASCLL),如若要使用中文,则需告诉python解释器,用什么编码来执行源代码即
# -*- coding: utf-8 -*-
Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。
七、标准数据类型
Python3 中有六个标准的数据类型:
1. Number(数字):整数、浮点数、复数
类型转换函数 :
- int()转换成整数
- float()转换成浮点数
- str()转换成字符串
- complex(x)将x转为复数,x为实部,虚部为0
- complex(x, y)将x,y转为复数,x实部,y虚部
- list()转列表
- tuple()转元组
2. String(字符串):
用引号(单,双,三引号,三引号可跨行)包围起来
字符串的基本操作有:copy,拼接,查找,统计,检测,切片,大小写等。
1 str = "字符串" # 用引号括起来
3. List(列表):
由 [ ] 括起来以及一系列有序的元素组成,其中的元素可以是任何类型。
列表的基本操作有:索引(访问),切片,扩展,删除,追加,统计,长度,获取下标等。
list = ["列", "表", "l", "i", "s", "t"] # 用[ ]括起来
4. Tuple(元组):
由()小括号括起来,元素使用逗号隔开。注意当元祖中只有一个元素的时候,要加上逗号,不然就变成字符串了。
1 tuple1 = ('Y', 'u', 'a', 'n', 'Z', 'u') # 用()括起来 2 tuple2 = ("元组",) # 元组中只有一个元素,要在元素后添逗号
5. Set(集合):
用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合是一个无序,不重复,每个元素必须是不可变类型的数据组合,主要作用有去重和关系运算。
1 # Author : YM 2 a = set('abcd') 3 b = set('cdef') 4 print("a = set('abcd')") 5 print("b = set('cdef')") 6 print() 7 c = b | a # 求合集 , union等同| 8 print("b | a (合集): ", c) 9 c = b & a # 求交集 , intersection等同& 10 print("b & a (交集): ", c) 11 c = b - a # 求差集 , difference等同- 12 print("b - a (差集): ", c) 13 c = b ^ a # 求对称差集 symmetric_difference(求对称差集) 14 print("b ^ a (对称差集): ", c) 15 a.add('x') # 添加一项 16 print("添加一项x:", a) 17 a.update([10, 37, 42]) # 在a中添加多项 18 print("添加多项:", a)
6. Dictionary(字典):
字典是一种映射型的数据类型,每个元素成对出现,即key- value,每对元素key 和 value“:”冒号分开,元素之间用逗号隔开,整个字典包括子在{ }中。
字典的基本操作包括 创建,增加,删除,修改,查找,遍历,更新,in or not in 等。
1 dictionary = {"writer": "夏目漱石", "book": "我是猫", "country": "Japan"}
其中:
- 不可变类型(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变类型(3 个):List(列表)、Dictionary(字典)、Set(集合)。
八、Python 运算符
比较运算:
赋值运算:
逻辑运算:
成员运算:
身份运算:
位运算:
运算符优先级:
参见:点击此处
九、用户输入
普通输入:
1 # Author : YM 2 name = input("请输入姓名:") # 括号内为提示输入内容,可按照编程者意愿改变 3 number = input("请输入学号:") #同上 4 print("姓名:", name) #打印输出 5 print("学号:", number) #打印输出
输入密码想要不可见:
1 # Author : YM 2 import getpass # 导入getpass模块 3 username = input("请输入用户名:") 4 password = getpass.getpass("请输入密码:") # 使用getpass模块中的getpass方法使得密码输入不可见 5 print("用户名:", username) 6 print("密 码:", password)
执行结果:
强制转换输入:
1 age = int(input("age:")) # 强制转换(input()默认所有输入为字符串类型)若所需别的类型则需进行强制转换)
注释:
- 当行注释:# 被注释内容
- 多行注释:" " " 被注释内容 " " " (注意:Python中单引号与双引号没有区别)
十、if...else语句
1 # Author : YM 2 i = int(input("请输入一个整数:")) # 需要强制转换为整型数据 3 if i > 15: 4 print("先判断if语句后的逻辑表达式,若为真则执行此条语句") 5 print("仍然是if语句为真需要执行的语句") 6 elif i > 10: 7 print("如果if语句为假,再判断elif语句后的逻辑表达式,若为真则执行此条语句") 8 print("仍然是elif后需要执行的语句") 9 else: 10 print("以上皆为假逻则执行此条语句") 11 print("仍然是为假时需要执行的语句") 12 print("顶格不缩进则代表不属于if模块中的语句,无论真假都要执行"
先判断 if 语句后的逻辑表达式18 > 15 为真
先判断 if 语句后的逻辑表达式13 > 15 为假,再判断 elif 语句后的逻辑表达式 13 > 10 为真
先判断 if 语句后的逻辑表达式 7 > 15 为假,再判断 elif 语句后的逻辑表达式 7 > 10 为假,则执行 else 语句
十一、while语句和for语句
while语句的一般形式:
1 while 判断条件: 2 语句
程序一:(while)
1 # Author : YM__while循环 2 count = 0 3 while True: # 条件永真 将一直循环下去 4 print("*****") 5 count += 1 # count计数 6 if count == 3: 7 break # break是跳出当前循环,否则会造成程序死循环
等同代码:
1 # Author : YM 2 count = 0 3 while count < 3: # 条件永真 将一直循环下去 4 print("*****") 5 count += 1 # count计数
程序二:(while...else...)
while...else...语句,当 while 语句后条件为假时执行 else 语句。
1 # Author : YM 2 count = 0 3 while count < 3: 4 print("*****") 5 count += 1 # count计数 6 else: # 条件语句为假时执行 else 语句 7 print("#####")
for语句:
使用for语句可以遍历全部元素,例如 逐个输出字符串中的字符,逐个输出列表中的元素,元组中的元素,集合中的元素(注意赋值时各元素的顺序),字典中的键……
程序一:(遍历元素)
1 # Author : YM 2 test_list = ["逐个", "输出", "列", "表", "中", "的元素"] # 列表 3 print("打印列表:",test_list) 4 for i in test_list: 5 print(i)
1 # Author : YM 2 test_tuple = [("a", 1), ("b", 2), ("c", 3), ("d", 4)] 3 print("输出元组中的元素:", test_tuple) 4 for (i, j) in test_tuple: 5 print(i, j)
图(3) 图(4)
程序二:(嵌套)
for 循环求100以内的质数:
1 # Author : YM 2 prime = [] 3 for num in range(2, 100): # 参数一是开始值(默认从0开始),参数二是结束值,参数三是长度(默认1) 4 for i in range(2, num): # 同C的for(i=2,i<num,i++) 5 if num % i == 0: 6 break # 跳出循环 7 else: 8 prime.append(num) # .append()是向列表的尾部添加对象 9 print(prime)
- while循环和for循环,两者的相同点在于都能循环做一件重复的事情;不同点在于,while循环是在条件不成立时停止,for循环是在序列穷尽时停止。
break与continue:
break:退出循环(最近的一层循环),结束整个循环体。
continue::跳过该次循环,进行下一次的循环判断(终止当前的循环过程并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行。)
综合实例(猜大小):
1 # Author : YM 2 age_of_OldBoy = 56 3 count = 0 4 while count < 3: 5 guess_age = int(input("guess age:")) 6 if guess_age == age_of_OldBoy: 7 print("Yes,you got it...") 8 break 9 elif guess_age > age_of_OldBoy: 10 print("Think more smaller") 11 else: 12 print("Think more bigger!") 13 count += 1 14 if count == 3: 15 countine_confirm = input("Do you want to keep guessing...?") 16 if countine_confirm != 'n': 17 count = 0 18 else: 19 print("You have tried too many times.")
(ps:所有代码均上机实现过,无bug,包括C/C++及Java)
才疏学浅,新人一枚,欢迎指正。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash