标签:
sys
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys print (sys.argv) #输出 $ python test.py helo world [ ‘test.py‘ , ‘helo‘ , ‘world‘ ] #把执行脚本时传递的参数获取到了 |
os
1
2
3
4
5
6
|
#!/usr/bin/env python # -*- coding: utf-8 -*- import os os.system( "df -h" ) #调用系统命令 |
完全结合一下
1
2
3
|
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 for mac
写完保存后就可以使用了
1
2
3
4
5
|
localhost:~ jieli$ python Python 2.7 . 10 (default, Oct 23 2015 , 18 : 05 : 06 ) [GCC 4.2 . 1 Compatible Apple LLVM 7.0 . 0 (clang - 700.0 . 59.5 )] on darwin Type "help" , "copyright" , "credits" or "license" for more information. >>> import tab |
你会发现,上面自己写的tab.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里啦,基本一般都放在一个叫 Python/2.7/site-packages 目录下,这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表。
1. Python是一门解释型语言?
我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!
为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。
2. 解释型语言和编译型语言
计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。
解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。
通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。
此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。
用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。
3. Python到底是什么
其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。
当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:
javac hello.java
java hello
只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。
4. 简述Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
2 是一个整数的例子。
长整数 不过是大一些的整数。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子。
int(整型)
"hello world"
1
2
3
4
|
name = "alex" print "i am %s " % name #输出: i am alex |
PS: 字符串是 %s;整数 %d;浮点数%f
1
2
3
|
name_list = [ ‘alex‘ , ‘seven‘ , ‘eric‘ ] 或 name_list = list ([ ‘alex‘ , ‘seven‘ , ‘eric‘ ]) |
基本操作:
1
2
3
|
ages = ( 11 , 22 , 33 , 44 , 55 ) 或 ages = tuple (( 11 , 22 , 33 , 44 , 55 )) |
1
2
3
|
person = { "name" : "mr.wu" , ‘age‘ : 18 } 或 person = dict ({ "name" : "mr.wu" , ‘age‘ : 18 }) |
常用操作:
场景一、用户登陆验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 提示输入用户名和密码 # 验证用户名和密码 # 如果错误,则输出用户名或密码错误 # 如果成功,则输出 欢迎,XXX! #!/usr/bin/env python # -*- coding: encoding -*- import getpass name = raw_input ( ‘请输入用户名:‘ ) pwd = getpass.getpass( ‘请输入密码:‘ ) if name = = "alex" and pwd = = "cmd" : print ( "欢迎,alex!" ) else : print ( "用户名和密码错误" ) |
场景二、猜年龄游戏
在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了
最简单的循环10次
1
2
3
4
5
6
|
#_*_coding:utf-8_*_ __author__ = ‘Alex Li‘ for i in range ( 10 ): print ( "loop:" , i ) |
输出:
1
2
3
4
5
6
7
8
9
10
|
loop: 0 loop: 1 loop: 2 loop: 3 loop: 4 loop: 5 loop: 6 loop: 7 loop: 8 loop: 9 |
需求一:还是上面的程序,但是遇到小于5的循环次数就不走了,直接跳入下一次循环
1
2
3
4
|
for i in range ( 10 ): if i< 5 : continue #不往下走了,直接进入下一次loop print ( "loop:" , i ) |
需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出
1
2
3
4
|
for i in range ( 10 ): if i> 5 : break #不往下走了,直接跳出整个loop print ( "loop:" , i ) |
有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。
海枯石烂代码
1
2
3
4
5
|
count = 0 while True : print ( "你是风儿我是沙,缠缠绵绵到天涯..." ,count) count + = 1 |
其实除了时间,没有什么是永恒的,死loop还是少写为好
上面的代码循环100次就退出吧
回到上面for 循环的例子,如何实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序。
作业一:博客
作业二:编写登陆接口
if...else 和 if....elif...elif..........else
需求一、用户身份认证
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/env python #-*- coding:utf-8 -*- import getpass name = raw_input ( "请输入用户名:" ) pwd = raw_input ( "请输入密码:" ) if name = = "tianshuai" and pwd = = "123" : print "登录成功" else : print "登录失败" |
测试:
1
2
3
4
5
6
7
8
9
|
root@tim: / home / tim # python tianshuai.py 请输入用户名:tianshuai 请输入密码: 登录成功 root@tim: / home / tim # python tianshuai.py 请输入用户名:tianshuai 请输入密码: 登录失败 root@tim: / home / tim # |
需求二、根据用户输入内容输出其权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/usr/bin/env python #-*- coding:utf-8 -*- ‘‘‘ tianshuai--->普通用户 eric--->管理用户 alex--->超级用户 ‘‘‘ name = raw_input ( "请输入用户名:" ) if name = = "tianshuai" : print "普通用户" elif name = = "eric" : print "管理用户" elif name = = "alex" : print "超级用户" else : print "没有此用户" |
输出结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
root@tim: / home / tim # python tianshuai.py 请输入用户名:tianshuai 普通用户 root@tim: / home / tim # python tianshuai.py 请输入用户名:eric 管理用户 root@tim: / home / tim # python tianshuai.py 请输入用户名:alex 超级用户 root@tim: / home / tim # python tianshuai.py 请输入用户名:lksjdfsdf 没有此用户 root@tim: / home / tim # |
for i in range(100) and for i in xrange(1,100)
需求一、猜数字游戏
有3次机会,如果3次中没有猜中给予提示,3次都没有猜中,鼓励!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/usr/bin/env python #-*- coding:utf-8 -*- import random #随机模块 rand_num = random.randrange( 10 ) for i in range ( 3 ): guess_num = int ( raw_input ( "请猜测数字:" )) if guess_num = = rand_num: print "太棒了你猜对了" break elif guess_num > rand_num: print "你猜测的有点大了,请尝试小点的数字" else : print "你猜测的有点小了,请尝试大点的数字" else : print "不要灰心,这次只是运气不好,请下次尝试" print "这个真正的数字是:%" % rand_num |
输出结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
root@tim: / home / tim # python tianshuai.py 请猜测数字: 8 你猜测的有点大了,请尝试小点的数字 请猜测数字: 7 你猜测的有点大了,请尝试小点的数字 请猜测数字: 6 你猜测的有点大了,请尝试小点的数字 不要灰心,这次只是运气不好,请下次尝试 这个真正的数字是: 6 root@tim: / home / tim # python tianshuai.py 请猜测数字: 5 太棒了你猜对了 这个真正的数字是: 5 |
while 循环
他的原理是:当条件为真的时候运行,当条件为假的时候停止!
没有一个规定次数,不设置条件永远循环下去。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#!/usr/bin/env python #-*- coding:utf-8 -*- import time count = 0 while True : count + = 1 print "loop" ,count time.sleep( 3 ) #这个循环3秒钟自+1 ,后无线循环只要这个条件为”真“,就无限循环下去 那看下下面的例子 #!/usr/bin/env python #-*- coding:utf-8 -*- import time cout = 0 while cout < 3 : cout + = 1 print "shuai" ,cout time.sleep( 3 ) #这个循环每3秒循环一次,当条件cout < 3的时候为真(自己设置的条件),当cout 不小于3的时候为假(false)停止。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#!/usr/bin/env python #-*- coding:utf-8 -*- # import random rand_num = random.randrange( 10 ) try_cout = 0 while try_cout < 3 : guess_num = int ( raw_input ( "请输入猜测的数字:" )) if guess_num > 10 : print "输入的数字超出范围了" continue if guess_num = = rand_num: print "哇!太棒了你猜对了" break elif guess_num < rand_num: print "你猜的数字有点小了,请尝试大点的数字" else : print "你猜的数字有点大了,请尝试小点的数字" try_cout + = 1 else : print "不要灰心你,这次只是运气不好,请下次尝试" print "这个真正的数字是:%d" % rand_num #当执行到guess_num> 10 如果你输入的是大于10的数字那么将会执行continue,就会跳出档次循环,没有执行try_cout +=1 所以没有计数! |
注:continue 是跳出当前循环,break是跳出整个循环!
有个需求,我想返回我的上层怎么做,用标识位!如下面的例子:
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/env python #-*- coding:utf-8 -*- # while True : print "我是第一层" while True : print "我是第二层" while True : print "我是第三层" |
这就是个死循环,当执行到第三个循环的时候就无限循环,这里有人回想,用break行不行,不行如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/usr/bin/env python #-*- coding:utf-8 -*- # while True : print "我是第一层" break while True : print "我是第二层" break while True : print "我是第三层" break |
这个的输出结果:
1
2
|
root@tim: / home / tim # python tianshuai.py 我是第一层 |
就只执行了第一个循环就跳出,不我们想要的效果,那就用到“标志位”了,工作中也有很多地方用到他:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#!/usr/bin/env python #-*- coding:utf-8 -*- # count = 0 while True : print "我是第一层" jump_1_flag = False while True : print "我是第二层" jump_2_flag = False while True : count + = 1 print "我是第三层" if count > 3 : jump_2_flag = True break if jump_2_flag: print "第三层跳到我这里来了,我也要跳到第一层" jump_1_flag = True break if jump_1_flag: print "第二层和第三层跳到第一层了,我也要跳" break |
执行结果:
十、Pthon运算符
Python算术运算符:
操作符 | 描述符 | 例子 |
---|---|---|
+ | 加法 - 对操作符的两侧增加值 | a + b = 30 |
- | 减法 - 减去从左侧操作数右侧操作数 | a - b = -10 |
* | 乘法 - 相乘的运算符两侧的值 | a * b = 200 |
/ | 除 - 由右侧操作数除以左侧操作数 | b / a = 2 |
% | 模 - 由右侧操作数和余返回除以左侧操作数 | b % a = 0 |
** | 指数- 执行对操作指数(幂)的计算 | a**b = 10 的幂 20 |
// | 地板除 - 操作数的除法,其中结果是将小数点后的位数被除去的商。 | 9//2 = 4 而 9.0//2.0 = 4.0 |
1
2
3
4
5
6
7
8
|
>>> a = 21 >>> b = 10 >>> c = 0 >>> c = a + b ; print c 31 >>> c = a - b ; print c11>>> c = a * b ; print c210 >>> c = c / b ; print c 21 >>> c = c % b ; print c 1 |
Python的比较操作符:
运算符 | 描述 | 示例 |
---|---|---|
== | 检查,两个操作数的值是否相等,如果是则条件变为真。 | (a == b) 不为 true. |
!= | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | (a != b) 为 true. |
<> | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | (a <> b) 为 true。这个类似于 != 运算符 |
> | 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 | (a > b) 不为 true. |
< | 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 | (a < b) 为 true. |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 | (a >= b) 不为 true. |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 | (a <= b) 为 true. |
1
2
3
4
5
6
7
8
|
>>> a = 21 >>> b = 10 >>> c = 0 >>> c = a + b ; print c 31 >>> c = a - b ; print c11>>> c = a * b ; print c210 >>> c = c / b ; print c 21 >>> c = c % b ; print c 1 |
Python赋值运算符:
运算符 | 描述 | 示例 |
---|---|---|
= | 简单的赋值运算符,赋值从右侧操作数左侧操作数 | c = a + b将指定的值 a + b 到 c |
+= | 加法AND赋值操作符,它增加了右操作数左操作数和结果赋给左操作数 | c += a 相当于 c = c + a |
-= | 减AND赋值操作符,它减去右边的操作数从左边操作数,并将结果赋给左操作数 | c -= a 相当于 c = c - a |
*= | 乘法AND赋值操作符,它乘以右边的操作数与左操作数,并将结果赋给左操作数 | c *= a 相当于 c = c * a |
/= | 除法AND赋值操作符,它把左操作数与正确的操作数,并将结果赋给左操作数 | c /= a 相当于= c / a |
%= | 模量AND赋值操作符,它需要使用两个操作数的模量和分配结果左操作数 | c %= a is equivalent to c = c % a |
**= | 指数AND赋值运算符,执行指数(功率)计算操作符和赋值给左操作数 | c **= a 相当于 c = c ** a |
//= | 地板除,并分配一个值,执行地板除对操作和赋值给左操作数 | c //= a 相当于 c = c // a |
1
2
3
4
5
6
7
8
|
>>> a = 21 >>> b = 10 >>> c = 0 >>> >>> c = a + b >>> c + = a ; print c 52 >>> c + = a is c = c + a |
Python位运算符:
操作符 | 描述 | 示例 |
---|---|---|
& | 二进制和复制操作了一下,结果,如果它存在于两个操作数。 | (a & b) = 12 即 0000 1100 |
| | 二进制或复制操作了一个比特,如果它存在一个操作数中。 | (a | b) = 61 即 0011 1101 |
^ | 二进制异或运算符的副本,如果它被设置在一个操作数而不是两个比特。 | (a ^ b) = 49 即 0011 0001 |
~ | 二进制的补运算符是一元的,并有“翻转”位的效果。 | (~a ) = -61 即 1100 0011以2的补码形式由于带符号二进制数。 |
<< | 二进位向左移位运算符。左操作数的值左移由右操作数指定的位数。 | a << 2 = 240 即 1111 0000 |
>> | 二进位向右移位运算符。左操作数的值是由右操作数指定的位数向右移动。 | a >> 2 = 15 即 0000 1111 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
二进制“与”计算:( 1 和 1 = 1 0 和任意都为 0 ) a = 10 b = 49 a&b 10 0 0 0 0 1 0 1 0 49 0 0 1 1 0 0 0 1 = 0 0 0 0 0 0 0 0 0 二进制“或”计算:(遇 1 得 1 ) a|b a = 60 # 60 = 0 0 1 1 1 1 0 0 b = 13 #13 = 0 0 0 0 1 1 0 1 = 0 0 1 1 1 1 0 1 = 0 + 0 + 32 + 16 + 8 + 4 + 0 + 1 = 61 二进制“异或”运算:(相同为 0 ,不同为 1 ) a^b a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 0011 0001 = 0 + 0 + 32 + 16 + 0 + 0 + 0 + 1 = 49 二进制取反运算:( 0 置换为 1 , 1 置换为 0 ) ~a a = 60 # 60 = 0011 1100 那么 - a = 1100 0011 128 + 64 + 2 + 1 = 二进位向左、右移位运算符: a = 2 那么 往左移 1 位就是 4 如下: a<< 1 = 4 ; a>> 1 = 1 |
Python逻辑运算符:
运算符 | 描述 | 示例 |
---|---|---|
and | 所谓逻辑与运算符。如果两个操作数都是真的,那么则条件成立。 | (a and b) 为 true. |
or | 所谓逻辑OR运算符。如果有两个操作数都是非零然后再条件变为真。 | (a or b) 为 true. |
not | 所谓逻辑非运算符。用于反转操作数的逻辑状态。如果一个条件为真,则逻辑非运算符将返回false。 |
not(a and b) 为 false. |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
例子: and 运算,都为真时为真 >>> 9 > 8 and 9 < 10 True >>> 9 > 8 and 9 > 10 False or 运算,有一个为真的时候即可为真 >>> 9 > 8 or 9 > 10 True >>> 9 < 8 or 9 > 10 False >>> not 运算,假为真真为假 >>> not 6.2 < = 6 True >>> not 6.2 > = 6 False >>> |
import sysimport readlineimport 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
for mac
标签:
原文地址:http://www.cnblogs.com/jasonwang-2016/p/5478588.html