Python_note1

 一、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语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。

  2018年3月,该语言作者在邮件列表上宣布Python 2.7将于2020年1月1日终止支持。用户如果想要在这个日期之后继续得到与Python 2.7有关的支持,则需要付费给商业供应商。(更多参见: 百度百科
扫描二维码关注公众号,回复: 2583590 查看本文章

三、Python的语言类型

  Python是一门动态解释型强类型定义语言。

  编译型语言与解释性语言:

  编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,运行时直接以机器语言来运行此程序。

  优缺点:

  1. 较编译型语言执行速度快。用C/C++编写的程序运行速度要比用Java编写的相同程序快30%-70%。
  2. 编译型程序比解释型程序消耗的内存更少
  3. 不利的一面——编译器比解释器要难写得多。
  4. 编译器在调试程序时提供较少帮助——比如C语言代码中遇到一个“空指针异常”时,需要花费好几个小时来明确错误到底在代码中的什么位置。
  5. 可执行的编译型代码要比相同的解释型代码大许多。例如,C/C++的.exe文件要比同样功能的Java的.class文件大很多。
  6. 编译型程序是面向特定平台的因而是平台依赖的。
  7. 编译型程序不支持代码中实现安全性——例如,一个编译型的程序可以访问内存的任何区域,并且可以对你的PC做它想做的任何事情(大部分病毒是使用编译型语言编写的)
  8. 由于松散的安全性和平台依赖性,编译型语言不太适合开发因特网或者基于Web的应用。

  应用方向:由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它。

  解释性语言:源代码不是直接翻译成机器语言,而是程序在运行时先翻译成中间代码,再由解释器对中间代码进行解释运行。只在执行程序时,才一条一条的解释成机器语言给计算机执行,所以运行速度不如编译后的程序运行的快。

  优缺点: 

  1. 解释型语言提供了极佳的调试支持。一名Java程序员只需要几分钟就可以定位并修复一个“空指针异常”,因为Java运行环境不仅指明了异常的性质,而且给出了异常发生位置具体的行号和函数调用顺序(著名的堆栈跟踪信息)。这样的便利是编译型语言所无法提供的。
  2. 解释器比编译器容易实现
  3. 解释型语言最大的优势之一是其平台独立性
  4. 解释型语言也可以保证高度的安全性——这是互联网应用迫切需要的。
  5. 中间语言代码的大小比编译型可执行代码小很多。
  6. 平台独立性,以及严密的安全性是使解释型语言成为适合互联网和Web应用的理想语言的2个最重要的因素。
  7. 解释型语言存在一些严重的缺点。解释型应用占用更多的内存和CPU资源。这是由于为了运行解释型语言编写的程序,相关的解释器必须首先运行。解释器是复杂的,智能的,大量消耗资源的程序并且它们会占用很多CPU周期和内存。
  8. 由于解释型应用的decode-fetch-execute(解码-抓取-执行)的周期,它们比编译型程序慢很多
  9. 解释器也会做很多代码优化,运行时安全性检查;这些额外的步骤占用了更多的资源并进一步降低了应用的运行速度。

  应用方向:应用于一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序。

  •   常见编译型语言:C、C++、GO
  •   常见解释型语言:JavaScript、Python、Ruby、PHP(最好的语言 :) )

参见:点击此处

  动态语言与静态语言:

  动态类型语言(动态语言)指在 运行期间 才去做 数据类型 的检查的语言,也就是说,在用动态语言编程时,永不给任何变量指定数据类型。该语言会在第一次赋值给变量时,在内部将其数据类型记录下来。

1 # Author : YM
2 i = 1       # 不用给变量指定类型,第一次给变量赋值时,会在内部将其数据记录下来
3 print(i)
Python

  静态类型语言(静态语言)在 编译期间 检查数据类型,也就是写程序时要声明所有变量数据类型(所谓的变量要先定义后使用)。

1  #include<stdio.h>
2  int main(){
3     int i=1;    //声明变量数据类型并赋初值否则编译出错
4     printf("%d\n",i);
5  }
C

  •   常见的动态语言: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 }
C++
1 #include <stdio.h>
2 int main(){
3   printf("Hello, World! \n");  
4   return 0;
5 }
C
1 public class Hello_World{
2      public static void main(String args[]) {
3         System.out.println("Hello world!");
4      }
5 }
Java

  小知识:为什么学每一门汇编语言,第一个程序都要写 “ 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通过缩进控制(强制程序员养成良好的编程习惯),这也使得程序更加清晰美观。

  


五、变量

  变量定义的规则:

  1. 变量名只能是字母、下划线和字母的任意组合。
  2. 变量名的第一个字符只能是字母或者下划线,不能是数字。
  3. 关键字不能声明为变量。

  常用关键字:

  ['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计数
Python_while

  程序二:(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. 逐个输出字符串中的字符

       

2.
1 # Author : YM
2 test_list = ["逐个", "输出", "", "", "", "的元素"]  # 列表
3 print("打印列表:",test_list)
4 for i in test_list:
5     print(i)
逐个输出列表中的元素
3.
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)
输出元组中的元素
4. 输出字典中的关键字、内容

           图(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.")
guess.py

(ps:所有代码均上机实现过,无bug,包括C/C++及Java)

才疏学浅,新人一枚,欢迎指正。

 


 

猜你喜欢

转载自www.cnblogs.com/ym1110/p/9410542.html
今日推荐