python学习:基础知识
一、编译器和解释器的区别
编译器:编译器是把源程序的每一句代码编译成机器语言,并保存在一个二进制的文件中。当计算机在运行这个程序时就可以直接用这个机器语言运行,速度快。
解释器:解释器是在运行程序的时候,才逐行将源程序解释成机器语言来运行。由于解释器是将源程序解释一行执行一行,所以运行速度比编译器要慢。
编译型优点和缺点:
优点:编译器一般会有一个预编译的过程对代码进行优化,只要编译通过后在运行时就不再需要编译,所以执行效率搞。可以脱离语言环境独立运行。
缺点:编译之后如果发现代码有问题需要修改,修改后则需要重新编译。编译的时候根据运行环境生成对应的机器码。不同的操作系统生成的机器码是不同的,比如在windows上编译后的代码移植到linux上是不能直接运行的,需要重新在linux上编译后才能运行。
解释型优点和缺点:
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是必须安装解释器(虚拟机)。修改代码的时候直接修改就可以,不需要重新编译,可以快速部署,不用停机维护,灵活。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
动态语言和静态语言:
动态语言:动态类型语言是指在程序运行期间才去做数据类型检查的语言。也就是说,在使用动态型的语言进行编程的过程中,是不会给任何变量指定数据类型的,动态类型语言会在第一次给变量赋值时,在内部将该变量的类型记录下来,也就是说,第一次你给该变量赋的是什么类型的值,这个变量就默认被定义成了对应的数据类型。python就是动态类型语言。
静态语言:静态类型语言和动态类型语言恰恰相反。静态类型语言在编程的过程中,就必须显式的给变量定义数据类型,它的所有变量的数据类型的合法性是在程序编译时进行检查。c语言和c++等就是典型的静态语言。
强类型语言和弱类型语言:
强类型语言:就是强制数据类型定义的语言,这种语言一旦为某个变量指定了数据类型,如果不进行强制转换就不能再改变这个变量的数据类型了。例如,变量a被定义成了int类型,在编程的过程中就不能将一个字符串赋值给它。所以强类型定义语言是类型安全的语言。
弱类型语言:数据类型被忽略,一个变量可以被赋值成不同数据类型的值。
Python是动态强类型语言。VBScript是动态弱类型语言。JAVA是今天强类型语言。
Python是一门动态解释型的强类型定义语言。
二、python的优缺点
优点:
1、Python的定位是:优雅、明确、简单。所以Python程序看上去简单易懂,初学者容易入门。
2、开发效率高,Python有非常强大的第三方库,基本上你要实现的功能都可以通过引入Python库中的模块来解决,大大降低开发周期。
3、高级语言,不用考虑内存回收等细节。
4、可移植性,由于它的开源的本质,Python已经被移植到多个平台上运行上(但是还是需要稍作修改)。如果你在编程的过程中就避免使用某些依赖具体操作系统的一些特性,那么你的Python程序几乎不做任何修改就可以在不同的上运行。
5、可扩展性,如果你在开发的过程中,某一个算法或者某一个核心功能不希望公开,你可以采用c或者c++来编写,然后在Python中使用即可。
6、可嵌入性,Python可以嵌入c或者c++程序,从而向你的程序用户提供脚本功能。
缺点:
1、速度慢,Python的运行速度比c语言或者java都要慢,但是这种“慢”用肉眼是无法感知的。如果你要编写例如搜索引擎这种对速度要求很高的程序,你完全可以采用c或者其他语言编写。
2、代码是明文,因为Python是解释型的语言,运行的直接是源程序。如果你要编写保密性很高的程序,要求源码是加密的,你从一开始就不能选择Python语言来开发。
3、线程不能利用多CPU,这个主要是因为GIL的全局解释器锁造成的,它禁止多线程的并行执行。
三、python的几个解释器
1、CPython,C语言编写,官网推荐。常用的编译器。
2、IPython,基于CPython编写,交互性有所增强,不常用。
3、PyPy,执行速度快,对Python代码进行动态编译(不是解释),可以显著提高代码的运行速度。绝大部分Python程序都可以在PyPy下运行,但是也有可能会出现两种不同的结果,需要充分了解CPython和PyPy两者的不同。
4、Jython,运行在JAVA平台上的Python解释器。直接把Python代码编译成java字节码。
5、IronPython,运行在微软.NET平台上的解释器。
四、python2和python3的区别
1、如果有中文,在使用Python2时必须使用在程序最开始加上: # -*- coding: utf-8 -*- ,python3不需要。
2、print函数,在python2中:print ‘hello world’,在python3中:print('hello world') 。
五、变量
1、变量的命名规范:
1.1、必须是字母、数字或下划线的任意组合。
1.2、第一个字符不能是数字,也就是说变量的第一个字符必须是字母或者下划线。
1.3、变量名不能是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'
1.4、变量有两种定义的方式:
驼峰体:NumberOfStudents = 100
下划线:number_of_students = 100
1.5、变量名禁止中文,虽然在Python用中文做为变量名并不报错。
六、常量
Python没有专门的语法代表常量,即程序中不会改变的。通常约定俗成使用变量名全部大写代表一个常量。、
NUMBER_OF_STUDENTS = 100
七、字符编码
ASCII:表示英文及西欧语言,占用1个字节(8位)
GB2312:国家简体中文字符集,兼容ASCII,占用2个字节(16位)
Unicode:国际标准组织统一标准字符集。一般占用2个字节(16位),复杂的文字占用4位(32位)
GBK:GB2312的扩展字符集,支持繁体字,兼容GB2312,占用2个字节(16位)
UTF-8:ASCII占用1个字节(8位),西欧字符占2个字节(16位),中文占用3个字节(24位)
八、程序交互input
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 name = input("What is your name?") 4 age = input("How old are you?") 5 hometown = input("Where is your hometown?") 6 7 print("Hello ",name , "your are ", age , "years old, you came from",hometown)
程序的第一行是指定要用哪个解释器来执行程序。第二行告诉解释器用什么编码来执行源码,python3中不需要指定编码。
九、格式化输出
1、使用占位符:字符用%s,整数用%d,浮点数用%s
name = input('name :') age = input('age :') job = input('job :') salary = input('salary :') info=''' --------Info Of %s-------- Name : %s Age : %s Job : %s Salary : %s --------------------------'''%(name, name, age, job, salary) print(info)
这里的疑问:既然多行注释用的也是三个单引号,为何这里使用了三个单引号括起来的内容被当初了变量的值???
2、使用format
1 name = input('name :') 2 age = input('age :') 3 job = input('job :') 4 salary = input('salary :') 5 6 info=''' 7 --------Info Of {_name}-------- 8 Name : {_name} 9 Age : {_age} 10 Job : {_job} 11 Salary : {_salary} 12 --------------------------'''.format(_salary=salary, _age=age, _job=job, _name=name) 13 print(info) 14 15 info=''' 16 --------Info Of {0}-------- 17 Name : {0} 18 Age : {1} 19 Job : {2} 20 Salary : {3} 21 --------------------------'''.format(name, age, job, salary) 22 print(info)
十、流程控制if...else...
单分支:
if 条件: 满足条件后要执行的代码
双分支:
if 条件: 满足条件执行代码 else: if条件不满足就走这段
多分支:
if 条件: 满足条件执行代码 elif 条件: 上面的条件不满足就走这个 elif 条件: 上面的条件不满足就走这个 elif 条件: 上面的条件不满足就走这个 else: 上面所有的条件不满足就走这段
例题:把成绩分成ABCDE五个等级,等级与分数的对应关系如下:
A : 90-1000
B :80-89
C :60-79
D :40-59
E :0-39
1 while True: 2 score = input('请输入你的分数:') 3 if score.lower() == 'q': 4 break 5 6 if score.isdigit(): 7 score = int(score) 8 if score > 100: 9 print('你咋不上天呢?') 10 elif score >= 90: 11 print('A') 12 elif score >= 80: 13 print('B') 14 elif score >= 60: 15 print('C') 16 elif score >= 40: 17 print('D') 18 else: 19 print('E') 20 else: 21 print('你必须要输入一个数字。')
十一、循环while和for
注意两个关键字:
continue:跳出本次循环,执行下次循环。即continue后面的代码统统都不执行了,重新回到循环开始的地方接着进行下次循环。
break:结束当前循环或者跳出当前循环。即只要遇到break,就结束这个循环。
1 for i in range(0,10): 2 print('loop :', i) 3 4 for i in range(0,10,2): 5 print('loop :', i) 6 7 for i in range(0,10,3): 8 print('-----------%d'%i) 9 for j in range(0,10,2): 10 print(j)
1 my_age = 28 2 3 count = 0 4 while count < 3: 5 user_input = int(input("input your guess num:")) 6 7 if user_input == my_age: 8 print("Congratulations, you got it !") 9 break 10 elif user_input < my_age: 11 print("Oops,think bigger!") 12 else: 13 print("think smaller!") 14 count += 1 # 每次loop 计数器+1 15 else: 16 print("猜这么多次都不对,你个笨蛋.")
while后面的这个else,表示while部分的代码执行完了就执行else,break跳出循环则不执行else部分语句。
十二、注释
单行注释: # 被注释的内容
多行注释: '''被注释的内容''' 或者 """被注释的内容"""