Dayday up ---- python Day1
认识python
著名的“龟叔”吉多·范罗苏姆(Guido van Rossum)在1989年为了打发无聊圣诞节发明了python这门编程语言,作为ABC语言的一种继承。
如果你听说过TIOBE排行榜,你就能知道编程语言的大致流行程度,6月份占据第四,在4月份占据第五,每个月都会有排行更新。Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。
python是一门动态解释型的强类型定义语言,崇尚“优雅”、“明确”、“简单”,如果同样的功能你用C/C++写可能要写100行代码,而如果用Python写你可能只要20行代码就搞定,同样的如果一个问题有好几种解决方案,但是Python会用一种最简单的方法来实现。所以Python是用最简单最优雅最明确的方法来解决问题。开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节所以是一门高级语言。具有可移植性,由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上),如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行。可扩展性,如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。而且具有可嵌入性,你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

任何一门语言都不是完美的,当然python也有缺点:
- 速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.1s,用Python是0.01s,这样C语言直接比Python快了10s,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。
- 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
- 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。
学习python
(一)使用python2 or python3
Python 2.x is legacy, Python 3.x is the present and future of the language
在2014年11月,Python官网宣布python2.7将最晚支持到2020年,并且将不会再有python2.8的版本出现,请用户尽快升级python到3.4+的版本
(二)python2和python3的区别
1、python3中 print 是一个函数,这意味着在使用的时候必须带上小括号,并且它是带有参数的
Example:


2、从此不再为讨厌的字符编码而烦恼
Python3默认是支持中文的,ALL IS UNICODE NOW
3、新增语法 (A,*REST,B)=RANGE(5)

4、某些库改名了
|
Old Name |
New Name |
|
_winreg |
winreg |
|
ConfigParser |
configparser |
|
copy_reg |
copyreg |
|
Queue |
queue |
|
SocketServer |
socketserver |
|
markupbase |
_markupbase |
|
repr |
reprlib |
|
test.test_support |
test.support |
注: twisted 异步网络框架还不支持 3.x
(三)安装python
CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。使用最广的Python解释器。教程的所有代码也都在CPython下执行。
在Python的官网可以下载相应的版本,网址是https://www.python.org/downloads/,安装上面的提示安装好即可
安装时如果不是系统默认的安装路径,需要配置环境变量,windows: 【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】 linux: 默认是自带的python ,如果想升级在官网下载3.x的安装包
(四)编写hello world
安装好了环境之后,我们就可以编写代码了,这里我们以两种方式输出Hello,World,第一种我们用解释器来实现,打开cmd 或者linux 下直接执行python,这里使用linux环境:
[linux system ~]$ python Python 2.7.3 (default, Nov 3 2015, 16:43:23) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print("hello world") hello world >>>
输出一句 hello,world 只需要一行代码即可,但是有一个缺点,那就是如果不小心把窗口关闭了,代码就没有了,所以在实际工作中这种方式并不常用。
第二种我们将代码保存在 .py文件中,在这里使用的工具是pycharm Python IDE,可以先进行调试,ok之后保存为.py文件


