python 技巧 的整理
写在前面
逗比龙和jy 被我洗脑来学python了,还说我是传销。
我这是解救他们于水深火热好么!
写点 python的基本语法 和 python 技巧
一、模块的安装
主要有easy_install 和pip,用法如下
- easy_install XXXX
- pip install XXXX
- pip unistall XXXX
推荐用pip,以为它可以卸载模块
二、准备开始
- 在Linux下直接运行python #!/usr/bin/env python
- 标明文件编码,主要用于文件中如果有中文字符的话。。 **# -*_-coding:utf-8 -*_-**
- 单行注释 为#,多行注释可以用三个单引号如:''' XXX '''
三、python基本语法
(一)输入输出
1.输出:
从Hello word 开始
1 | print 'hello world' |
ps:print 遇到,自动打印一个空格,上面两句打印效果是一样的 : )
2.输入:
读入一行数据,并且打印的demo:
1 | name = raw_input() |
(二)一看就会的简单语句
1.条件
需要注意的是if /elif/ else后面均有 :
如果之后的语句只有一句,那么可以写在同一行
1 | if age >= 18: |
这么写也可以 : )
1 | age = 20 |
2.循环
(1) for xx in xxx :
1 | names = ['Michael', 'Bob', 'Tracy'] |
1 | for i in range(0 ,10 ): |
(2) while xx :
计算100以内所有奇数之和
1 | sum = 0 |
当然这只是个样例。。
【高级篇】其实我们可以一行搞定.....:
range(a,b,c) a起始位置, b终止位置(不包括b),c步长
1 | print sum(range(1,100,2)) |
(三)基本数据类型
1. list
list和C/C++中的数组很像,无非把{}改为[]
1 | classmates = ['Michael', 'Bob', 'Tracy'] |
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:
1 | print classmates[-1] #Tracy |
以此类推,可以获取倒数第2个、倒数第3个:
1 | print classmates[-2] #Bob |
添加和删除:
1 | classmates.append('Adam') 添加到末尾 |
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
1 | classmates[1] = 'Sarah' |
ist里面的元素的数据类型也可以不同,比如:
1 | L = ['Apple', 123, True] |
list元素也可以是另一个list,比如:
1 | s = ['python', 'java', ['asp', 'php'], 'scheme'] |
2.tuple
tuple和list非常类似,但是tuple一旦初始化就不能修改,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0],classmates[-1],但不能赋值成另外的元素
1 | classmates = ('Michael', 'Bob', 'Tracy') |
3.dict
其他语言中也称为map,使用键-值(key-value)存储
用Python写一个dict如下:
1 | d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} |
判断key是否存在:
1 | d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} |
通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
d.get('Thomas') d.get('Thomas', -1)
要删除一个key,用**pop(key)**
再来看样例2:
1 | a = {} |
setdefault('b',1) 如果key b不存在的话,就插入并且值设为1
而items=keys+values 即key和对应的value
4.set
要创建一个set,需要提供一个list作为输入集合:
1 | s = set([1, 2, 3]) |
add(key)方法可以添加元素到set中 remove(key)方法可以删除元素:
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作,也可以用in 来判断是否在集合中:
1 | s1 = set([1, 2, 3]) |
(四)函数
1.定义
def name (params):
1 | def my_abs(x): |
2.通过字符串调用Python函数
假如遇到下面这种情况:我们的函数名就差几个字母(因为是不同情况下的方法),难道要写个if elif 判断?
答案是No!这样太丑了!简直不忍直视!
答案是用eval(func_name)(params)进行调用!
eg:
1 | # -*- coding:utf-8 -*- |
输出:
I'm a handsome boy
(五)觉得很爽的玩意
1.长度
求任意类型的长度统一:
1 | len(xxx) |
不像某语言,又size又length的
2.幂运算
python 的幂运算 如x的五次方,不必写pow(x,5)了,这么写太丑了。 直接x * 5 (两个 代表幂运算,perl也有这个)
3.切片
切片是最爽的功能: 看下面的例子你就秒懂了
1 | x=range(10,100); #x是个list |
Python简洁优雅的风格一览无遗啊!!!!
(六)循环进阶
1. range和xrange
range和xrange如果从0开始,都可以省略0。 他们的用法一样: 下面四句都是等价的,即循环从[0,10) 不包括10
1 | for i in range(10): |
在Python2中,range直接生成了一个list,占用空间大,而xrange是生成一个迭代器,占用资源小,效率高,推荐后者。
PS:python3中删除了range的实现,改为xrange的实现方法。同时保留了xrange。
2. for 从大到小
你以为For循环只能从小到大么? 一开始学的时候我还觉得不科学,其实不是的。 下面的代码输出从10~1的数:是的,它和切片一样,最后一个都是表示步长
1 | for i in xrange(10,0,-1): |
四、数组
数组创建和初始化
1 | a = [0] * 10 #一维数组 |
warning: 二维数组不能采用如下方法进行初始化(这样只是浅拷贝)
1 | a = [[0]*3]*3 #想要生成3*3的二维数组 |
Output:
1 | [[0, 0, 0], [0, 0, 0], [0, 0, 0]] |
五、字符串
写过其他高级语言的都知道,字符串的连接用 + ,字符串复制 = ,分割字符串split
(一)字母转化
1.大小写转化
1 | name = 'Hrwhisper' |
输出:
HRWHISPER hrwhisper
2. ASCII编码转化
1 | print chr(65) #A |
(二)join
数组转字符串
1 | a = range(10) |
字符串插值
1 | a = ''.join(str(i) for i in xrange(10)) |
(三)切片
给定字符串位置进行复制
1 | a = ''.join(str(i) for i in xrange(10)) #0~9 |
翻转字符串
1 | a = ''.join(str(i) for i in xrange(10)) #0~9 |
字符串排序
1 | str= "".join((lambda x:(x.sort(),x)[1])(list(str))) |
去除末尾换行
1 | line = str.strip( '') |
六、栈和队列
python其实并没有这两个玩意,但是有list足矣。
栈
由于栈是后进先出,每次入栈,还是直接append(),出栈我们只需要pop(),即可
1 | a = range(5) |
队列
由于栈是先进先出,每次入队,还是直接append(),出队我们只需要pop(0),即可
1 | a = range(5) |
是不是比某写语言爽!!!
七、文件
推荐如下写法:每次读取一行,并且自带文件关闭。
1 | with open ('e:\My Clippings.txt') as f: |
毕竟咱总不至于非要这么写吧...
1 | try: |
对于打开一个文件,可以有如下三种读取方法:
- read()一次性读取全部,适用于小文件。
- read(size) 每次读取size 个大小,适用于文件大小未知。
- readlines() 每次读取一行,可以来读配置文件
1 | for line in f.readlines(): |
八、类
变量命名
- xxx :特殊的变量,可以直接访问。
- __xxx:就是private
- 其他的为Public
有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问