python是解释性语言
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
python中有一个pyc文件?
编译型vs解释型
编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
动态语言和静态语言
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
(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的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。
Hello World程序
1 >>> print('hello world') 2 hello world
变量的赋值
1 name = 'test' 2 name2 = name 3 print(name,name2) 4 5 name = 'change' 6 print(name,name2)
用户输入
username = input("username:") password = input("passwd:") print(username,password) #输入密码时不可见,用getpass模块 >>> #-*- coding: utf-8 -*- ... import getpass >>> pwd = getpass.getpass("input passwd") input passwd >>> print(pwd) 123
sys,os模块 (库 直接导入可以用的叫标准库 第三方库必须下载安装)
import sys print(sys.argv) #['C:/Users/Thinkpa/PycharmProjects/python_lesson/lesson01/变量的赋值.py'] >>> import os >>> os.system("df -h") Filesystem Size Used Avail Use% Mounted on /dev/sda3 16G 13G 2.7G 82% / tmpfs 1012M 88K 1012M 1% /dev/shm /dev/sda1 194M 30M 155M 17% /boot
格式化输出
1 #格式化输出 2 name = input("name:") 3 age = input("age") 4 #age = int(input("age")) 转换数据类型 整型 integer 5 print(type(age)) #打印数据类型 6 job = input("job:") 7 8 #格式化输出1 拼接 开启内存多 9 info1 = ''' 10 ---output one--- 11 name: '''+name+ ''' 12 age: '''+age+''' 13 job: '''+job+''' 14 ''' 15 print(info1) 16 17 #格式化输出2 18 #%s字符 %d 小数 %d浮点数 19 info2 = ''' 20 ---output two--- 21 name: %s 22 age: %s 23 job: %s 24 ''' %(name,age,job) 25 print(info2) 26 27 #格式化输出3 28 info3 = ''' 29 ---output three--- 30 name: {Name} 31 age: {Age} 32 job: {Job} 33 '''.format(Name=name, 34 Age=age, 35 Job=job) 36 print(info3) 37 38 #格式化输出4 39 info4 = ''' 40 ---output four--- 41 name: {0} 42 age: {1} 43 job: {2} 44 '''.format(name,age,job) 45 print(info4)
if else语句
#if else 语句 user_name = "test" pass_word = "123" username = input("username:") password = input("password:") if username == user_name and password == pass_word: print("Welcome user {name} login...".format(name=username)) else: print("Invalid username/password!")
while True
count = 0 while True: print(count) count += 1 if count == 100: break
for循环
#for循环 跳着打印 for i in range(0,10,2): print("loop ",i) #break结束当次循环 for i in range(10): print("===",i) for j in range(10): print(j) if j > 5: break #跳出当次循环
continue与break
continue #continue 跳出本次循环开始下次循环 for i in range(10): if i<5: continue #不往下走了,直接进入下一次loop print("loop:", i ) break for i in range(10): if i>5: break #不往下走了,直接跳出整个loop print("loop:", i )
流程控制
1 #if elif else 语句 while True 2 age = 30 3 count = 0 4 while True: 5 guess_age = int(input("guess age:")) 6 if guess_age == age: 7 print("right...") 8 break 9 elif guess_age > age: 10 print("smaller...") 11 else: 12 print("bigger...") 13 if count == 3: 14 break 15 count += 1 16 17 #while 后面直接加条件 else 18 age = 30 19 count = 0 20 while count < 3: 21 guess_age = int(input("guess age:")) 22 if guess_age == age: 23 print("right...") 24 break 25 elif guess_age > age: 26 print("smaller...") 27 else: 28 print("bigger...") 29 count += 1 30 else: 31 print("too many times") 32 # if count == 3: 33 # print("too many times") 34 35 #改为for循环 36 age = 30 37 for i in range(3): 38 guess_age = int(input("guess age:")) 39 if guess_age == age: 40 print("right...") 41 break 42 elif guess_age > age: 43 print("smaller...") 44 else: 45 print("bigger...") 46 else: 47 print("too many times") 48 49 #每执行三次 询问一次 50 age = 30 51 count = 0 52 while count < 3: 53 guess_age = int(input("guess age:")) 54 if guess_age == age: 55 print("right...") 56 break 57 elif guess_age > age: 58 print("smaller...") 59 else: 60 print("bigger...") 61 count += 1 62 if count == 3: 63 countine_con = input("keep input") 64 if countine_con != 'n': 65 count = 0
三元运算
>>> a,b,c = 1,3,5 >>> d = a if a > b else c #不用三元运算 >>> if a > b:d = a ... else:d=c ...
bytes和string相互转换
#bytes --> string 用decode 编码 #string --> bytes 用incode 解码 #string(字符类型) --> bytes(二进制类型) >>> msg = "欢迎" >>> print(msg.encode(encoding="utf-8")) #写上字符编码 b'\xe6\xac\xa2\xe8\xbf\x8e' >>> print(msg.encode()) #系统默认字符编码为utf-8 b'\xe6\xac\xa2\xe8\xbf\x8e' #bytes --> string >>> print(msg.encode(encoding="utf-8").decode(encoding="utf-8")) 欢迎