windows:python
一、下载安装包 https://www.python.org/downloads/ 二、安装 默认安装路径:C:\python27 三、配置环境变量 【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】 如:原来的值;C:\python27,前面有分号
linux:linux
自带python环境 若是自带python2.6环境更新至python2.7,推荐使用pyenv进行python版本管理
windows:git
卸载重装
linux:程序员
源码方式:github
查看默认Python版本 python -V 一、安装gcc,用于编译Python源码 yum install gcc 二、下载源码包,https://www.python.org/ftp/python/ 三、解压并进入源码文件 四、编译安装 ./configure make all make install 五、查看版本 /usr/local/bin/python2.7 -V 六、修改默认Python版本 mv /usr/bin/python /usr/bin/python2.6 ln -s /usr/local/bin/python2.7 /usr/bin/python 七、防止yum执行异常,修改yum使用的Python版本 vi /usr/bin/yum 将头部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6
pyenv方式:算法
一、安装依赖包 yum install readline readline-devel readline-static openssl openssl-devel openssl-static sqlite-devel bzip2-devel bzip2-libs -y 二、安装pyenv git clone git://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc exec $SHELL -l 3.安装python pyenv install --list pyenv install 2.7.9 -v pyenv rehash 四、修改默认python版本 mv /usr/bin/python /usr/bin/python.2.6 ln -s ~/.pyenv/versions/2.7.9/bin/python /usr/bin/python 五、修改yum使用的python版本 vim /usr/bin/yum 将头部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6
linux下建立hello.py文件并输入:sql
print("Hello World!")
而后执行python shell
[root@KVM01 ~]# echo 'print ("Hello World")' > hello.py [root@KVM01 ~]# python hello.py Hello World
指定解释器vim
上一步中执行 python hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。windows
若是想要相似于执行shell脚本同样执行python脚本,例: ./hello.py
,那么就须要在 hello.py 文件的头部指定解释器,以下:
#!/usr/bin/env python print "Hello World"
执行前须要赋予文件执行权限
chmod +x hello.py ./hello.py
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其余西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,因此,ASCII码最多只能表示 255 个符号。
显然ASCII码没法将世界上的各类文字和符号所有表示,因此,就须要新出一种能够表明全部字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每一个字符设定了统一而且惟一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他再也不使用最少使用2个字节,而是将全部的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
因此,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),若是是以下代码的话:
报错:ascii码没法表示中文
[root@KVM01 ~]# cat hello.py
#!/usr/bin/env python
print ("你好,世界")
[root@KVM01 ~]# ./hello.py File "./hello.py", line 3 SyntaxError: Non-ASCII character '\xe4' in file ./hello.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
改正:应该告诉python解释器,用什么编码来执行源代码
#!/usr/bin/env python # -*- coding: utf-8 -*- print "你好,世界"
print
会依次打印每一个字符串,遇到逗号“,”会输出一个空格,所以,输出的字符串是这样拼起来的:
print
也能够打印整数,或者计算结果:
#!/usr/bin/env python # -*- coding: utf-8 -*- print 100+1 [root@KVM01 ~]# ./hello.py 101
当前行注释 # 被注释内容
多行注释 """ 被注释内容 """
Variables are used to store information to be referenced and manipulated in a computer program. They also provide a way of labeling data with a descriptive name, so our programs can be understood more clearly by the reader and ourselves. It is helpful to think of variables as containers that hold information. Their sole purpose is to label and store data in memory. This data can then be used throughout your program.
声明变量
#!/usr/bin/env python # -*- coding: utf-8 -*- name = "chuan z"
变量定义的规则:
变量的赋值
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "chuan z"
name2 = "zzc"
print name1,name2
#!/usr/bin/env python # -*- coding:utf-8 -*- name = raw_input('please enter your name:')
print 'hello,',name
输入密码时,若是想要不可见,须要利用getpass 模块中的 getpass方法
#!/usr/bin/env python # -*- coding:utf-8 -*- import getpass # 将用户输入的内容赋值给 name 变量 pwd = getpass.getpass("请输入密码:") # 打印输入的内容 print pwd
Python的强大之处在于他有很是丰富和强大的标准库和第三方库,Python有大量的模块,从而使得开发Python程序很是简洁。类库有三种:
Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys print sys.argv
[root@KVM01 ~]# ./hello.py zzc
['./hello.py', 'zzc'] #把执行脚本时传入的参数获取到了
os模块,在python程序里调用系统命令
#!/usr/bin/env python # -*- coding:utf-8 -*- import os os.system("df -h")
示例
#!/usr/bin/env python # -*- coding:utf-8 -*- import os,sys os.system(''.join(sys.argv[1:])) #把用户的输入的参数看成一条命令交给os.system来执行
Python Tab补全模块
import sys import readline import rlcompleter if sys.platform == 'darwin' and sys.version_info[0] == 2: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete") # linux and python3 on mac
#!/usr/bin/env python # python startup file import sys import readline import rlcompleter import atexit import os # tab completion readline.parse_and_bind('tab: complete') # history file histfile = os.path.join(os.environ['HOME'], '.pythonhistory') try: readline.read_history_file(histfile) except IOError: pass atexit.register(readline.write_history_file, histfile) del os, histfile, readline, rlcompleter
上面本身写的tab.py模块只能在当前目录下导入,若是想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里,基本通常都放在一个叫 Python/2.7/site-packages 目录下,这个目录在不一样的OS里放的位置不同,用 print(sys.path) 能够查看python环境变量列表。
执行Python代码时,若是导入了其余的 .py 文件,那么,执行过程当中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译以后产生的字节码。
ps:代码通过编译能够产生字节码;字节码经过反编译也能够获得代码。
一、数字
1 是一个整数的例子。
长整数 不过是大一些的整数。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数,数学中表示复数是什么?
int(整型)
真或假
1 或 0
"hello world"
字符串拼接:
python中的字符串在C语言中体现为是一个字符数组,每次建立字符串时候须要在内存中开辟一块连续的空,而且一旦须要修改字符串的话,就须要再次开辟空间,万恶的+号每出现一次就会在内从中从新开辟一块空间。
字符串格式化
name = "tom" print "i am %s " % name #输出: i am tom
name = "i am %s,age %d" %("zz",20)
name = "i am %s,age %d"
name %("zz",20)
name = "i am {0},age {1}"
name.format("zz",20)
PS: 字符串是 %s;整数 %d;浮点数%f
字符串经常使用功能:
移除空白
分割
长度
索引
切片
建立列表:
name_list = ['faker', 'insec', 'pdd'] 或 name_list = list(['faker', 'insec', 'pdd'])
基本操做:
五、元祖(不可变列表)
建立元祖:
ages = (11, 22, 33, 44, 55) 或 ages = tuple((11, 22, 33, 44, 55))
基本操做:
索引
切片
循环
长度
包含
六、字典(无序)
建立字典:
person = {"name": "insec", 'age': 18} 或 person = dict({"name": "insec", 'age': 18})
经常使用操做:
9、数据运算
算数运算
如下假设变量a为10,变量b为20:
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 - 两个对象相加 | a + b 输出结果 30 |
- | 减 - 获得负数或是一个数减去另外一个数 | a - b 输出结果 -10 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 200 |
/ | 除 - x除以y | b / a 输出结果 2 |
% | 取模 - 返回除法的余数 | b % a 输出结果 0 |
** | 幂 - 返回x的y次幂 | a**b 为10的20次方, 输出结果 100000000000000000000 |
// | 取整除 - 返回商的整数部分 | 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 |
比较运算
如下假设变量a为10,变量b为20
算符 | 描述 | 实例 |
---|---|---|
== | 等于 - 比较对象是否相等 | (a == b) 返回 False。 |
!= | 不等于 - 比较两个对象是否不相等 | (a != b) 返回 true. |
<> | 不等于 - 比较两个对象是否不相等 | (a <> b) 返回 true。这个运算符相似 != 。 |
> | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
< | 小于 - 返回x是否小于y。全部比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | (a < b) 返回 true。 |
>= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
<= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 true。 |
赋值运算
如下假设变量a为10,变量b为20:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
逻辑运算
如下假设变量 a 为 10, b为 20:
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and | x and y | 布尔"与" - 若是 x 为 False,x and y 返回 False,不然它返回 y 的计算值。 | (a and b) 返回 20。 |
or | x or y | 布尔"或" - 若是 x 是非 0,它返回 x 的值,不然它返回 y 的计算值。 | (a or b) 返回 10。 |
not | not x | 布尔"非" - 若是 x 为 True,返回 False 。若是 x 为 False,它返回 True。 | not(a and b) 返回 False |
成员运算
运算符 | 描述 | 实例 |
---|---|---|
in | 若是在指定的序列中找到值返回 True,不然返回 False。 | x 在 y 序列中 , 若是 x 在 y 序列中返回 True。 |
not in | 若是在指定的序列中没有找到值返回 True,不然返回 False。 | x 不在 y 序列中 , 若是 x 不在 y 序列中返回 True。 |
身份运算
运算符 | 描述 | 实例 |
---|---|---|
is | is是判断两个标识符是否是引用自一个对象 | x is y, 若是 id(x) 等于 id(y) , is 返回结果 1 |
is not | is not是判断两个标识符是否是引用自不一样对象 | x is not y, 若是 id(x) 不等于 id(y). is not 返回结果 1 |
位运算
按位运算符是把数字看做二进制来进行计算的。Python中的按位运算法则以下:
下表中变量 a 为 60,b 为 13,二进制格式以下:
a = 0011 1100 b = 0000 1101 ----------------- a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,若是两个相应位都为1,则该位的结果为1,不然为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每一个二进制位取反,即把1变为0,把0变为1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位所有左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>"左边的运算数的各二进位所有右移若干位,">>"右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
#!/usr/bin/python # -*- coding:utf-8 -*- a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a & b; # 12 = 0000 1100 print "1 - c 的值为:", c c = a | b; # 61 = 0011 1101 print "2 - c 的值为:", c c = a ^ b; # 49 = 0011 0001 print "3 - c 的值为:", c c = ~a; # -61 = 1100 0011 print "4 - c 的值为:", c c = a << 2; # 240 = 1111 0000 print "5 - c 的值为:", c c = a >> 2; # 15 = 0000 1111 print "6 - c 的值为:", c
*按位取反运算规则(按位取反再加1) 详解http://blog.csdn.net/wenxinwukui234/article/details/42119265
运算符优先级
从最高到最低优先级的全部运算符:
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 'AND' |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not or and | 逻辑运算符 |
如下实例演示了Python全部运算符优先级的操做:
#!/usr/bin/python # -*- coding:utf-8 -*- a = 20 b = 10 c = 15 d = 5 e = 0 e = (a + b) * c / d #( 30 * 15 ) / 5 print "(a + b) * c / d 运算结果为:", e e = ((a + b) * c) / d # (30 * 15 ) / 5 print "((a + b) * c) / d 运算结果为:", e e = (a + b) * (c / d); # (30) * (15/5) print "(a + b) * (c / d) 运算结果为:", e e = a + (b * c) / d; # 20 + (150/5) print "a + (b * c) / d 运算结果为:", e
以上实例输出结果:
(a + b) * c / d 运算结果为: 90 ((a + b) * c) / d 运算结果为: 90 (a + b) * (c / d) 运算结果为: 90 a + (b * c) / d 运算结果为: 50
场景1、用户登录验证
# 提示输入用户名和密码 # 验证用户名和密码 # 若是错误,则输出用户名或密码错误 # 若是成功,则输出 欢迎,XXX! #!/usr/bin/env python # -*- coding:encoding -*- import getpass name = raw_input('请输入用户名:') pwd = getpass.getpass('请输入密码:') if name == "insec" and pwd == "cmd": print("欢迎,insec!") else: print("用户名和密码错误")
场景2、猜年龄游戏
在程序里设定好你的年龄,而后启动程序让用户猜想,用户输入后,根据他的输入提示用户输入的是否正确,若是错误,提示是猜大了仍是小了
#!/usr/bin/env python # -*- coding:utf-8 -*- my_age = 27 user_input = int(input("input your guess num:")) if user_input == my_age: print("Congratulations, you got it !") elif user_input < my_age: print("Oops,think bigger!") else: print("think smaller!")
循环10次程序
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'illusion' for i in range(10): print("loop:", i )
执行输出
('loop:', 0) ('loop:', 1) ('loop:', 2) ('loop:', 3) ('loop:', 4) ('loop:', 5) ('loop:', 6) ('loop:', 7) ('loop:', 8) ('loop:', 9)
需求一:仍是上面的程序,可是遇到小于5的循环次数就不走了,直接跳入下一次循环
for i in range(10): if i<5: continue #不往下走了,直接进入下一次loop print("loop:", i )
需求二:仍是上面的程序,可是遇到大于5的循环次数就不走了,直接退出
for i in range(10): if i>5: break #不往下走了,直接跳出整个loop print("loop:", i )
死循环,应用在须要持续循环监控的场景下
count = 0 while True: print("while loop...",count) count +=1
上面的死循环程序循环到101次就退出
count = 0 while True: print("while loop...",count) count +=1 if count == 101: print("第101次的loop...") break
回到上面for 循环的例子,如何实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序。
#!/usr/bin/env python # -*- coding:utf-8 -*- my_age = 27 count = 0 while count < 3: user_input = int(input("input your guess num:")) if user_input == my_age: print("Congratulations, you got it !") break elif user_input < my_age: print("Oops,think bigger!") else: print("think smaller!") count += 1 #每次loop 计数器+1 else: print("今日机会已用完.")
习题一:编写登录接口