.py文件第一行指出文件由python解释器来执行,第二是告诉解释器在加载文件时,采用何种编码,不加上这句的话,在python2中显示中文会出现乱码,在python3中则不会,所以你如果用的是windows而且用的是python3,其实可以不用加这两句,不过实际中还是建议加上这两句。到这里我们就用了两种方式输Hello,World。
运行.py的时候可以有两种方式,第一种是直接使用python hello.py 文件内可以不需要指定解释器,第二种将.py变成可执行程序,必须声明解释器,使用chmod +x hello.py 或chmod 755 hello.py 给予文件权限,然后直接在命令行运行 ./hello.py 即可执行脚本.
#!/usr/bin/env python -------使用系统默认解释器
#!/usr/bin/python -------指定python解释器
(五) 变量,用户输入输出
name = "Eva"
上述代码声明了一个变量,变量名为: name,变量name的值为:"Eva"
变量定义的规则:
-
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
['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']
变量赋值 examples:
name = "Eva" name2 = name print (name,name2) name = "ll" print (name,name2)
运行以上代码得到的name 和 name2 是什么呢? 代码中第一行name 赋值为 Eva,第二行代码中 name2 = name 那么 这是name和name2 都为Eva,name第二次赋值为ll,name值改变了,但是name2的值不会改变,原因是name 重新开辟了一块内存空间,而name2用的还是之前的name的内存空间,运行试试看
1 Eva Eva #第一个print结果 2 ll Eva #第二个print结果
同样的情况,如果赋的值是集合呢?
name = ['li','yan','xia'] name2 = name name.append('ll') print ( name2,'\n',name) #--- '\n'为换行符
结果:
1 ['li', 'yan', 'xia', 'll'] 2 ['li', 'yan', 'xia', 'll']
因为name.append 增加元素还是同一个变量,name增加或删除了某个元素,name2也会随之改变
字符编码ascii码无法表示中文 ,python2默认使用的是ascii编码
print "你好,世界"
直接输出会报错,应该告诉python解释器,用什么编码来执行源代码
# -*- coding: utf-8 -*- #告诉解释器使用utf-8,python3默认支持中文 print "你好,世界"
注释:
当行注释:#
多行注释: """ 被注释的内容 """ 或者 ''' 被注释内容''' 注释是用来解释程序的作用和功能,以后再实际的工作中要养成写注释的良好习惯
用户输入和输出
#name = raw_input("What is your name?\n") #only on python 2.x
name = input("what is your name?\n")
print ("hello %s " % (name)) #格式化输出
# print ("hello "+ name)
# print ("hello {_name}".format(_name=name))
# print ("hello {0}".format(name))
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法
#!/usr/bin/env python # --*-- coding: utf-8 --*-- import getpass pwd = getpass.getpass("please input your password:") print(pwd)
(六) if 判断语句
example1:
_name = "liyanxia" _pwd = "123" name = input("please input your name:") pwd = input("please input your password:") if name == _name and pwd == _pwd: # and 多个条件同时满足 == 为等号 =为赋值 #print("welcome ",name) print("welcome %s" % name) else: print("you input false")
example2:
my_age = 22 user_input = int(input("please input you guess num:")) #强制替换字符类型,int()数字类型 if user_input == my_age: print("you got it") elif user_input < my_age: #二次判断 print("oops,think bigger") else: print("think smaller!")
(七) for 循环
for i in range(10,20,2): # 代表从10到20,间隔2(不包含20) print("loop",i)
for i in range(10): if i<5: #如果i小于3,退出当前循环,所以会输出56789 continue print("loop:", i) for i in range(10): if i>5: #如果i大于5,退出整个循环,所以会输出 012345 break print("loop:", i)
continue 跳出本次循环,进入下一次循环
break 结束整个循环
for...else
my_age = 21 for i in range(3): guess_age = int(input("please input you guess:")) if guess_age == my_age: print("yes, you got it") break #如果猜对了,跳出本次循环 elif guess_age > my_age: print("you guess smaller") else: print("you guess bigger") else: print("you have tried too many times...")
(八) while 循环
count = 0
while True: #如果条件判断语句永远为 true,循环将会无限的执行下去,python3后,while 1 和 while True 效果一样
print("count:",count)
count +=1 # 同等于 count = count +1
if count == 10:
break
my_age = 22 while True: guess_age = int(input("please input your age:")) if guess_age == my_age: print("yes, you got it!") break elif guess_age > my_age: print("no,please think smaller..") else: print("no,please think bigger..")
以上实现的效果是,一直猜下去直到猜到为止,如果想限制猜测次数怎么写呢?那就需要添加计数器,以下代码
my_age = 22 count = 0 while True: if count == 3: #当count为3的时候退出整个循环 break guess_age = int(input("please input your age:")) if guess_age == my_age: print("yes, you got it!") break elif guess_age > my_age: print("no,please think smaller..") else: print("no,please think bigger..") count +=1
for...else
如果想循环次数超过3次之后提醒用户
my_age = 22 count = 0 while count < 3: guess_age = int(input("please input your age:")) if guess_age == my_age: print("yes, you got it!") break elif guess_age > my_age: print("no,please think smaller..") else: print("no,please think bigger..") count +=1 else: print("you have tried too many times...")
那如果想实现当次数超过三次之后提示用户是否还要继续猜呢
my_age = 22 count = 0 while count < 3: guess_age = int(input("please input your age:")) if guess_age == my_age: print("yes, you got it!") break elif guess_age > my_age: print("no,please think smaller..") else: print("no,please think bigger..") count +=1 #计数器 if count == 3: #当计数3次的时候执行 continue_confirm = input("do you want to keep guessing..?") if continue_confirm != 'n': #如果输入的不是n,则重置计数器,count = 0 count = 0 else: print("game over")


浙公网安备 33010602011771号