python--1、入门
编译型vs解释型
编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
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的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。
以己之长,较他之短。显然是毫无意义的。没有最好的,只有最适合的。
Old Name |
New Name |
_winreg |
winreg |
ConfigParser |
configparser |
copy_reg |
copyreg |
Queue |
queue |
SocketServer |
socketserver |
markupbase |
_markupbase |
repr |
reprlib |
test.test_support |
test.support |
安装注意事项:
常用操作:
- 索引
- 切片
- 追加
- 删除
- 长度
- 切片
- 循环
- 包含
常用操作:
- 索引
- 新增
- 删除
- 键、值、键值对
- 循环
- 长度
基本运算符
假设a=10 , b=20
计算
比较
赋值
逻辑
优先级
条件判断语句: if为语句开始,elif为多次不同条件判断,else为不满足上面的条件则执行。可多层嵌套
if condition :
exec
elif condition :
exec
else :
exec
迭代式循环语句:for。每循环一次从数据中按顺序取出一个值,直到数据中所有值均被使用。可多层嵌套、
for i in range(0,9) :
exec
条件循环语句:while。 条件为真则循环,条件为假则停止循环。若条件定义为True则成死循环。可多层嵌套。
while condition :
exec
while的条件可以使用布尔值变量判断循环是否成立。在多个while嵌套需要一次退出时,可以通过修改该变量的布尔值一次控制多个循环退出。
while ...else 语句,while 后面的else 作用是当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
break与continue (仅适用于循环语句)
break 执行后会跳出此循环。外层循环不会受影响。
continue 执行后跳过此循环内后面的代码,直接开始下一次循环。
练手代码:
'1 使用while循环输出1 2 3 4 5 6 8 9 10'
number=1
while number <= 10:
if number == 7 :
number+=1
continue
print(number)
number+=1
while number <= 10 :
if number != 7 :
print(number)
number+=1
'2. 求1-100的所有数的和'
number2 = 0
total2 = 0
while number2 <= 100 :
total += number2
number2+=1
print(total)
装X方法:print(sum(range(101)))
'3. 输出 1-100 内的所有奇数'
number3 = 0
total3 = 0
while number3 <= 100 :
if number3 % 2 == 1:
total3 += number3
number3+=1
装X方法:print(sum(range(1,101,2)))
'4. 输出 1-100 内的所有偶数'
number4 = 0
total4 = 0
while number4 <= 100 :
if number4 % 2 == 0:
total4 += number4
number4+=1
print(total4)
装X方法:print(sum(range(0,101,2)))
'5. 求1-2+3-4+5 ... 99的所有数的和'
number5 = 0
odd = 0
even = 0
while number5 <= 99 :
if number5 % 2 == 1:
odd += number5
else :
even += number5
number5+=1
result = odd - even
print(result)
装X方法:print(sum(range(1,100,2))-sum(range(0,100,2)))
'6. 用户登陆(三次机会重试)'
user = 'jinyudong'
password = '666666'
count = 0
while count < 3 :
username = input('user->:')
passwd = input('passwd->:')
if username == user and password == passwd :
print('login OK !')
break
count+=1
print('login count is %d' %count)
else:
print('login error!')
'7:猜数字游戏'
import random
secret = random.randint(1,99)
# print(secret)
guess = 0
count = 0
print("AHOY! i'm the Dread Pirate Roberts, and I have a secret!")
print("It is a number from 1 to 99. I'll give you 6 tries.")
while count < 6:
guess = int(input( "What's yer guess?"))
if guess < secret:
print("Too low,ye scurvy dog!")
elif guess > secret:
print("Too high,landlubber!")
else :
print("Avast! Ye got it! Found my secret,ye did!")
break
count += 1
else:
print("No more guesses! Better luck next time,matey!")
print("The secret number was",secret)
'8:猜年龄游戏升级'
import random
secret = random.randint(1,99)
guess = 0
count = 0
print("AHOY! i'm the Dread Pirate Roberts, and I have a secret!")
print("It is a number from 1 to 99. I'll give you 6 tries.")
while count < 6:
guess = int(input( "What's yer guess?"))
if guess < secret:
print("Too low,ye scurvy dog!")
elif guess > secret:
print("Too high,landlubber!")
else :
print("Avast! Ye got it! Found my secret,ye did!")
break
if count == 5 :
print("Max error number,continue place 'y',exit place 'n'")
YorN = input('-->:')
if YorN == 'y':
count=0
continue
else:
exit()
count += 1
else:
print("No more guesses! Better luck next time,matey!")
print("The secret number was",secret)
天行健,君子以自强不息。
地势坤,君子以厚德载物。